* dw2gencfi.c, dw2gencfi.h: New files.
[binutils-gdb.git] / bfd / coff-h8300.c
index c83015e4efbe2f715994962d637b451bd97828c9..ac0915335537bf88adf7c4e4b1474e3ada090a1c 100644 (file)
@@ -1,6 +1,6 @@
-/* BFD back-end for Hitachi H8/300 COFF binaries.
+/* BFD back-end for Renesas H8/300 COFF binaries.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002
+   2000, 2001, 2002, 2003
    Free Software Foundation, Inc.
    Written by Steve Chamberlain, <sac@cygnus.com>.
 
@@ -28,6 +28,7 @@
 #include "coff/h8300.h"
 #include "coff/internal.h"
 #include "libcoff.h"
+#include "libiberty.h"
 
 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (1)
 
@@ -62,21 +63,31 @@ static struct bfd_hash_entry *
 funcvec_hash_newfunc
   PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
 
-static boolean
+static bfd_boolean
 funcvec_hash_table_init
   PARAMS ((struct funcvec_hash_table *, bfd *,
-           struct bfd_hash_entry *(*) PARAMS ((struct bfd_hash_entry *,
-                                               struct bfd_hash_table *,
-                                               const char *))));
-
-static bfd_reloc_status_type special PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static int select_reloc PARAMS ((reloc_howto_type *));
-static void rtype2howto PARAMS ((arelent *, struct internal_reloc *));
-static void reloc_processing PARAMS ((arelent *, struct internal_reloc *, asymbol **, bfd *, asection *));
-static boolean h8300_symbol_address_p PARAMS ((bfd *, asection *, bfd_vma));
-static int h8300_reloc16_estimate PARAMS ((bfd *, asection *, arelent *, unsigned int, struct bfd_link_info *));
-static void h8300_reloc16_extra_cases PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *, bfd_byte *, unsigned int *, unsigned int *));
-static boolean h8300_bfd_link_add_symbols PARAMS ((bfd *, struct bfd_link_info *));
+          struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
+                                      struct bfd_hash_table *,
+                                      const char *)));
+
+static bfd_reloc_status_type special
+  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
+static int select_reloc
+  PARAMS ((reloc_howto_type *));
+static void rtype2howto
+  PARAMS ((arelent *, struct internal_reloc *));
+static void reloc_processing
+  PARAMS ((arelent *, struct internal_reloc *, asymbol **, bfd *, asection *));
+static bfd_boolean h8300_symbol_address_p
+  PARAMS ((bfd *, asection *, bfd_vma));
+static int h8300_reloc16_estimate
+  PARAMS ((bfd *, asection *, arelent *, unsigned int,
+    struct bfd_link_info *));
+static void h8300_reloc16_extra_cases
+  PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
+    bfd_byte *, unsigned int *, unsigned int *));
+static bfd_boolean h8300_bfd_link_add_symbols
+  PARAMS ((bfd *, struct bfd_link_info *));
 
 /* To lookup a value in the function vector hash table.  */
 #define funcvec_hash_lookup(table, string, create, copy) \
@@ -127,8 +138,8 @@ funcvec_hash_newfunc (entry, gen_table, string)
      subclass.  */
   if (ret == NULL)
     ret = ((struct funcvec_hash_entry *)
-           bfd_hash_allocate (gen_table,
-                              sizeof (struct funcvec_hash_entry)));
+          bfd_hash_allocate (gen_table,
+                             sizeof (struct funcvec_hash_entry)));
   if (ret == NULL)
     return NULL;
 
@@ -159,13 +170,13 @@ funcvec_hash_newfunc (entry, gen_table, string)
 
 /* Initialize the function vector hash table.  */
 
-static boolean
+static bfd_boolean
 funcvec_hash_table_init (table, abfd, newfunc)
      struct funcvec_hash_table *table;
      bfd *abfd;
-     struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
-                                               struct bfd_hash_table *,
-                                               const char *));
+     struct bfd_hash_entry *(*newfunc)
+       PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *,
+               const char *));
 {
   /* Initialize our local fields, then call the generic initialization
      routine.  */
@@ -175,7 +186,7 @@ funcvec_hash_table_init (table, abfd, newfunc)
 }
 
 /* Create the derived linker hash table.  We use a derived hash table
-   basically to hold "static" information during an h8/300 coff link
+   basically to hold "static" information during an H8/300 coff link
    without using static variables.  */
 
 static struct bfd_link_hash_table *
