Sanitize support for the ESA sparc simulator.
[deliverable/binutils-gdb.git] / gas / config / obj-bout.h
index 93a39c447bcee46297052a4f1b1485dac62148ed..dddb19f9fe0a2a2d5ba38556fc378bc72da64e9f 100644 (file)
@@ -1,21 +1,22 @@
 /* b.out object file format
-   Copyright (C) 1989, 1990, 1991 Free Software Foundation, Inc.
-   
+   Copyright (C) 1989, 90, 91, 92, 93, 94, 95, 1996
+   Free Software Foundation, Inc.
+
    This file is part of GAS, the GNU Assembler.
-   
+
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as
    published by the Free Software Foundation; either version 2,
    or (at your option) any later version.
-   
+
    GAS is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
    the GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public
    License along with GAS; see the file COPYING.  If not, write
-   to the Free Software Foundation, 675 Mass Ave, Cambridge, MA
+   to the Free Software Foundation, 59 Temple Place - Suite 330, Cambridge, MA
    02139, USA. */
 
 /*
@@ -45,6 +46,9 @@
  *       are in host byte-order:  object files CANNOT be lifted from a
  *       little-end host and used on a big-endian (or vice versa) without
  *       modification.
+ * ==> THIS IS NO LONGER TRUE USING BFD.  WE CAN GENERATE ANY BYTE ORDER
+ *     FOR THE HEADER, AND READ ANY BYTE ORDER.  PREFERENCE WOULD BE TO
+ *     USE LITTLE-ENDIAN BYTE ORDER THROUGHOUT, REGARDLESS OF HOST.  <==
  *
  *     o The downloader ('comm960') takes care to generate a pseudo-header
  *       with correct (i80960) byte-ordering before shipping text and data
 
 #define OBJ_BOUT 1
 
-#include "targ-cpu.h"
-
-/* bout uses host byte order for headers */
-#ifdef CROSS_COMPILE
-#undef CROSS_COMPILE
-#endif /* CROSS_COMPILE */
+#define OUTPUT_FLAVOR bfd_target_aout_flavour
 
-/* We want \v. */
-#define BACKSLASH_V 1
+#include "targ-cpu.h"
 
 #define OBJ_DEFAULT_OUTPUT_FILE_NAME   "b.out"
 
 extern const short seg_N_TYPE[];
-extern const segT  N_TYPE_seg[];
+extern const segT N_TYPE_seg[];
 
 #define BMAGIC 0415
 /* We don't accept the following (see N_BADMAG macro).
@@ -88,25 +86,26 @@ extern const segT  N_TYPE_seg[];
  *             'n' indicates the corresponding segment must begin at an
  *             address that is a multiple of (2**n).
  */
-struct exec {
-       /* Standard stuff */
-       unsigned long a_magic;  /* Identifies this as a b.out file      */
-       unsigned long a_text;   /* Length of text                       */
-       unsigned long a_data;   /* Length of data                       */
-       unsigned long a_bss;    /* Length of runtime uninitialized data area */
-       unsigned long a_syms;   /* Length of symbol table               */
-       unsigned long a_entry;  /* Runtime start address                */
-       unsigned long a_trsize; /* Length of text relocation info       */
-       unsigned long a_drsize; /* Length of data relocation info       */
-       
-       /* Added for i960 */
-       unsigned long a_tload;  /* Text runtime load address            */
-       unsigned long a_dload;  /* Data runtime load address            */
-       unsigned char a_talign; /* Alignment of text segment            */
-       unsigned char a_dalign; /* Alignment of data segment            */
-       unsigned char a_balign; /* Alignment of bss segment             */
-       unsigned char unused;   /* (Just to make struct size a multiple of 4) */
-};
+struct exec
+  {
+    /* Standard stuff */
+    unsigned long a_magic;     /* Identifies this as a b.out file      */
+    unsigned long a_text;      /* Length of text                       */
+    unsigned long a_data;      /* Length of data                       */
+    unsigned long a_bss;       /* Length of runtime uninitialized data area */
+    unsigned long a_syms;      /* Length of symbol table               */
+    unsigned long a_entry;     /* Runtime start address                */
+    unsigned long a_trsize;    /* Length of text relocation info       */
+    unsigned long a_drsize;    /* Length of data relocation info       */
+
+    /* Added for i960 */
+    unsigned long a_tload;     /* Text runtime load address            */
+    unsigned long a_dload;     /* Data runtime load address            */
+    unsigned char a_talign;    /* Alignment of text segment            */
+    unsigned char a_dalign;    /* Alignment of data segment            */
+    unsigned char a_balign;    /* Alignment of bss segment             */
+    unsigned char a_relaxable; /* Contains enough info to relax     */
+  };
 
 #define N_BADMAG(x)    (((x).a_magic)!=BMAGIC)
 #define N_TXTOFF(x)    ( sizeof(struct exec) )
