a.out.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /* The <a.out> header file describes the format of executable files. */
  2. /* This version is intended for the Atari ST */
  3. #ifndef _AOUT_H
  4. #define _AOUT_H
  5. struct exec { /* a.out header */
  6. unsigned char a_cpu; /* cpu id */
  7. unsigned char a_flags; /* flags, see below */
  8. unsigned char a_magic[2]; /* magic number */
  9. unsigned short a_version; /* version stamp */
  10. /* not used */
  11. unsigned char a_unused; /* reserved for future use */
  12. unsigned char a_hdrlen; /* length of header */
  13. long a_text; /* size of text segement in bytes */
  14. long a_data; /* size of data segment in bytes */
  15. long a_bss; /* size of bss segment in bytes */
  16. long a_no_entry; /* in fact: entry point, a_entry */
  17. long a_total; /* total memory allocated */
  18. long a_syms; /* size of symbol table */
  19. /* SHORT FORM ENDS HERE */
  20. long a_trsize; /* text relocation size */
  21. long a_drsize; /* data relocation size */
  22. long a_tbase; /* text relocation base */
  23. long a_dbase; /* data relocation base */
  24. };
  25. #define A_MAGIC0 (unsigned char) 0x03
  26. #define A_MAGIC1 (unsigned char) 0x01
  27. #define BADMAG(X) ((X).a_magic[0] != A_MAGIC0 ||\
  28. (X).a_magic[1] != A_MAGIC1)
  29. /* CPU Id of TARGET machine */
  30. /* byte order coded in low order two bits */
  31. #define A_NONE 0x00 /* unknown */
  32. #define A_I8086 0x04 /* intel i8086/8088 */
  33. #define A_M68K 0x0B /* motorola m68000 */
  34. #define A_NS16K 0x0C /* national semiconductor 16032 */
  35. #define A_I80386 0x10 /* intel i80386 */
  36. #define A_BLR(cputype) ((cputype&0x01)!=0) /* TRUE if bytes left-to-right */
  37. #define A_WLR(cputype) ((cputype&0x02)!=0) /* TRUE if words left-to-right */
  38. /* flags: */
  39. #define A_EXEC 0x10 /* executable */
  40. #define A_SEP 0x20 /* separate I/D */
  41. #define A_PURE 0x40 /* pure text */ /* not used */
  42. #define A_TOVLY 0x80 /* text overlay */ /* not used */
  43. /* offsets of various things: */
  44. #define A_MINHDR 32
  45. #define A_TEXTPOS(X) ((long)(X).a_hdrlen)
  46. #define A_DATAPOS(X) (A_TEXTPOS(X) + (X).a_text)
  47. #define A_HASRELS(X) ((X).a_hdrlen > (unsigned char) A_MINHDR)
  48. #define A_HASEXT(X) ((X).a_hdrlen > (unsigned char) (A_MINHDR + 8))
  49. #define A_HASLNS(X) ((X).a_hdrlen > (unsigned char) (A_MINHDR + 16))
  50. #define A_HASTOFF(X) ((X).a_hdrlen > (unsigned char) (A_MINHDR + 24))
  51. #define A_TRELPOS(X) (A_DATAPOS(X) + (X).a_data)
  52. #define A_DRELPOS(X) (A_TRELPOS(X) + (X).a_trsize)
  53. #define A_SYMPOS(X) (A_TRELPOS(X) + (A_HASRELS(X) ? \
  54. ((X).a_trsize + (X).a_drsize) : 0))
  55. struct reloc {
  56. long r_vaddr; /* virtual address of reference */
  57. unsigned short r_symndx; /* internal segnum or extern symbol num */
  58. unsigned short r_type; /* relocation type */
  59. };
  60. /* r_tyep values: */
  61. #define R_ABBS 0
  62. #define R_RELLBYTE 2
  63. #define R_PCRBYTE 3
  64. #define R_RELWORD 4
  65. #define R_PCRWORD 5
  66. #define R_RELLONG 6
  67. #define R_PCRLONG 7
  68. #define R_REL3BYTE 8
  69. #define R_KBRANCHE 9
  70. /* r_symndx for internal segments */
  71. #define S_ABS ((unsigned short)-1)
  72. #define S_TEXT ((unsigned short)-2)
  73. #define S_DATA ((unsigned short)-3)
  74. #define S_BSS ((unsigned short)-4)
  75. struct nlist { /* symbol table entry */
  76. char n_name[8]; /* symbol name */
  77. long n_value; /* value */
  78. unsigned char n_sclass; /* storage class */
  79. unsigned char n_numaux; /* number of auxiliary entries */
  80. /* not used */
  81. unsigned short n_type; /* language base and derived type */
  82. /* not used */
  83. };
  84. /* low bits of storage class (section) */
  85. #define N_SECT 07 /* section mask */
  86. #define N_UNDF 00 /* undefined */
  87. #define N_ABS 01 /* absolute */
  88. #define N_TEXT 02 /* text */
  89. #define N_DATA 03 /* data */
  90. #define N_BSS 04 /* bss */
  91. #define N_COMM 05 /* (common) */
  92. /* high bits of storage class */
  93. #define N_CLASS 0370 /* storage class mask */
  94. #define C_NULL
  95. #define C_EXT 0020 /* external symbol */
  96. #define C_STAT 0030 /* static */
  97. #endif /* _AOUT_H */