@@ -199,7 +210,7 @@ h8300_coff_link_hash_table_create (abfd)
   ret->vectors_sec = NULL;
   ret->funcvec_hash_table = NULL;
 
-  /* OK.  Everything's intialized, return the base pointer.  */
+  /* OK.  Everything's initialized, return the base pointer.  */
   return &ret->root.root;
 }
 
@@ -232,37 +243,37 @@ special (abfd, reloc_entry, symbol, data, input_section, output_bfd,
 }
 
 static reloc_howto_type howto_table[] = {
-  HOWTO (R_RELBYTE, 0, 0, 8, false, 0, complain_overflow_bitfield, special, "8", false, 0x000000ff, 0x000000ff, false),
-  HOWTO (R_RELWORD, 0, 1, 16, false, 0, complain_overflow_bitfield, special, "16", false, 0x0000ffff, 0x0000ffff, false),
-  HOWTO (R_RELLONG, 0, 2, 32, false, 0, complain_overflow_bitfield, special, "32", false, 0xffffffff, 0xffffffff, false),
-  HOWTO (R_PCRBYTE, 0, 0, 8, true, 0, complain_overflow_signed, special, "DISP8", false, 0x000000ff, 0x000000ff, true),
-  HOWTO (R_PCRWORD, 0, 1, 16, true, 0, complain_overflow_signed, special, "DISP16", false, 0x0000ffff, 0x0000ffff, true),
-  HOWTO (R_PCRLONG, 0, 2, 32, true, 0, complain_overflow_signed, special, "DISP32", false, 0xffffffff, 0xffffffff, true),
-  HOWTO (R_MOV16B1, 0, 1, 16, false, 0, complain_overflow_bitfield, special, "relaxable mov.b:16", false, 0x0000ffff, 0x0000ffff, false),
-  HOWTO (R_MOV16B2, 0, 1, 8, false, 0, complain_overflow_bitfield, special, "relaxed mov.b:16", false, 0x000000ff, 0x000000ff, false),
-  HOWTO (R_JMP1, 0, 1, 16, false, 0, complain_overflow_bitfield, special, "16/pcrel", false, 0x0000ffff, 0x0000ffff, false),
-  HOWTO (R_JMP2, 0, 0, 8, false, 0, complain_overflow_bitfield, special, "pcrecl/16", false, 0x000000ff, 0x000000ff, false),
-  HOWTO (R_JMPL1, 0, 2, 32, false, 0, complain_overflow_bitfield, special, "24/pcrell", false, 0x00ffffff, 0x00ffffff, false),
-  HOWTO (R_JMPL2, 0, 0, 8, false, 0, complain_overflow_bitfield, special, "pc8/24", false, 0x000000ff, 0x000000ff, false),
-  HOWTO (R_MOV24B1, 0, 1, 32, false, 0, complain_overflow_bitfield, special, "relaxable mov.b:24", false, 0xffffffff, 0xffffffff, false),
-  HOWTO (R_MOV24B2, 0, 1, 8, false, 0, complain_overflow_bitfield, special, "relaxed mov.b:24", false, 0x0000ffff, 0x0000ffff, false),
+  HOWTO (R_RELBYTE, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, special, "8", FALSE, 0x000000ff, 0x000000ff, FALSE),
+  HOWTO (R_RELWORD, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, special, "16", FALSE, 0x0000ffff, 0x0000ffff, FALSE),
+  HOWTO (R_RELLONG, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, special, "32", FALSE, 0xffffffff, 0xffffffff, FALSE),
+  HOWTO (R_PCRBYTE, 0, 0, 8, TRUE, 0, complain_overflow_signed, special, "DISP8", FALSE, 0x000000ff, 0x000000ff, TRUE),
+  HOWTO (R_PCRWORD, 0, 1, 16, TRUE, 0, complain_overflow_signed, special, "DISP16", FALSE, 0x0000ffff, 0x0000ffff, TRUE),
+  HOWTO (R_PCRLONG, 0, 2, 32, TRUE, 0, complain_overflow_signed, special, "DISP32", FALSE, 0xffffffff, 0xffffffff, TRUE),
+  HOWTO (R_MOV16B1, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, special, "relaxable mov.b:16", FALSE, 0x0000ffff, 0x0000ffff, FALSE),
+  HOWTO (R_MOV16B2, 0, 1, 8, FALSE, 0, complain_overflow_bitfield, special, "relaxed mov.b:16", FALSE, 0x000000ff, 0x000000ff, FALSE),
+  HOWTO (R_JMP1, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, special, "16/pcrel", FALSE, 0x0000ffff, 0x0000ffff, FALSE),
+  HOWTO (R_JMP2, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, special, "pcrecl/16", FALSE, 0x000000ff, 0x000000ff, FALSE),
+  HOWTO (R_JMPL1, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, special, "24/pcrell", FALSE, 0x00ffffff, 0x00ffffff, FALSE),
+  HOWTO (R_JMPL2, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, special, "pc8/24", FALSE, 0x000000ff, 0x000000ff, FALSE),
+  HOWTO (R_MOV24B1, 0, 1, 32, FALSE, 0, complain_overflow_bitfield, special, "relaxable mov.b:24", FALSE, 0xffffffff, 0xffffffff, FALSE),
+  HOWTO (R_MOV24B2, 0, 1, 8, FALSE, 0, complain_overflow_bitfield, special, "relaxed mov.b:24", FALSE, 0x0000ffff, 0x0000ffff, FALSE),
 
   /* An indirect reference to a function.  This causes the function's address
      to be added to the function vector in lo-mem and puts the address of
      the function vector's entry in the jsr instruction.  */
-  HOWTO (R_MEM_INDIRECT, 0, 0, 8, false, 0, complain_overflow_bitfield, special, "8/indirect", false, 0x000000ff, 0x000000ff, false),
+  HOWTO (R_MEM_INDIRECT, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, special, "8/indirect", FALSE, 0x000000ff, 0x000000ff, FALSE),
 
   /* Internal reloc for relaxing.  This is created when a 16bit pc-relative
      branch is turned into an 8bit pc-relative branch.  */
-  HOWTO (R_PCRWORD_B, 0, 0, 8, true, 0, complain_overflow_bitfield, special, "relaxed bCC:16", false, 0x000000ff, 0x000000ff, false),
+  HOWTO (R_PCRWORD_B, 0, 0, 8, TRUE, 0, complain_overflow_bitfield, special, "relaxed bCC:16", FALSE, 0x000000ff, 0x000000ff, FALSE),
 
-  HOWTO (R_MOVL1, 0, 2, 32, false, 0, complain_overflow_bitfield,special, "32/24 relaxable move", false, 0xffffffff, 0xffffffff, false),
+  HOWTO (R_MOVL1, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,special, "32/24 relaxable move", FALSE, 0xffffffff, 0xffffffff, FALSE),
 
-  HOWTO (R_MOVL2, 0, 1, 16, false, 0, complain_overflow_bitfield, special, "32/24 relaxed move", false, 0x0000ffff, 0x0000ffff, false),
+  HOWTO (R_MOVL2, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, special, "32/24 relaxed move", FALSE, 0x0000ffff, 0x0000ffff, FALSE),
 
-  HOWTO (R_BCC_INV, 0, 0, 8, true, 0, complain_overflow_signed, special, "DISP8 inverted", false, 0x000000ff, 0x000000ff, true),
+  HOWTO (R_BCC_INV, 0, 0, 8, TRUE, 0, complain_overflow_signed, special, "DISP8 inverted", FALSE, 0x000000ff, 0x000000ff, TRUE),
 
-  HOWTO (R_JMP_DEL, 0, 0, 8, true, 0, complain_overflow_signed, special, "Deleted jump", false, 0x000000ff, 0x000000ff, true),
+  HOWTO (R_JMP_DEL, 0, 0, 8, TRUE, 0, complain_overflow_signed, special, "Deleted jump", FALSE, 0x000000ff, 0x000000ff, TRUE),
 };
 
 /* Turn a howto into a reloc number.  */
