Mon Jul 3 13:55:18 1995 Steve Chamberlain <sac@slash.cygnus.com>
[deliverable/binutils-gdb.git] / bfd / archures.c
index 3c5993e284ee93a5f871aae677f73a1291cb9507..a249ad0b4e6796bf144bed299365ff529f8e41e6 100644 (file)
@@ -1,8 +1,7 @@
 /* BFD library support routines for architectures.
-   Copyright (C) 1990-1991 Free Software Foundation, Inc.
+   Copyright (C) 1990, 91, 92, 93, 94 Free Software Foundation, Inc.
    Hacked by John Gilmore and Steve Chamberlain of Cygnus Support.
 
-
 This file is part of BFD, the Binary File Descriptor library.
 
 This program is free software; you can redistribute it and/or modify
@@ -24,19 +23,18 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 SECTION
        Architectures
 
-       BFD's idea of an architecture is implimented in
-       <<archures.c>>. BFD keeps one atom in a BFD describing the
-       architecture of the data attached to the BFD;  a pointer to a
+       BFD keeps one atom in a BFD describing the
+       architecture of the data attached to the BFD: a pointer to a
        <<bfd_arch_info_type>>.  
 
-       Pointers to structures can be requested independently of a bfd
+       Pointers to structures can be requested independently of a BFD
        so that an architecture's information can be interrogated
-       without access to an open bfd.
+       without access to an open BFD.
 
-       The arch information is provided by each architecture package.
-       The set of default architectures is selected by the #define
+       The architecture information is provided by each architecture package.
+       The set of default architectures is selected by the macro
        <<SELECT_ARCHITECTURES>>.  This is normally set up in the
-       <<hosts/*.h>> file of your choice.  If the name is not
+       @file{config/@var{target}.mt} file of your choice.  If the name is not
        defined, then all the architectures supported are included. 
 
        When BFD starts up, all the architectures are called with an
@@ -44,6 +42,8 @@ SECTION
        insert as many items into the list of architectures as it wants to;
        generally this would be one for each machine and one for the
        default case (an item with a machine field of 0). 
+
+       BFD's idea of an architecture is implemented in @file{archures.c}.
 */
 
 /*
@@ -53,11 +53,11 @@ SUBSECTION
 
 DESCRIPTION
        This enum gives the object file's CPU architecture, in a
-       global sense --- i.e., what processor family does it belong to?
-       There is another field, which indicates what processor within
+       global sense---i.e., what processor family does it belong to?
+       Another field indicates which processor within
        the family is in use.  The machine gives a number which
-       distingushes different versions of the architecture,
-       containing for example 2 and 3 for Intel i960 KA and i960 KB,
+       distinguishes different versions of the architecture,
+       containing, for example, 2 and 3 for Intel i960 KA and i960 KB,
        and 68020 and 68030 for Motorola 68020 and 68030. 
 
 .enum bfd_architecture 
@@ -81,6 +81,9 @@ DESCRIPTION
 .#define bfd_mach_i960_mc        4
 .#define bfd_mach_i960_xa        5
 .#define bfd_mach_i960_ca        6
+. {* start-sanitize-i960xl *}
+.#define bfd_mach_i960_xl       7
+. {* end-sanitize-i960xl *}
 .
 .  bfd_arch_a29k,      {* AMD 29000 *}
 .  bfd_arch_sparc,     {* SPARC *}
@@ -95,11 +98,25 @@ DESCRIPTION
 .  bfd_arch_m88k,      {* Motorola 88xxx *}
 .  bfd_arch_pyramid,   {* Pyramid Technology *}
 .  bfd_arch_h8300,     {* Hitachi H8/300 *}
+.#define bfd_mach_h8300   1
+.#define bfd_mach_h8300h  2
+.  bfd_arch_powerpc,   {* PowerPC *}
 .  bfd_arch_rs6000,    {* IBM RS/6000 *}
 .  bfd_arch_hppa,      {* HP PA RISC *}
 .  bfd_arch_z8k,       {* Zilog Z8000 *}
 .#define bfd_mach_z8001                1
 .#define bfd_mach_z8002                2
+.  bfd_arch_h8500,     {* Hitachi H8/500 *}
+.  bfd_arch_sh,        {* Hitachi SH *}
+.  bfd_arch_alpha,     {* Dec Alpha *}
+.  bfd_arch_arm,       {* Advanced Risc Machines ARM *}
+.  bfd_arch_ns32k,     {* National Semiconductors ns32000 *}
+. {* start-sanitize-rce *}
+.  bfd_arch_rce,       {* Motorola RCE *}
+. {* end-sanitize-rce *}
+. {* start-sanitize-arc *}
+.  bfd_arch_arc,       {* Argonaut RISC Core *}
+. {* end-sanitize-arc *}
 .  bfd_arch_last
 .  };
 
@@ -161,13 +178,13 @@ SYNOPSIS
 
 DESCRIPTION
        Return a printable string representing the architecture and machine
-       from the pointer to the arch info structure 
+       from the pointer to the architecture info structure.
 
 */
 
 CONST char *
