* som.h (som_symbol_type): Delete unwind field.
authorJeff Law <law@redhat.com>
Wed, 14 Sep 1994 02:28:52 +0000 (02:28 +0000)
committerJeff Law <law@redhat.com>
Wed, 14 Sep 1994 02:28:52 +0000 (02:28 +0000)
* som.c (som_write_fixups): For R_ENTRY fixups, get 32bits of
unwind information from the addend field of the R_ENTRY, get the
other 32bits from the addend field of the R_EXIT.
(bfd_som_attach_unwind_info): Delete function and all references.

bfd/ChangeLog
bfd/som.c
bfd/som.h

index 66e81c5189d193f3dd896f42ce321954c35f00a5..bfcc491972668963b9c6f07f375d302abf2ccfb6 100644 (file)
@@ -1,5 +1,12 @@
 Tue Sep 13 17:57:00 1994  Jeff Law  (law@snake.cs.utah.edu)
 
+       * som.h (som_symbol_type): Delete unwind field.
+
+       * som.c (som_write_fixups): For R_ENTRY fixups, get 32bits of
+       unwind information from the addend field of the R_ENTRY, get the
+       other 32bits from the addend field of the R_EXIT.
+       (bfd_som_attach_unwind_info): Delete function and all references.
+
        * som.h (som_symbol_type): Delete unused a.out-related fields.
 
        * som.c (bfd_section_from_som_symbol): Use bfd_abs_section_ptr
index 3e0fbad778e7c3103851245a6d9814ddf993c022..871595b2dec970b55123245e603fcae99be86f3c 100644 (file)
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -2536,25 +2536,30 @@ som_write_fixups (abfd, current_offset, total_reloc_sizep)
 
                case R_ENTRY:
                  {
-                   int *descp = (int *)
-                     som_symbol_data (*bfd_reloc->sym_ptr_ptr)->unwind;
+                   int tmp;
+                   arelent *tmp_reloc;
                    bfd_put_8 (abfd, R_ENTRY, p);
 
-                   /* FIXME:  We should set the sym_ptr for the R_ENTRY
-                      reloc to point to the appropriate function symbol,
-                      and attach unwind bits to the function symbol as
-                      we canonicalize the relocs.  Doing so would ensure
-                      descp would always point to something useful.  */
-                   if (descp)
+                   /* R_ENTRY relocations have 64 bits of associated
+                      data.  Unfortunately the addend field of a bfd
+                      relocation is only 32 bits.  So, we split up
+                      the 64bit unwind information and store part in
+                      the R_ENTRY relocation, and the rest in the R_EXIT
+                      relocation.  */
+                   bfd_put_32 (abfd, bfd_reloc->addend, p + 1);
+               
+                   /* Find the next R_EXIT relocation.  */
+                   for (tmp = j; tmp < subsection->reloc_count; tmp++)
                      {
-                       bfd_put_32 (abfd, descp[0], p + 1);
-                       bfd_put_32 (abfd, descp[1], p + 5);
-                     }
-                   else
-                     {
-                       bfd_put_32 (abfd, 0, p + 1);
-                       bfd_put_32 (abfd, 0, p + 5);
+                       tmp_reloc = subsection->orelocation[tmp];
+                       if (tmp_reloc->howto->type == R_EXIT)
+                         break;
                      }
+
+                   if (tmp == subsection->reloc_count)
+                     abort ();
+
+                   bfd_put_32 (abfd, tmp_reloc->addend, p + 5);
                    p = try_prev_fixup (abfd, &subspace_reloc_size,
                                        p, 9, reloc_queue);
                    break;
@@ -4485,18 +4490,6 @@ bfd_som_set_symbol_type (symbol, type)
   som_symbol_data (symbol)->som_type = type;
 }
 
-/* Attach 64bits of unwind information to a symbol (which hopefully
-   is a function of some kind!).  It would be better to keep this
-   in the R_ENTRY relocation, but there is not enough space.  */
-
-void
-bfd_som_attach_unwind_info (symbol, unwind_desc)
-     asymbol *symbol;
-     char *unwind_desc;
-{
-  som_symbol_data (symbol)->unwind = unwind_desc;
-}
-
 /* Attach an auxiliary header to the BFD backend so that it may be
    written into the object file.  */
 boolean
index 06f68e0f3b67ca21d87fb93489141504cfeb2f10..196cb9cd3bf265cf92266a48bcee55d34cfadda9 100644 (file)
--- a/bfd/som.h
+++ b/bfd/som.h
@@ -64,12 +64,6 @@ typedef struct som_symbol
        the symbols from most used to least used we can significantly
        reduce the size of the relocation stream for incomplete objects.  */
     int reloc_count;
-
-    /* The unwind descriptor bits associated with R_ENTRY relocations
-       for functions (not enough room in a BFD reloc to store all the
-       information, so we tack it onto the symbol associated with the
-       function.  */
-    char *unwind;
   }
 som_symbol_type;
 
@@ -210,7 +204,6 @@ boolean bfd_som_set_section_attributes PARAMS ((asection *, int, int,
 boolean bfd_som_set_subsection_attributes PARAMS ((asection *, asection *,
                                                   int, unsigned int, int));
 void bfd_som_set_symbol_type PARAMS ((asymbol *, unsigned int));
-void bfd_som_attach_unwind_info PARAMS ((asymbol *, char *));
 boolean bfd_som_attach_aux_hdr PARAMS ((bfd *, int, char *));
 int ** hppa_som_gen_reloc_type
   PARAMS ((bfd *, int, int, enum hppa_reloc_field_selector_type_alt));