@@ -270,8 +281,9 @@ static reloc_howto_type howto_table[] = {
 #define SELECT_RELOC(x,howto) \
   { x.r_type = select_reloc (howto); }
 
-#define BADMAG(x) (H8300BADMAG (x) && H8300HBADMAG (x) && H8300SBADMAG (x))
-#define H8300 1                        /* Customize coffcode.h */
+#define BADMAG(x) (H8300BADMAG (x) && H8300HBADMAG (x) && H8300SBADMAG (x) \
+                                  && H8300HNBADMAG(x) && H8300SNBADMAG(x))
+#define H8300 1                        /* Customize coffcode.h  */
 #define __A_MAGIC_SET__
 
 /* Code to swap in the reloc.  */
@@ -385,13 +397,9 @@ reloc_processing (relent, reloc, symbols, abfd, section)
   rtype2howto (relent, reloc);
 
   if (((int) reloc->r_symndx) > 0)
-    {
-      relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx];
-    }
+    relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx];
   else
-    {
-      relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
-    }
+    relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
 
   relent->addend = reloc->r_offset;
 
@@ -401,7 +409,7 @@ reloc_processing (relent, reloc, symbols, abfd, section)
 #endif
 }
 
-static boolean
+static bfd_boolean
 h8300_symbol_address_p (abfd, input_section, address)
      bfd *abfd;
      asection *input_section;