@@ -118,53 +117,57 @@ struct exec {
 
 /* A single entry in the symbol table
  */
-struct nlist {
-       union {
-               char    *n_name;
-               struct nlist *n_next;
-               long    n_strx;         /* Index into string table      */
-       } n_un;
-       unsigned char n_type;   /* See below                            */
-       char    n_other;        /* Used in i80960 support -- see below  */
-       short   n_desc;
-       unsigned long n_value;
-};
+struct nlist
+  {
+    union
+      {
+       char *n_name;
+       struct nlist *n_next;
+       long n_strx;            /* Index into string table      */
+      }
+    n_un;
+    unsigned char n_type;      /* See below                            */
+    char n_other;              /* Used in i80960 support -- see below  */
+    short n_desc;
+    unsigned long n_value;
+  };
 
 typedef struct nlist obj_symbol_type;
 
 /* Legal values of n_type
  */
-#define N_UNDF 0       /* Undefined symbol     */
-#define N_ABS  2       /* Absolute symbol      */
-#define N_TEXT 4       /* Text symbol          */
-#define N_DATA 6       /* Data symbol          */
-#define N_BSS  8       /* BSS symbol           */
-#define N_FN   31      /* Filename symbol      */
+#define N_UNDF 0               /* Undefined symbol     */
+#define N_ABS  2               /* Absolute symbol      */
+#define N_TEXT 4               /* Text symbol          */
+#define N_DATA 6               /* Data symbol          */
+#define N_BSS  8               /* BSS symbol           */
+#define N_FN   31              /* Filename symbol      */
 
-#define N_EXT  1       /* External symbol (OR'd in with one of above)  */
-#define N_TYPE 036     /* Mask for all the type bits                   */
-#define N_STAB 0340    /* Mask for all bits used for SDB entries       */
+#define N_EXT  1               /* External symbol (OR'd in with one of above)  */
+#define N_TYPE 036             /* Mask for all the type bits                   */
+#define N_STAB 0340            /* Mask for all bits used for SDB entries       */
 
 #ifndef CUSTOM_RELOC_FORMAT
-struct relocation_info {
-       int      r_address;     /* File address of item to be relocated */
-       unsigned
-    r_index:24,/* Index of symbol on which relocation is based*/
-    r_pcrel:1, /* 1 => relocate PC-relative; else absolute
+struct relocation_info
+  {
+    int r_address;             /* File address of item to be relocated */
+    unsigned
+      r_index:24,              /* Index of symbol on which relocation is based*/
+      r_pcrel:1,               /* 1 => relocate PC-relative; else absolute
                 *      On i960, pc-relative implies 24-bit
                 *      address, absolute implies 32-bit.
                 */
-    r_length:2,        /* Number of bytes to relocate:
+      r_length:2,              /* Number of bytes to relocate:
                 *      0 => 1 byte
                 *      1 => 2 bytes
                 *      2 => 4 bytes -- only value used for i960
                 */
-    r_extern:1,
-    r_bsr:1,   /* Something for the GNU NS32K assembler */
-    r_disp:1,  /* Something for the GNU NS32K assembler */
-    r_callj:1, /* 1 if relocation target is an i960 'callj' */
-    nuthin:1;  /* Unused                               */
-};
+      r_extern:1, r_bsr:1,     /* Something for the GNU NS32K assembler */
+      r_disp:1,                        /* Something for the GNU NS32K assembler */
+      r_callj:1,               /* 1 if relocation target is an i960 'callj' */
+      nuthin:1;                        /* Unused                               */
+  };
+
 #endif /* CUSTOM_RELOC_FORMAT */
 
 /*
@@ -179,25 +182,27 @@ struct relocation_info {
 
 /* True if symbol has been defined, ie is in N_{TEXT,DATA,BSS,ABS} or N_EXT */
 #define S_IS_DEFINED(s)                ((S_GET_TYPE(s) != N_UNDF) || (S_GET_DESC(s) != 0))
