Support hand-crafted .PARISC.unwind entries
authorAlan Modra <amodra@gmail.com>
Tue, 16 Jan 2001 13:52:16 +0000 (13:52 +0000)
committerAlan Modra <amodra@gmail.com>
Tue, 16 Jan 2001 13:52:16 +0000 (13:52 +0000)
gas/ChangeLog
gas/config/tc-hppa.c

index b4370897a9cdf0f53f71af0b35e0c020f7947946..e6def2f4f7d9cefeedf39ae78de491b350f0c47a 100644 (file)
@@ -1,5 +1,8 @@
 2001-01-16  Alan Modra  <alan@linuxcare.com.au>
 
+       * config/tc-hppa.c (tc_gen_reloc): Use SEGREL32 instead of DIR32
+       relocs for .PARISC.unwind section.
+
        * config/tc-hppa.c (pa_build_unwind_subspace): Build unwind
        depending on section flags, not just for .text.
 
index ac258ce307b90f0394b97e045f80d1a23386d141..f87b57a12df3f50134bf54deffc37e2e9ba7ef49 100644 (file)
@@ -4047,14 +4047,6 @@ tc_gen_reloc (section, fixp)
 
       code = *codes[0];
 
-      reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
-      *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
-      reloc->howto = bfd_reloc_type_lookup (stdoutput,
-                                           (bfd_reloc_code_real_type) code);
-      reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
-
-      assert (reloc->howto && (unsigned int) code == reloc->howto->type);
-
       /* Now, do any processing that is dependent on the relocation type.  */
       switch (code)
        {
@@ -4088,10 +4080,24 @@ tc_gen_reloc (section, fixp)
          break;
 #endif
 
+       case R_PARISC_DIR32:
+         /* Facilitate hand-crafted unwind info.  */
+         if (strcmp (section->name, UNWIND_SECTION_NAME) == 0)
+           code = R_PARISC_SEGREL32;
+         /* Fall thru */
+
        default:
          reloc->addend = fixp->fx_offset;
          break;
        }
+
+      reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
+      *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+      reloc->howto = bfd_reloc_type_lookup (stdoutput,
+                                           (bfd_reloc_code_real_type) code);
+      reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
+
+      assert (reloc->howto && (unsigned int) code == reloc->howto->type);
       break;
     }
 #else /* OBJ_SOM */