Update for Sony News port and split of a.out into several variants.
authorJohn Gilmore <gnu@cygnus>
Fri, 10 May 1991 23:41:14 +0000 (23:41 +0000)
committerJohn Gilmore <gnu@cygnus>
Fri, 10 May 1991 23:41:14 +0000 (23:41 +0000)
Add write_contents to format-dependent vector.

gas/a.out.gnu.h
include/a.out.sun4.h
include/bfd.h

index 74504b298a5ae45b9e10af16abb376f738cc8c1b..4ae86afd4e262145d7c9c2a0612a1aa68e28bbef 100755 (executable)
@@ -82,41 +82,55 @@ enum machine_type {
 /* Code indicating demand-paged executable.  */
 #define ZMAGIC 0413
 
-/* Address of text segment in memory after it is loaded.  */
-/* Don't load things at zero, it encourages zero-pointer bugs */
-#ifndef TEXT_START_ADDR
-#define        TEXT_START_ADDR 0x10000
-#endif
-
 /* 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
-   an address of zero if a_entry (!!!) is lower than the otherwise
-   expected text address.  These kludges have gotta go!
    For linked files, should reflect reality if we know it.  */
 
 #ifndef N_TXTADDR
-#define N_TXTADDR(x) \
-    (N_MAGIC(x)==OMAGIC? 0 \
-     : (N_MAGIC(x) == ZMAGIC && (x).a_entry < TEXT_START_ADDR)? 0 \
-     : TEXT_START_ADDR)
+#define N_TXTADDR(x)   (N_MAGIC(x)==OMAGIC? 0 : TEXT_START_ADDR)
+#endif
+
+#ifndef N_BADMAG
+#define N_BADMAG(x)      (N_MAGIC(x) != OMAGIC         \
+                       && N_MAGIC(x) != NMAGIC         \
+                       && N_MAGIC(x) != ZMAGIC)
+#endif
+
+/* This complexity is for encapsulated COFF support */
+#ifndef _N_HDROFF
+#define _N_HDROFF(x)   (SEGMENT_SIZE - sizeof (struct exec))
+#endif
+
+#ifndef N_TXTOFF
+#define N_TXTOFF(x)    (N_MAGIC(x) == ZMAGIC ? \
+                               _N_HDROFF((x)) + sizeof (struct exec) : \
+                               sizeof (struct exec))
+#endif
+
+
+#ifndef N_DATOFF
+#define N_DATOFF(x)    ( N_TXTOFF(x) + (x).a_text )
+#endif
+
+#ifndef N_TRELOFF
+#define N_TRELOFF(x)   ( N_DATOFF(x) + (x).a_data )
+#endif
+
+#ifndef N_DRELOFF
+#define N_DRELOFF(x)   ( N_TRELOFF(x) + (x).a_trsize )
 #endif
 
-/* Address of data segment in memory after it is loaded.
-   Note that it is up to you to define SEGMENT_SIZE
-   on machines not listed here.  */
-#if defined(hp300) || defined(pyr)
-#define SEGMENT_SIZE page_size
+#ifndef N_SYMOFF
+#define N_SYMOFF(x)    ( N_DRELOFF(x) + (x).a_drsize )
 #endif
-#ifdef sony
-#define        SEGMENT_SIZE    0x2000
-#endif /* Sony.  */
-#ifdef is68k
-#define SEGMENT_SIZE 0x20000
+
+#ifndef N_STROFF
+#define N_STROFF(x)    ( N_SYMOFF(x) + (x).a_syms )
 #endif
-#if defined(m68k) && defined(PORTAR)
-#define PAGE_SIZE 0x400
-#define SEGMENT_SIZE PAGE_SIZE
+
+/* Address of text segment in memory after it is loaded.  */
+#ifndef N_TXTADDR
+#define        N_TXTADDR(x)    0
 #endif
 
 #ifndef N_DATADDR
index 0c89c2af4267e72c0ff7bfa42a81f106ef1baef5..3ba363d55e416cf4ee1d05dcf4576c775d3e9c00 100755 (executable)
@@ -1,19 +1,25 @@
 /* SPARC-specific values for a.out files */
 
-#define PAGE_SIZE 0x02000              /* 8K.  aka NBPG in <sys/param.h> */
+#define PAGE_SIZE      0x2000          /* 8K.  aka NBPG in <sys/param.h> */
 /* Note that some SPARCs have 4K pages, some 8K, some others.  */
-#define SEGMENT_SIZE PAGE_SIZE
-#define TEXT_START_ADDR PAGE_SIZE      /* Location 0 is not accessible */
+#define SEGMENT_SIZE   PAGE_SIZE
+#define TEXT_START_ADDR        PAGE_SIZE       /* Location 0 is not accessible */
 
-#define N_BADMAG(x)                                    \
- (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC         \
-  && N_MAGIC(x) != ZMAGIC)
+/* Non-default definitions of the accessor macros... */
 
+/* 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 : sizeof(struct exec) )
-#define N_DATOFF(x)    ( N_TXTOFF(x) + (x).a_text )
-#define N_TRELOFF(x)   ( N_DATOFF(x) + (x).a_data )
-#define N_DRELOFF(x)   ( N_TRELOFF(x) + (x).a_trsize )
-#define N_SYMOFF(x)    ( N_DRELOFF(x) + (x).a_drsize )
-#define N_STROFF(x)    ( N_SYMOFF(x) + (x).a_syms )
 
+/* 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
+   an address of zero if a_entry (!!!) is lower than the otherwise
+   expected text address.  These kludges have gotta go!
+   For linked files, should reflect reality if we know it.  */
+
+#define N_TXTADDR(x) \
+    (N_MAGIC(x)==OMAGIC? 0 \
+     : (N_MAGIC(x) == ZMAGIC && (x).a_entry < TEXT_START_ADDR)? 0 \
+     : TEXT_START_ADDR)
index c157bc271a7d77e8eeec1f8a3fbfe63ae5c32025..b398c4488d45e861be813cdc5cb9aabd138a0db1 100644 (file)
@@ -416,6 +416,11 @@ typedef enum
 #define BFD_SEND_FMT(bfd, message, arglist) \
                  (((bfd)->xvec->message[(int)((bfd)->format)]) arglist)
 
+/*  This is the struct which defines the type of BFD this is.  The
+    "xvec" member of the struct bfd itself points here.  Each module
+    that implements access to a different target under BFD, defines
+    one of these.  */
+
 /* FIXME, these names should be rationalised with the names of the entry points
    which call them.  Too bad we can't have one macro to define them both! */
 typedef struct bfd_target
@@ -458,7 +463,8 @@ typedef struct bfd_target
 
   /* Format-dependent */
   SDEF_FMT (struct bfd_target *, _bfd_check_format, (bfd *));/* file fmt or 0 */
-  SDEF_FMT (boolean, _bfd_set_format, (bfd *)); /* make it an object file. */
+  SDEF_FMT (boolean, _bfd_set_format, (bfd *)); /* make it an object file */
+  SDEF_FMT (boolean, _bfd_write_contents, (bfd *)); /* write it out at close */
 
   /* All these are defined in JUMP_TABLE */
   /* Core files */