Some cleanups of N_TXTADDR and N_TXTOFF.
authorPer Bothner <per@bothner.com>
Wed, 20 Nov 1991 02:48:13 +0000 (02:48 +0000)
committerPer Bothner <per@bothner.com>
Wed, 20 Nov 1991 02:48:13 +0000 (02:48 +0000)
include/a.out.sun4.h
include/aout64.h

index 8d938b031d36024ee48224c1042163600ea962ad..5ad4845e0d01b3d3ff58fe74719b8ab91d0ed92b 100755 (executable)
@@ -7,6 +7,7 @@
 #define        SEG_SIZE_SUN3   0x20000         /* Resolution of r/w protection hw */
 
 #define TEXT_START_ADDR        PAGE_SIZE       /* Location 0 is not accessible */
+#define N_HEADER_IN_TEXT(x) 1
 
 /* Non-default definitions of the accessor macros... */
 
                         N_MACHTYPE(x) == M_68020?      SEG_SIZE_SUN3:  \
                        /* Guess? */                    PAGE_SIZE)
 
-/* Offset in a.out file of the text section.  For ZMAGIC, the text section
-   actually includes the a.out header.  */
-
-#define N_TXTOFF(x)    ( (N_MAGIC((x)) == ZMAGIC) ? 0 : EXEC_BYTES_SIZE)
-
 /* Virtual Address of text segment from the a.out file.  For OMAGIC,
    (almost always "unlinked .o's" these days), should be zero.
    Sun added a kludge so that shared libraries linked ZMAGIC get
@@ -31,4 +27,4 @@
 #define N_TXTADDR(x) \
     (N_MAGIC(x)==OMAGIC? 0 \
      : (N_MAGIC(x) == ZMAGIC && (x).a_entry < TEXT_START_ADDR)? 0 \
-     : TEXT_START_ADDR)
+     : TEXT_START_ADDR+EXEC_BYTES_SIZE)
index 97866e4a2c449e6b29c56bcaa001d615d0940bce..96a29b5d4f053bd285753b862620136741fc76f3 100755 (executable)
@@ -26,22 +26,35 @@ struct external_exec
 #endif
 
 #define _N_HDROFF(x)   (N_SEGSIZE(x) - EXEC_BYTES_SIZE)
-/* address in an a.out of the text section. When demand paged, it's
- set up a bit to make nothing at 0, when an object file it's 0.
- There's a special hack case when the entry point is < TEXT_START_ADDR
- for executables, then the real start is 0 
+
+/* If the exec header is mapped in as part of a shared text segemnt.
+   Only relevant for ZMAGIC files. */
+
+#ifndef N_HEADER_IN_TEXT
+#define N_HEADER_IN_TEXT(x) 1
+#endif
+
+/* Virtual memory address of the text section. When demand paged, it's
+   set up a bit to make nothing at 0, when an object file it's 0.
+   There's a special hack case when the entry point is < TEXT_START_ADDR
+   for executables, then the real start is 0 
+
+   Note that this differs from Sun's definition:  They consider
+   the text segment to start at 0x2000; we view it as starting at 0x2000.
+   I.e., we never consider the exec header to be part of the text segment.
 */
 
+#ifndef N_TXTADDR
 #define N_TXTADDR(x) \
-    (N_MAGIC(x)==OMAGIC? 0 \
-     : (N_MAGIC(x) == ZMAGIC && (x).a_entry < TEXT_START_ADDR)? 0 \
+    (N_MAGIC(x)!=ZMAGIC? 0 \
+     : N_HEADER_IN_TEXT(x) ? TEXT_START_ADDR+EXEC_BYTES_SIZE \
      : TEXT_START_ADDR)
+#endif
 
-/* offset in an a.out of the start of the text section. When demand
-   paged, this is the start of the file
-*/
+/* Offset in an a.out of the start of the text section. */
 
-#define N_TXTOFF(x)    ( (N_MAGIC((x)) == ZMAGIC) ? 0 : EXEC_BYTES_SIZE)
+#define N_TXTOFF(x)   ( N_MAGIC(x) != ZMAGIC ? EXEC_BYTES_SIZE \
+                      : N_HEADER_IN_TEXT(x) ? EXEC_BYTES_SIZE : PAGE_SIZE)
 #if ARCH_SIZE==64
 #define OMAGIC 0x1001          /* Code indicating object file  */
 #define ZMAGIC 0x1002          /* Code indicating demand-paged executable.  */