@@ -417,14 +425,15 @@ h8300_symbol_address_p (abfd, input_section, address)
   while (*s)
     {
       asymbol *p = *s;
+
       if (p->section == input_section
          && (input_section->output_section->vma
              + input_section->output_offset
              + p->value) == address)
-       return true;
+       return TRUE;
       s++;
     }
-  return false;
+  return FALSE;
 }
 
 /* If RELOC represents a relaxable instruction/reloc, change it into
@@ -461,8 +470,8 @@ h8300_reloc16_estimate (abfd, input_section, reloc, shrink, link_info)
   /* Only examine the relocs which might be relaxable.  */
   switch (reloc->howto->type)
     {
-    /* This is the 16/24 bit absolute branch which could become an 8 bit
-       pc-relative branch.  */
+      /* This is the 16/24 bit absolute branch which could become an 8 bit
+        pc-relative branch.  */
     case R_JMP1:
     case R_JMPL1:
       /* Get the address of the target of this branch.  */
@@ -505,18 +514,18 @@ h8300_reloc16_estimate (abfd, input_section, reloc, shrink, link_info)
 
             Only perform this optimisation for jumps (code 0x5a) not
             subroutine calls, as otherwise it could transform:
-            
-                            mov.w   r0,r0
-                            beq     .L1
-                            jsr     @_bar
-                     .L1:   rts
-                     _bar:  rts
+
+                            mov.w   r0,r0
+                            beq     .L1
+                            jsr     @_bar
+                     .L1:   rts
+                     _bar:  rts
             into:
-                            mov.w   r0,r0
-                            bne     _bar
-                            rts
-                     _bar:  rts
-            
+                            mov.w   r0,r0
+                            bne     _bar
+                            rts
+                     _bar:  rts
+
             which changes the call (jsr) into a branch (bne).  */
          if (code == 0x5a
              && gap <= 126
@@ -554,7 +563,7 @@ h8300_reloc16_estimate (abfd, input_section, reloc, shrink, link_info)
        pc-relative branch.  */
     case R_PCRWORD:
       /* Get the address of the target of this branch, add one to the value
-         because the addend field in PCrel jumps is off by -1.  */
+        because the addend field in PCrel jumps is off by -1.  */
       value = bfd_coff_reloc16_get_value (reloc, link_info, input_section) + 1;
 
       /* Get the address of the next instruction if we were to relax.  */
@@ -639,7 +648,7 @@ h8300_reloc16_estimate (abfd, input_section, reloc, shrink, link_info)
       value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
 
       /* If this address is in 0x0000..0x7fff inclusive or
-         0xff8000..0xffffff inclusive, then it can be relaxed.  */
+        0xff8000..0xffffff inclusive, then it can be relaxed.  */
       if (value <= 0x7fff || value >= 0xff8000)
        {
          /* Change the reloc type.  */
@@ -709,7 +718,6 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
 
       /* Everything looks OK.  Apply the relocation and update the
         src/dst address appropriately.  */
-
       bfd_put_8 (abfd, gap, data + dst_address);
       dst_address++;
       src_address++;
@@ -741,7 +749,6 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
 
       /* Everything looks OK.  Apply the relocation and update the
         src/dst address appropriately.  */
-
       bfd_put_16 (abfd, (bfd_vma) gap, data + dst_address);
       dst_address += 2;
       src_address += 2;
@@ -762,7 +769,6 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
        {
          /* Everything looks OK.  Apply the relocation and update the
             src/dst address appropriately.  */
-
          bfd_put_8 (abfd, value & 0xff, data + dst_address);
          dst_address += 1;
          src_address += 1;
@@ -1081,7 +1087,25 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
        const char *name;
        struct funcvec_hash_table *ftab;
        struct funcvec_hash_entry *h;
-       asection *vectors_sec = h8300_coff_hash_table (link_info)->vectors_sec;
+       struct h8300_coff_link_hash_table *htab;
+       asection *vectors_sec;
+
+       if (link_info->hash->creator != abfd->xvec)
+         {
+           (*_bfd_error_handler)
+             (_("cannot handle R_MEM_INDIRECT reloc when using %s output"),
+              link_info->hash->creator->name);
+
+           /* What else can we do?  This function doesn't allow return
+              of an error, and we don't want to call abort as that
+              indicates an internal error.  */
+#ifndef EXIT_FAILURE
+#define EXIT_FAILURE 1
+#endif
+           xexit (EXIT_FAILURE);
+         }
+       htab = h8300_coff_hash_table (link_info);
+       vectors_sec = htab->vectors_sec;
 
        /* First see if this is a reloc against the absolute symbol
           or against a symbol with a nonnegative value <= 0xff.  */
@@ -1130,12 +1154,12 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
            name = new_name;
          }
 
-       ftab = h8300_coff_hash_table (link_info)->funcvec_hash_table;
-       h = funcvec_hash_lookup (ftab, name, false, false);
+       ftab = htab->funcvec_hash_table;
+       h = funcvec_hash_lookup (ftab, name, FALSE, FALSE);
 
        /* This shouldn't ever happen.  If it does that means we've got
           data corruption of some kind.  Aborting seems like a reasonable
-          think to do here.  */
+          thing to do here.  */
        if (h == NULL || vectors_sec == NULL)
          abort ();
 
@@ -1196,7 +1220,7 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
    from this BFD to the bfd linker hash table.  It may add a few
    selected static symbols to the bfd linker hash table.  */
 
-static boolean
+static bfd_boolean
 h8300_bfd_link_add_symbols (abfd, info)
      bfd *abfd;
      struct bfd_link_info *info;
@@ -1204,50 +1228,53 @@ h8300_bfd_link_add_symbols (abfd, info)
   asection *sec;
   struct funcvec_hash_table *funcvec_hash_table;
   bfd_size_type amt;
+  struct h8300_coff_link_hash_table *htab;
+
+  /* Add the symbols using the generic code.  */
+  _bfd_generic_link_add_symbols (abfd, info);
+
+  if (info->hash->creator != abfd->xvec)
+    return TRUE;
+
+  htab = h8300_coff_hash_table (info);
 
   /* If we haven't created a vectors section, do so now.  */
-  if (!h8300_coff_hash_table (info)->vectors_sec)
+  if (!htab->vectors_sec)
     {
       flagword flags;
 
       /* Make sure the appropriate flags are set, including SEC_IN_MEMORY.  */
       flags = (SEC_ALLOC | SEC_LOAD
               | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_READONLY);
-      h8300_coff_hash_table (info)->vectors_sec = bfd_make_section (abfd,
-                                                                   ".vectors");
+      htab->vectors_sec = bfd_make_section (abfd, ".vectors");
 
       /* If the section wasn't created, or we couldn't set the flags,
-        quit quickly now, rather than dieing a painful death later.  */
-      if (! h8300_coff_hash_table (info)->vectors_sec
-         || ! bfd_set_section_flags (abfd,
-                                     h8300_coff_hash_table(info)->vectors_sec,
-                                     flags))
-       return false;
+        quit quickly now, rather than dying a painful death later.  */
+      if (!htab->vectors_sec
+         || !bfd_set_section_flags (abfd, htab->vectors_sec, flags))
+       return FALSE;
 
       /* Also create the vector hash table.  */
       amt = sizeof (struct funcvec_hash_table);
       funcvec_hash_table = (struct funcvec_hash_table *) bfd_alloc (abfd, amt);
 
       if (!funcvec_hash_table)
-       return false;
+       return FALSE;
 
       /* And initialize the funcvec hash table.  */
       if (!funcvec_hash_table_init (funcvec_hash_table, abfd,
                                    funcvec_hash_newfunc))
        {
          bfd_release (abfd, funcvec_hash_table);
-         return false;
+         return FALSE;
        }
 
       /* Store away a pointer to the funcvec hash table.  */
-      h8300_coff_hash_table (info)->funcvec_hash_table = funcvec_hash_table;
+      htab->funcvec_hash_table = funcvec_hash_table;
     }
 
   /* Load up the function vector hash table.  */
-  funcvec_hash_table = h8300_coff_hash_table (info)->funcvec_hash_table;
-
-  /* Add the symbols using the generic code.  */
-  _bfd_generic_link_add_symbols (abfd, info);
+  funcvec_hash_table = htab->funcvec_hash_table;
 
   /* Now scan the relocs for all the sections in this bfd; create
      additional space in the .vectors section as needed.  */
@@ -1264,7 +1291,7 @@ h8300_bfd_link_add_symbols (abfd, info)
 
       relocs = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
       if (!relocs)
-       return false;
+       return FALSE;
 
       /* The symbols should have been read in by _bfd_generic link_add_symbols
         call abovec, so we can cheat and use the pointer to them that was
@@ -1312,27 +1339,27 @@ h8300_bfd_link_add_symbols (abfd, info)
                }
 
              /* Look this symbol up in the function vector hash table.  */
-             ftab = h8300_coff_hash_table (info)->funcvec_hash_table;
-             h = funcvec_hash_lookup (ftab, name, false, false);
+             ftab = htab->funcvec_hash_table;
+             h = funcvec_hash_lookup (ftab, name, FALSE, FALSE);
 
              /* If this symbol isn't already in the hash table, add
                 it and bump up the size of the hash table.  */
              if (h == NULL)
                {
-                 h = funcvec_hash_lookup (ftab, name, true, true);
+                 h = funcvec_hash_lookup (ftab, name, TRUE, TRUE);
                  if (h == NULL)
                    {
                      free (relocs);
-                     return false;
+                     return FALSE;
                    }
 
                  /* Bump the size of the vectors section.  Each vector
                     takes 2 bytes on the h8300 and 4 bytes on the h8300h.  */
                  if (bfd_get_mach (abfd) == bfd_mach_h8300)
-                   h8300_coff_hash_table (info)->vectors_sec->_raw_size += 2;
+                   htab->vectors_sec->_raw_size += 2;
                  else if (bfd_get_mach (abfd) == bfd_mach_h8300h
                           || bfd_get_mach (abfd) == bfd_mach_h8300s)
-                   h8300_coff_hash_table (info)->vectors_sec->_raw_size += 4;
+                   htab->vectors_sec->_raw_size += 4;
                }
            }
        }
@@ -1343,7 +1370,7 @@ h8300_bfd_link_add_symbols (abfd, info)
 
   /* Now actually allocate some space for the function vector.  It's
      wasteful to do this more than once, but this is easier.  */
-  sec = h8300_coff_hash_table (info)->vectors_sec;
+  sec = htab->vectors_sec;
   if (sec->_raw_size != 0)
     {
       /* Free the old contents.  */
@@ -1354,7 +1381,7 @@ h8300_bfd_link_add_symbols (abfd, info)
       sec->contents = bfd_malloc (sec->_raw_size);
     }
 
-  return true;
+  return TRUE;
 }
 
 #define coff_reloc16_extra_cases h8300_reloc16_extra_cases