* elf-hppa.h (_bfd_elf_hppa_gen_reloc_type, case 32): When in
authorJeff Law <law@redhat.com>
Mon, 9 Aug 1999 23:47:04 +0000 (23:47 +0000)
committerJeff Law <law@redhat.com>
Mon, 9 Aug 1999 23:47:04 +0000 (23:47 +0000)
        64bit mode, generate a section relative relocation for a 32bit
        wide relocation.
        (elf_hppa_is_local_label_name): New function.
        * elf32-hppa.c (elf_hppa_is_local_label_name): Deleted.  To be
        shared between 32bit and 64bit port.

bfd/ChangeLog
bfd/elf-hppa.h
bfd/elf32-hppa.c

index 9be218b8577151ca8e45406e8fddaf51a8dc317e..00206124f0404afd4dfb3585c1eb6e4ecfee2148 100644 (file)
@@ -1,3 +1,12 @@
+Mon Aug  9 17:37:30 1999  Jeffrey A Law  (law@cygnus.com)
+
+       * elf-hppa.h (_bfd_elf_hppa_gen_reloc_type, case 32): When in
+       64bit mode, generate a section relative relocation for a 32bit
+       wide relocation.
+       (elf_hppa_is_local_label_name): New function.
+       * elf32-hppa.c (elf_hppa_is_local_label_name): Deleted.  To be
+       shared between 32bit and 64bit port.
+
 1999-08-09  Mark Mitchell  <mark@codesourcery.com>
 
        * elf32-mips.c (elf_mips_howto_table): Fix src_mask for
index cc72af64bf884916ce26395bd8efa814fc8d7fec..1fe61e7d4e20dda88710f985faf07e57bd2d1f8e 100644 (file)
@@ -404,6 +404,11 @@ _bfd_elf_hppa_gen_reloc_type (abfd, base_type, format, field, ignore, sym)
            {
            case e_fsel:
              final_type = R_PARISC_DIR32;
+             /* When in 64bit mode, a 32bit relocation is supposed to
+                be a section relative relocation.  Dwarf2 (for example)
+                uses 32bit section relative relocations.  */
+             if (bfd_get_arch_info (abfd)->bits_per_address != 32)
+               final_type = R_PARISC_SECREL32;
              break;
            case e_psel:
              final_type = R_PARISC_PLABEL32;
@@ -604,3 +609,14 @@ elf_hppa_final_write_processing (abfd, linker)
     }
 
 }
+
+/* Return true if SYM represents a local label symbol.  */
+
+static boolean
+elf_hppa_is_local_label_name (abfd, name)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     const char *name;
+{
+  return (name[0] == 'L' && name[1] == '$');
+}
+
index 1813b98bbc6f4b5b46755eea301e4629f36b9cea..5f4935e883b832105cac725d76fb910fc765501e 100644 (file)
@@ -114,8 +114,6 @@ static unsigned long hppa_elf_relocate_insn
   PARAMS ((bfd *, asection *, unsigned long, unsigned long, long,
           long, unsigned long, unsigned long, unsigned long));
 
-static boolean hppa_elf_is_local_label_name PARAMS ((bfd *, const char *));
-
 static boolean elf32_hppa_add_symbol_hook
   PARAMS ((bfd *, struct bfd_link_info *, const Elf_Internal_Sym *,
           const char **, flagword *, asection **, bfd_vma *));
@@ -792,16 +790,6 @@ do_basic_type_1:
   return (bfd_reloc_ok);
 }
 
-/* Return true if SYM represents a local label symbol.  */
-
-static boolean
-hppa_elf_is_local_label_name (abfd, name)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     const char *name;
-{
-  return (name[0] == 'L' && name[1] == '$');
-}
-
 /* Undo the generic ELF code's subtraction of section->vma from the
    value of each external symbol.  */
 
@@ -1320,7 +1308,7 @@ error_return:
 
 /* Misc BFD support code.  */
 #define bfd_elf32_bfd_reloc_type_lookup                elf_hppa_reloc_type_lookup
-#define bfd_elf32_bfd_is_local_label_name      hppa_elf_is_local_label_name
+#define bfd_elf32_bfd_is_local_label_name      elf_hppa_is_lcoal_label_name
 #define elf_info_to_howto                      elf_hppa_info_to_howto
 #define elf_info_to_howto_rel                  elf_hppa_info_to_howto_rel