-DEFUN(bfd_printable_name, (abfd),
-      bfd *abfd) 
+bfd_printable_name (abfd)
+     bfd *abfd;
 {
   return abfd->arch_info->printable_name;
 }
@@ -179,19 +196,18 @@ FUNCTION
        bfd_scan_arch
 
 SYNOPSIS
-       bfd_arch_info_type *bfd_scan_arch(CONST char *);
+       bfd_arch_info_type *bfd_scan_arch(CONST char *string);
 
 DESCRIPTION
-       This routine is provided with a string and tries to work out
-       if bfd supports any cpu which could be described with the name
-       provided.  The routine returns a pointer to an arch_info
+       Figure out if BFD supports any cpu which could be described with
+       the name @var{string}.  Return a pointer to an <<arch_info>>
        structure if a machine is found, otherwise NULL.
 
 */
 
 bfd_arch_info_type *
-DEFUN(bfd_scan_arch,(string),
-      CONST char *string)
+bfd_scan_arch (string)
+     CONST char *string;
 {
   struct bfd_arch_info *ap;
 
@@ -218,18 +234,17 @@ SYNOPSIS
                CONST bfd *bbfd);
 
 DESCRIPTION
-       This routine is used to determine whether two BFDs'
-       architectures and achine types are compatible.  It calculates
+       Determine whether two BFDs'
+       architectures and machine types are compatible.  Calculates
        the lowest common denominator between the two architectures
        and machine types implied by the BFDs and returns a pointer to
-       an arch_info structure describing the compatible machine.
+       an <<arch_info>> structure describing the compatible machine.
 */
 
 CONST bfd_arch_info_type *
-DEFUN(bfd_arch_get_compatible,(abfd, bbfd),
-CONST    bfd *abfd AND
-CONST    bfd *bbfd)
-
+bfd_arch_get_compatible (abfd, bbfd)
+     CONST bfd *abfd;
+     CONST bfd *bbfd;
 {
   return  abfd->arch_info->compatible(abfd->arch_info,bbfd->arch_info);
 }
@@ -252,7 +267,7 @@ DESCRIPTION
 
 bfd_arch_info_type bfd_default_arch_struct =
 {
-    32,32,8,bfd_arch_unknown,0,"unknown","unknown",1,true,
+    32,32,8,bfd_arch_unknown,0,"unknown","unknown",2,true,
     bfd_default_compatible,
     bfd_default_scan, 
     0,
@@ -263,13 +278,16 @@ FUNCTION
        bfd_set_arch_info
 
 SYNOPSIS
-       void bfd_set_arch_info(bfd *, bfd_arch_info_type *);
+       void bfd_set_arch_info(bfd *abfd, bfd_arch_info_type *arg);
 
+DESCRIPTION
+       Set the architecture info of @var{abfd} to @var{arg}.
 */
 
-void DEFUN(bfd_set_arch_info,(abfd, arg),
-bfd *abfd AND
-bfd_arch_info_type *arg)
+void
+bfd_set_arch_info (abfd, arg)
+     bfd *abfd;
+     bfd_arch_info_type *arg;
 {
   abfd->arch_info = arg;
 }
@@ -284,15 +302,17 @@ SYNOPSIS
                unsigned long mach);
 
 DESCRIPTION