+
+#define S_IS_COMMON(s) \
+  (S_GET_TYPE (s) == N_UNDF && S_GET_VALUE (s) != 0)
+
 #define S_IS_REGISTER(s)       ((s)->sy_symbol.n_type == N_REGISTER)
 
 /* True if a debug special symbol entry */
 #define S_IS_DEBUG(s)          ((s)->sy_symbol.n_type & N_STAB)
 /* True if a symbol is local symbol name */
-/* A symbol name whose name begin with ^A is a gas internal pseudo symbol
-   nameless symbols come from .stab directives. */
-#define S_IS_LOCAL(s)          (S_GET_NAME(s) && \
-                                !S_IS_DEBUG(s) && \
-                                (S_GET_NAME(s)[0] == '\001' || \
-                                 (S_LOCAL_NAME(s) && !flagseen['L'])))
+#define S_IS_LOCAL(s)                                  \
+  (S_GET_NAME (s)                                      \
+   && !S_IS_DEBUG (s)                                  \
+   && (strchr (S_GET_NAME (s), '\001') != NULL         \
+       || strchr (S_GET_NAME (s), '\002') != NULL      \
+       || (S_LOCAL_NAME(s) && !flag_keep_locals)))
 /* True if a symbol is not defined in this file */
 #define S_IS_EXTERN(s)         ((s)->sy_symbol.n_type & N_EXT)
 /* True if the symbol has been generated because of a .stabd directive */
 #define S_IS_STABD(s)          (S_GET_NAME(s) == NULL)
 
 /* Accessors */
-/* The value of the symbol */
-#define S_GET_VALUE(s)         ((unsigned long) ((s)->sy_symbol.n_value))
 /* The name of the symbol */
 #define S_GET_NAME(s)          ((s)->sy_symbol.n_un.n_name)
 /* The pointer to the string table */
@@ -212,8 +217,6 @@ struct relocation_info {
 #define S_GET_DESC(s)          ((s)->sy_symbol.n_desc)
 
 /* Modifiers */
-/* Set the value of the symbol */
-#define S_SET_VALUE(s,v)       ((s)->sy_symbol.n_value = (unsigned long) (v))
 /* Assume that a symbol cannot be simultaneously in more than on segment */
 /* set segment */
 #define S_SET_SEGMENT(s,seg)   ((s)->sy_symbol.n_type &= ~N_TYPE,(s)->sy_symbol.n_type|=SEGMENT_TO_SYMBOL_TYPE(seg))
@@ -229,6 +232,8 @@ struct relocation_info {
 #define S_SET_OTHER(s,v)       ((s)->sy_symbol.n_other = (v))
 /* Set the n_desc expression value */
 #define S_SET_DESC(s,v)                ((s)->sy_symbol.n_desc = (v))
+/* Set the n_type value */
+#define S_SET_TYPE(s,v)                ((s)->sy_symbol.n_type = (v))
 
 /* File header macro and type definition */
 
@@ -281,34 +286,28 @@ struct relocation_info {
 #define H_SET_VERSION(h,v)             ((h)->header.a_version = (v))
 #endif /* EXEC_VERSION */
 
-/* 
- * Current means for getting the name of a segment.
- * This will change for infinite-segments support (e.g. COFF).
- */
-#define        segment_name(seg)  ( seg_name[(int)(seg)] )
-extern char *const seg_name[];
+typedef struct
+  {
+    struct exec header;                /* a.out header */
+    long string_table_size;    /* names + '\0' + sizeof(int) */
+  }
 
-typedef struct {
-       struct exec     header;                 /* a.out header */
-       long    string_table_size;      /* names + '\0' + sizeof(int) */
-} object_headers;
+object_headers;
 
 /* unused hooks. */
 #define OBJ_EMIT_LINENO(a, b, c)       {;}
 #define obj_pre_write_hook(a)          {;}
 
-#ifdef __STDC__
+#if __STDC__
 struct fix;
-void tc_aout_fix_to_chars(char *where, struct fix *fixP, relax_addressT segment_address);
-#else
-void tc_aout_fix_to_chars();
-#endif /* __STDC__ */
-
-/*
- * Local Variables:
- * comment-column: 0
- * fill-column: 131
- * End:
- */
+#endif
+extern void tc_aout_fix_to_chars PARAMS ((char *where,
+                                         struct fix *fixP,
+                                         relax_addressT segment_address));
+extern void tc_bout_fix_to_chars PARAMS ((char *where,
+                                         struct fix *fixP,
+                                         relax_addressT segment_address));
+
+#define AOUT_STABS
 
 /* end of obj-bout.h */
This page took 0.041812 seconds and 4 git commands to generate.