Changes
上传用户:yuppie_zhu
上传日期:2007-01-08
资源大小:535k
文件大小:3k
源码类别:

编译器/解释器

开发平台:

C/C++

  1. Differences between RDOFF versions 1 & 2
  2. ========================================
  3. This document is designed primarily for people maintaining code which
  4. uses RDOFF version 1, and would like to upgrade that code to work
  5. with version 2.
  6. The main changes are summarised here:
  7. Overall format
  8. ==============
  9. The overall format has changed somewhat since version 1, in order
  10. to make RDOFF more flexible. After the file type identifier (which
  11. has been changed to 'RDOFF2', obviously), there is now a 4 byte
  12. integer describing the length of the object module. This allows
  13. multiple objects to be concatenated, while the loader can easily
  14. build an index of the locations of each object. This isn't as
  15. pointless as it sounds; I'm using RDOFF in a microkernel operating
  16. system, and this is the ideal way of loading multiple driver modules
  17. at boot time.
  18. There are also no longer a fixed number of segments; instead there
  19. is a list of segments, immediately following the header.
  20. Each segment is preceded by a 10 byte header giving information about
  21. that segment. This header has the following format:
  22. Length Description
  23. 2 Type
  24. 2 Number
  25. 2 Reserved
  26. 4 Length
  27. 'Type' is a number describing what sort of segment it is (eg text, data,
  28. comment, debug info). See 'rdoff2.txt' for a list of the segment types.
  29. 'Number' is the number used to refer to the segment in the header records.
  30. Not all segments will be loaded; it is only intended that one code
  31. and one data segment will be loaded into memory. It is possible, however,
  32. for a loaded segment to contain a reference to an unloaded segment.
  33. This is an error, and should be flagged at load time. Or maybe you should
  34. load the segment... its up to you, really.
  35. The segment's data immediately follows the end of the segment header.
  36. HEADER RECORDS
  37. ==============
  38. All of the header records have changed in this version, but not
  39. substantially. Each record type has had a content-length code added,
  40. a single byte immediately following the type byte. This contains the
  41. length of the rest of the record (excluding the type and length bytes,
  42. but including the terminating nulls on any strings in the record).
  43. There are two new record types, Segment Relocation (6), and FAR import (7).
  44. The record formats are identical to Relocation (1) and import (2). They are
  45. only of real use on systems using segmented architectures. Systems using
  46. a flat model should treat FAR import (7) exactly the same as an import (2),
  47. and should either flag segment relocation as an error, or attempt to figure
  48. out whether it is a reference to a code or data symbol, and set the value
  49. referenced to the according selector value. I am opting for the former
  50. approach, and would recommend that others working on 32 bit flat systems
  51. do the same.