-       Set the architecture and machine type in a bfd. This finds the
-       correct pointer to structure and inserts it into the arch_info
+       Set the architecture and machine type in BFD @var{abfd}
+       to @var{arch} and @var{mach}.  Find the correct
+       pointer to a structure and insert it into the <<arch_info>>
        pointer. 
 */
 
-boolean DEFUN(bfd_default_set_arch_mach,(abfd, arch, mach),
-             bfd *abfd AND
-             enum bfd_architecture arch AND
-             unsigned    long mach)
+boolean
+bfd_default_set_arch_mach (abfd, arch, mach)
+     bfd *abfd;
+     enum bfd_architecture arch;
+     unsigned    long mach;
 {
   static struct bfd_arch_info *old_ptr = &bfd_default_arch_struct;
   boolean found = false;
@@ -314,7 +334,7 @@ boolean DEFUN(bfd_default_set_arch_mach,(abfd, arch, mach),
     if (found==false) {
       /*looked for it and it wasn't there, so put in the default */
       old_ptr = &bfd_default_arch_struct;
-
+      bfd_set_error (bfd_error_bad_value);
     }
   }
   else {
@@ -328,9 +348,6 @@ boolean DEFUN(bfd_default_set_arch_mach,(abfd, arch, mach),
 }
 
 
-
-
-
 /*
 FUNCTION
        bfd_get_arch
@@ -339,12 +356,14 @@ SYNOPSIS
        enum bfd_architecture bfd_get_arch(bfd *abfd);
 
 DESCRIPTION
-       Returns the enumerated type which describes the supplied bfd's
-       architecture
+       Return the enumerated type which describes the BFD @var{abfd}'s
+       architecture.
 
 */
 
-enum bfd_architecture DEFUN(bfd_get_arch, (abfd), bfd *abfd)
+enum bfd_architecture
+bfd_get_arch (abfd)
+     bfd *abfd;
 {
     return abfd->arch_info->arch;
 }
@@ -357,12 +376,13 @@ SYNOPSIS
        unsigned long bfd_get_mach(bfd *abfd);
 
 DESCRIPTION
-       Returns the long type which describes the supplied bfd's
-       machine
+       Return the long type which describes the BFD @var{abfd}'s
+       machine.
 */
 
 unsigned long  
-DEFUN(bfd_get_mach, (abfd), bfd *abfd)
+bfd_get_mach (abfd)
+     bfd *abfd;
 {
     return abfd->arch_info->mach;
 }
@@ -375,14 +395,17 @@ SYNOPSIS
        unsigned int bfd_arch_bits_per_byte(bfd *abfd);
 
 DESCRIPTION
-       Returns the number of bits in one of the architectures bytes
+       Return the number of bits in one of the BFD @var{abfd}'s
+       architecture's bytes.
 
 */
 
-unsigned int DEFUN(bfd_arch_bits_per_byte, (abfd), bfd *abfd)
-  {
-    return abfd->arch_info->bits_per_byte;
-  }
+unsigned int
+bfd_arch_bits_per_byte (abfd)
+     bfd *abfd;
+{
+  return abfd->arch_info->bits_per_byte;
+}
 
 /*
 FUNCTION
@@ -392,49 +415,74 @@ SYNOPSIS
        unsigned int bfd_arch_bits_per_address(bfd *abfd);
 
 DESCRIPTION
-       Returns the number of bits in one of the architectures addresses
+       Return the number of bits in one of the BFD @var{abfd}'s
+       architecture's addresses.
 */
 
-unsigned int DEFUN(bfd_arch_bits_per_address, (abfd), bfd *abfd)
-  {
-    return abfd->arch_info->bits_per_address;
-  }
-
+unsigned int
+bfd_arch_bits_per_address (abfd)
+     bfd *abfd;
+{
+  return abfd->arch_info->bits_per_address;
+}
 
 
+extern void bfd_a29k_arch PARAMS ((void));
+extern void bfd_alpha_arch PARAMS ((void));
+/* start-sanitize-arc */
+extern void bfd_arc_arch PARAMS ((void));
+/* end-sanitize-arc */
+extern void bfd_arm_arch PARAMS ((void));
 extern void bfd_h8300_arch PARAMS ((void));
+extern void bfd_h8500_arch PARAMS ((void));
+extern void bfd_hppa_arch PARAMS ((void));
+extern void bfd_i386_arch PARAMS ((void));
 extern void bfd_i960_arch PARAMS ((void));
-extern void bfd_empty_arch PARAMS ((void));
-extern void bfd_sparc_arch PARAMS ((void));
-extern void bfd_m88k_arch PARAMS ((void));
 extern void bfd_m68k_arch PARAMS ((void));
-extern void bfd_vax_arch PARAMS ((void));
-extern void bfd_a29k_arch PARAMS ((void));
+extern void bfd_m88k_arch PARAMS ((void));
 extern void bfd_mips_arch PARAMS ((void));
-extern void bfd_i386_arch PARAMS ((void));
+extern void bfd_powerpc_arch PARAMS ((void));
 extern void bfd_rs6000_arch PARAMS ((void));
-extern void bfd_hppa_arch PARAMS ((void));
-extern void bfd_z8k_arch PARAMS ((void));
+extern void bfd_sh_arch PARAMS ((void));
+/* start-sanitize-rce */
+extern void bfd_rce_arch PARAMS ((void));
+/* end-sanitize-rce */
+extern void bfd_sparc_arch PARAMS ((void));
+extern void bfd_vax_arch PARAMS ((void));
 extern void bfd_we32k_arch PARAMS ((void));
+extern void bfd_z8k_arch PARAMS ((void));
+extern void bfd_ns32k_arch PARAMS ((void));
 
-static void (*archures_init_table[]) PARAMS ((void)) = 
+static void (*const archures_init_table[]) PARAMS ((void)) = 
 {
 #ifdef SELECT_ARCHITECTURES
   SELECT_ARCHITECTURES,
 #else
-  bfd_sparc_arch,
   bfd_a29k_arch,
-  bfd_mips_arch,
+  bfd_alpha_arch,
+/* start-sanitize-arc */
+  bfd_arc_arch,
+/* end-sanitize-arc */
+  bfd_arm_arch,
   bfd_h8300_arch,
+  bfd_h8500_arch,
+  bfd_hppa_arch,
   bfd_i386_arch,
-  bfd_m88k_arch,
   bfd_i960_arch,
   bfd_m68k_arch,
-  bfd_vax_arch,
+  bfd_m88k_arch,
+  bfd_mips_arch,
+  bfd_powerpc_arch,
   bfd_rs6000_arch,
-  bfd_hppa_arch,
-  bfd_z8k_arch,
+  bfd_sh_arch,
+/* start-sanitize-rce */
+  bfd_rce_arch,
+/* end-sanitize-rce */
+  bfd_sparc_arch,
+  bfd_vax_arch,
   bfd_we32k_arch,
+  bfd_z8k_arch,
+  bfd_ns32k_arch,
 #endif
   0
   };
@@ -446,24 +494,20 @@ INTERNAL_FUNCTION
        bfd_arch_init
 
 SYNOPSIS
-       void  bfd_arch_init(void);
+       void bfd_arch_init(void);
 
 DESCRIPTION
-       This routine initializes the architecture dispatch table by
+       Initialize the architecture dispatch table by
        calling all installed architecture packages and getting them
        to poke around.
 */
 
 void
-DEFUN_VOID(bfd_arch_init)
+bfd_arch_init ()
 {
-    void (**ptable) PARAMS ((void));
-    for (ptable = archures_init_table; 
-        *ptable ;
-        ptable++)
-    {
-       (*ptable)();
-    }
+    void (*const *ptable) PARAMS ((void));
+    for (ptable = archures_init_table; *ptable ; ptable++)
+      (*ptable)();
 }
 
 
@@ -472,14 +516,15 @@ INTERNAL_FUNCTION
        bfd_arch_linkin
 
 SYNOPSIS
-       void bfd_arch_linkin(bfd_arch_info_type *);
+       void bfd_arch_linkin(bfd_arch_info_type *ptr);
 
 DESCRIPTION
-       Link the provided arch info structure into the list
+       Link the architecture info structure @var{ptr} into the list.
 */
 
-void DEFUN(bfd_arch_linkin,(ptr),
-          bfd_arch_info_type *ptr)
+void
+bfd_arch_linkin (ptr)
+     bfd_arch_info_type *ptr;
 {
   ptr->next = bfd_arch_info_list;
   bfd_arch_info_list = ptr;
@@ -500,9 +545,9 @@ DESCRIPTION
 */
 
 CONST bfd_arch_info_type *
-DEFUN(bfd_default_compatible,(a,b),
-      CONST bfd_arch_info_type *a AND
-      CONST bfd_arch_info_type *b)
+bfd_default_compatible (a,b)
+     CONST bfd_arch_info_type *a;
+     CONST bfd_arch_info_type *b;
 {
   if(a->arch != b->arch) return NULL;
 
@@ -521,7 +566,7 @@ INTERNAL_FUNCTION
        bfd_default_scan
 
 SYNOPSIS
-       boolean bfd_default_scan(CONST struct bfd_arch_info *, CONST char *);
+       boolean bfd_default_scan(CONST struct bfd_arch_info *info, CONST char *string);
 
 DESCRIPTION
        The default function for working out whether this is an
@@ -529,9 +574,9 @@ DESCRIPTION
 */
 
 boolean 
-DEFUN(bfd_default_scan,(info, string),
-CONST struct bfd_arch_info *info AND
-CONST char *string)
+bfd_default_scan (info, string)
+     CONST struct bfd_arch_info *info;
+     CONST char *string;
 {
     CONST  char *ptr_src;
     CONST   char *ptr_tst;
@@ -570,6 +615,14 @@ CONST char *string)
 
     switch (number) 
     {
+     case 300:
+      arch = bfd_arch_h8300;
+      break;
+
+     case 500:
+      arch = bfd_arch_h8500;
+      break;
+
       case 68010:
       case 68020:
       case 68030:
@@ -630,21 +683,20 @@ CONST char *string)
 }
 
 
-
-
 /*
 FUNCTION
        bfd_get_arch_info
 
-
 SYNOPSIS
-       bfd_arch_info_type * bfd_get_arch_info(bfd *);
+       bfd_arch_info_type * bfd_get_arch_info(bfd *abfd);
 
+DESCRIPTION
+       Return the architecture info struct in @var{abfd}.
 */
 
 bfd_arch_info_type *
-DEFUN(bfd_get_arch_info,(abfd),
-bfd *abfd)
+bfd_get_arch_info (abfd)
+     bfd *abfd;
 {
   return  abfd->arch_info;
 }
@@ -661,16 +713,16 @@ SYNOPSIS
                long machine);
 
 DESCRIPTION
-       Look for the architecure info struct which matches the
-       arguments given. A machine of 0 will match the
+       Look for the architecure info structure which matches the
+       arguments @var{arch} and @var{machine}. A machine of 0 matches the
        machine/architecture structure which marks itself as the
        default.
 */
 
 bfd_arch_info_type * 
-DEFUN(bfd_lookup_arch,(arch, machine),
-enum bfd_architecture arch AND
-long machine)
+bfd_lookup_arch (arch, machine)
+     enum bfd_architecture arch;
+     long machine;
 {
     bfd_arch_info_type *ap;
     bfd_check_init();  
@@ -687,26 +739,25 @@ long machine)
 }
 
 
-
 /*
 FUNCTION
        bfd_printable_arch_mach
 
 SYNOPSIS
-       CONST char * bfd_printable_arch_mach
+       CONST char *bfd_printable_arch_mach
                (enum bfd_architecture arch, unsigned long machine);
 
 DESCRIPTION
        Return a printable string representing the architecture and
        machine type. 
 
-       NB. The use of this routine is depreciated.
+       This routine is depreciated.
 */
 
 CONST char *
-DEFUN(bfd_printable_arch_mach,(arch, machine),
-      enum bfd_architecture arch AND
-      unsigned long machine)
+bfd_printable_arch_mach (arch, machine)
+     enum bfd_architecture arch;
+     unsigned long machine;
 {
     bfd_arch_info_type *ap = bfd_lookup_arch(arch, machine);
     if(ap) return ap->printable_name;
This page took 0.030093 seconds and 4 git commands to generate.