* config/tc-hppa.c (UNWIND_SECTION_NAME): Define for ELF.
authorJeff Law <law@redhat.com>
Tue, 10 Aug 1999 19:02:30 +0000 (19:02 +0000)
committerJeff Law <law@redhat.com>
Tue, 10 Aug 1999 19:02:30 +0000 (19:02 +0000)
        (pa_build_unwind_subspace): Remove #if 0 wrapper.  Select a
        suitable relocation based on the size of the target's pointer.
        Always Use subsegment zero for the unwinders.
        (pa_level): Handle "2.0w".

gas/ChangeLog
gas/config/tc-hppa.c

index 1eee5ce7302017b572ae22116116ea801009d679..0872e46188a26bb63821d4c8b5244a2d1b792ed6 100644 (file)
@@ -1,3 +1,11 @@
+Tue Aug 10 12:58:31 1999  Jeffrey A Law  (law@cygnus.com)
+
+       * config/tc-hppa.c (UNWIND_SECTION_NAME): Define for ELF.
+       (pa_build_unwind_subspace): Remove #if 0 wrapper.  Select a
+       suitable relocation based on the size of the target's pointer.
+       Always Use subsegment zero for the unwinders.
+       (pa_level): Handle "2.0w".
+
 Mon Aug  9 20:02:22 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>
 
        * config/tc-d30v.c (write_2_short): Don't group repeat instructions
index f7955bc898c8ff02aedacee97fe04bbdc0dbd16c..7f38fa64db43cd8362aa9f8fd63bec5bffa85290 100644 (file)
@@ -59,6 +59,8 @@ typedef elf_symbol_type obj_symbol_type;
    to store a copyright string.  */
 #define obj_version obj_elf_version
 #define obj_copyright obj_elf_version
+
+#define UNWIND_SECTION_NAME ".PARISC.unwind"
 #endif
 
 #ifdef OBJ_SOM
@@ -4512,17 +4514,21 @@ static void
 pa_build_unwind_subspace (call_info)
      struct call_info *call_info;
 {
-#if 0
   char *unwind;
   asection *seg, *save_seg;
+  asymbol *sym;
   subsegT subseg, save_subseg;
-  int i;
+  int i, reloc;
   char c, *p;
 
+  if (bfd_get_arch_info (abfd)->bits_per_address == 32)
+    reloc = R_PARISC_DIR32
+  else
+    reloc = R_PARISC_SEGREL32
+    
   /* Get into the right seg/subseg.  This may involve creating
      the seg the first time through.  Make sure to have the
      old seg/subseg so that we can reset things when we are done.  */
-  subseg = SUBSEG_UNWIND;
   seg = bfd_get_section_by_name (stdoutput, UNWIND_SECTION_NAME);
   if (seg == ASEC_NULL)
     {
@@ -4534,7 +4540,7 @@ pa_build_unwind_subspace (call_info)
 
   save_seg = now_seg;
   save_subseg = now_subseg;
-  subseg_set (seg, subseg);
+  subseg_set (seg, 0);
 
 
   /* Get some space to hold relocation information for the unwind
@@ -4545,7 +4551,8 @@ pa_build_unwind_subspace (call_info)
   /* Relocation info. for start offset of the function.  */
   fix_new_hppa (frag_now, p - frag_now->fr_literal, 4,
                call_info->start_symbol, (offsetT) 0,
-               (expressionS *) NULL, 0, R_PARISC_DIR32, e_fsel, 32, 0, NULL);
+               (expressionS *) NULL, 0, reloc,
+               e_fsel, 32, 0, NULL);
 
   p = frag_more (4);
   md_number_to_chars (p, 0, 4);
@@ -4560,7 +4567,8 @@ pa_build_unwind_subspace (call_info)
 
   fix_new_hppa (frag_now, p - frag_now->fr_literal, 4,
                call_info->end_symbol, (offsetT) 0,
-               (expressionS *) NULL, 0, R_PARISC_DIR32, e_fsel, 32, 0, NULL);
+               (expressionS *) NULL, 0, reloc,
+               e_fsel, 32, 0, NULL);
 
   /* Dump it. */
   unwind = (char *) &call_info->ci_unwind;
@@ -4574,7 +4582,6 @@ pa_build_unwind_subspace (call_info)
 
   /* Return back to the original segment/subsegment.  */
   subseg_set (save_seg, save_subseg);
-#endif
 }
 #endif
 
@@ -5255,6 +5262,12 @@ pa_level (unused)
       if (!bfd_set_arch_mach (stdoutput, bfd_arch_hppa, 11))
        as_warn (_("could not set architecture and machine"));
     }
+  else if (strncmp (level, "2.0w", 4) == 0)
+    {
+      input_line_pointer += 4;
+      if (!bfd_set_arch_mach (stdoutput, bfd_arch_hppa, 25))
+       as_warn (_("could not set architecture and machine"));
+    }
   else if (strncmp (level, "2.0", 3) == 0)
     {
       input_line_pointer += 3;