]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Copy elf32-hppa.c from trunk to get 2001-02-27 and 2001-03-15 patches.
authorAlan Modra <amodra@gmail.com>
Fri, 16 Mar 2001 05:23:11 +0000 (05:23 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 16 Mar 2001 05:23:11 +0000 (05:23 +0000)
Fix typos in gas/ChangeLog-9899

bfd/ChangeLog
bfd/elf32-hppa.c
gas/ChangeLog-9899

index ee78364981ff47760c8628b71ab8a54e2f79b8cc..07d8fd25cf8b2cbf1b0815c45eb63b01f264940b 100644 (file)
@@ -1,3 +1,18 @@
+2001-03-16  Alan Modra  <alan@linuxcare.com.au>
+
+       * elf32-hppa.c (elf32_hppa_link_hash_entry): Add maybe_pic_call.
+       (hppa_link_hash_newfunc): Init it.
+       (hppa_type_of_stub): Only use non-PIC to PIC call stub if caller
+       section appears to be non-PIC.
+       (final_link_relocate): Likewise.
+       (elf32_hppa_adjust_dynamic_symbol): Set maybe_pic_call for any
+       possible candidate function, and set pic_call for those that will
+       only have a .plt entry for the PIC call stub.
+       (hppa_handle_PIC_calls): Set maybe_pic_call.
+
+       * elf32-hppa.c: Correct field selector in stub comments.
+       (clobber_millicode_symbols): Formatting fix.
+
 2001-03-11  Philip Blundell  <philb@gnu.org>
 
        * configure.in: Set version to 2.11.
index 63071f3aeee73f1ea0954489c30b3586eabdb2ee..c7f60a7dd7ee2d9e5ce0e877f2295b9c82b20128 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for HP PA-RISC ELF files.
-   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001
+   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2001
    Free Software Foundation, Inc.
 
    Original code by
@@ -64,28 +64,28 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
    PIC long branch stub:
    :           b,l .+8,%r1
-   :           addil L'X - ($PIC_pcrel$0 - 4),%r1
-   :           be,n R'X - ($PIC_pcrel$0 - 8)(%sr4,%r1)
+   :           addil LR'X - ($PIC_pcrel$0 - 4),%r1
+   :           be,n RR'X - ($PIC_pcrel$0 - 8)(%sr4,%r1)
 
    Import stub to call shared library routine from normal object file
    (single sub-space version)
-   :           addil L'lt_ptr+ltoff,%dp        ; get procedure entry point
-   :           ldw R'lt_ptr+ltoff(%r1),%r21
+   :           addil LR'lt_ptr+ltoff,%dp       ; get procedure entry point
+   :           ldw RR'lt_ptr+ltoff(%r1),%r21
    :            bv %r0(%r21)
-   :           ldw R'lt_ptr+ltoff+4(%r1),%r19  ; get new dlt value.
+   :           ldw RR'lt_ptr+ltoff+4(%r1),%r19 ; get new dlt value.
 
    Import stub to call shared library routine from shared library
    (single sub-space version)
-   :           addil L'ltoff,%r19              ; get procedure entry point
-   :           ldw R'ltoff(%r1),%r21
+   :           addil LR'ltoff,%r19             ; get procedure entry point
+   :           ldw RR'ltoff(%r1),%r21
    :            bv %r0(%r21)
-   :           ldw R'ltoff+4(%r1),%r19         ; get new dlt value.
+   :           ldw RR'ltoff+4(%r1),%r19        ; get new dlt value.
 
    Import stub to call shared library routine from normal object file
    (multiple sub-space support)
-   :           addil L'lt_ptr+ltoff,%dp        ; get procedure entry point
-   :           ldw R'lt_ptr+ltoff(%r1),%r21
-   :           ldw R'lt_ptr+ltoff+4(%r1),%r19  ; get new dlt value.
+   :           addil LR'lt_ptr+ltoff,%dp       ; get procedure entry point
+   :           ldw RR'lt_ptr+ltoff(%r1),%r21
+   :           ldw RR'lt_ptr+ltoff+4(%r1),%r19 ; get new dlt value.
    :           ldsid (%r21),%r1
    :           mtsp %r1,%sr0
    :           be 0(%sr0,%r21)                 ; branch to target
@@ -93,9 +93,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
    Import stub to call shared library routine from shared library
    (multiple sub-space support)
-   :           addil L'ltoff,%r19              ; get procedure entry point
-   :           ldw R'ltoff(%r1),%r21
-   :           ldw R'ltoff+4(%r1),%r19         ; get new dlt value.
+   :           addil LR'ltoff,%r19             ; get procedure entry point
+   :           ldw RR'ltoff(%r1),%r21
+   :           ldw RR'ltoff+4(%r1),%r19        ; get new dlt value.
    :           ldsid (%r21),%r1
    :           mtsp %r1,%sr0
    :           be 0(%sr0,%r21)                 ; branch to target
@@ -225,6 +225,10 @@ struct elf32_hppa_link_hash_entry {
 #endif
 
   /* Set during a static link if we detect a function is PIC.  */
+  unsigned int maybe_pic_call:1;
+
+  /* Set if the only reason we need a .plt entry is for a non-PIC to
+     PIC function call.  */
   unsigned int pic_call:1;
 
   /* Set if this symbol is used by a plabel reloc.  */
@@ -490,6 +494,7 @@ hppa_link_hash_newfunc (entry, table, string)
 #if ! LONG_BRANCH_PIC_IN_SHLIB || RELATIVE_DYNAMIC_RELOCS
       ret->reloc_entries = NULL;
 #endif
+      ret->maybe_pic_call = 0;
       ret->pic_call = 0;
       ret->plabel = 0;
       ret->plt_abs = 0;
@@ -721,7 +726,7 @@ hppa_type_of_stub (input_sec, rel, hash, destination)
              && hash->elf.plt.offset != (bfd_vma) -1)
          || hash->elf.root.type == bfd_link_hash_undefweak
          || hash->elf.root.type == bfd_link_hash_undefined
-         || hash->pic_call))
+         || (hash->maybe_pic_call && !(input_sec->flags & SEC_HAS_GOT_REF))))
     {
       /* If output_section is NULL, then it's a symbol defined in a
         shared library.  We will need an import stub.  Decide between
@@ -781,16 +786,16 @@ hppa_type_of_stub (input_sec, rel, hash, destination)
 #define BE_SR4_R1      0xe0202002      /* be,n  RR'XXX(%sr4,%r1)       */
 
 #define BL_R1          0xe8200000      /* b,l   .+8,%r1                */
-#define ADDIL_R1       0x28200000      /* addil L'XXX,%r1,%r1          */
+#define ADDIL_R1       0x28200000      /* addil LR'XXX,%r1,%r1         */
 #define DEPI_R1                0xd4201c1e      /* depi  0,31,2,%r1             */
 
-#define ADDIL_DP       0x2b600000      /* addil L'XXX,%dp,%r1          */
-#define LDW_R1_R21     0x48350000      /* ldw   R'XXX(%sr0,%r1),%r21   */
+#define ADDIL_DP       0x2b600000      /* addil LR'XXX,%dp,%r1         */
+#define LDW_R1_R21     0x48350000      /* ldw   RR'XXX(%sr0,%r1),%r21  */
 #define BV_R0_R21      0xeaa0c000      /* bv    %r0(%r21)              */
-#define LDW_R1_R19     0x48330000      /* ldw   R'XXX(%sr0,%r1),%r19   */
+#define LDW_R1_R19     0x48330000      /* ldw   RR'XXX(%sr0,%r1),%r19  */
 
-#define ADDIL_R19      0x2a600000      /* addil L'XXX,%r19,%r1         */
-#define LDW_R1_DP      0x483b0000      /* ldw   R'XXX(%sr0,%r1),%dp    */
+#define ADDIL_R19      0x2a600000      /* addil LR'XXX,%r19,%r1        */
+#define LDW_R1_DP      0x483b0000      /* ldw   RR'XXX(%sr0,%r1),%dp   */
 
 #define LDSID_R21_R1   0x02a010a1      /* ldsid (%sr0,%r21),%r1        */
 #define MTSP_R1                0x00011820      /* mtsp  %r1,%sr0               */
@@ -1890,6 +1895,14 @@ elf32_hppa_adjust_dynamic_symbol (info, h)
   if (h->type == STT_FUNC
       || (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
     {
+      if (!info->shared
+         && h->plt.refcount > 0
+         && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
+         && (h->root.u.def.section->flags & SEC_HAS_GOT_REF) != 0)
+       {
+         ((struct elf32_hppa_link_hash_entry *) h)->maybe_pic_call = 1;
+       }
+
       if (h->plt.refcount <= 0
          || ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
              && h->root.type != bfd_link_hash_defweak
@@ -1906,14 +1919,8 @@ elf32_hppa_adjust_dynamic_symbol (info, h)
 
          /* As a special sop to the hppa ABI, we keep a .plt entry
             for functions in sections containing PIC code.  */
-         if (!info->shared
-             && h->plt.refcount > 0
-             && (h->root.type == bfd_link_hash_defined
-                 || h->root.type == bfd_link_hash_defweak)
-             && (h->root.u.def.section->flags & SEC_HAS_GOT_REF) != 0)
-           {
-             ((struct elf32_hppa_link_hash_entry *) h)->pic_call = 1;
-           }
+         if (((struct elf32_hppa_link_hash_entry *) h)->maybe_pic_call)
+           ((struct elf32_hppa_link_hash_entry *) h)->pic_call = 1;
          else
            {
              h->plt.offset = (bfd_vma) -1;
@@ -2059,6 +2066,7 @@ hppa_handle_PIC_calls (h, inf)
     }
 
   h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
+  ((struct elf32_hppa_link_hash_entry *) h)->maybe_pic_call = 1;
   ((struct elf32_hppa_link_hash_entry *) h)->pic_call = 1;
 
   info = (struct bfd_link_info *) inf;
@@ -2138,7 +2146,7 @@ clobber_millicode_symbols (h, info)
   /* Note!  We only want to remove these from the dynamic symbol
      table.  Therefore we do not set ELF_LINK_FORCED_LOCAL.  */
   if (h->type == STT_PARISC_MILLI)
-    elf32_hppa_hide_symbol(info, h);
+    elf32_hppa_hide_symbol (info, h);
   return true;
 }
 
@@ -3244,11 +3252,12 @@ final_link_relocate (input_section, contents, rel, value, hplink, sym_sec, h)
         find the import stub in the stub hash.  */
       if (sym_sec == NULL
          || sym_sec->output_section == NULL
-         || (h != NULL &&
-             (h->pic_call
-              || (h->elf.root.type == bfd_link_hash_defweak
-                  && h->elf.dynindx != -1
-                  && h->elf.plt.offset != (bfd_vma) -1))))
+         || (h != NULL
+             && ((h->maybe_pic_call
+                  && !(input_section->flags & SEC_HAS_GOT_REF))
+                 || (h->elf.root.type == bfd_link_hash_defweak
+                     && h->elf.dynindx != -1
+                     && h->elf.plt.offset != (bfd_vma) -1))))
        {
          stub_entry = hppa_get_stub_entry (input_section, sym_sec,
                                            h, rel, hplink);
index 49e2542b6ce9b5ec1a20f20a48b3a47ffe6725d9..a853b883941b020c7e4ed846f35bf72e8bac2dd1 100644 (file)
@@ -337,12 +337,12 @@ Sun Sep 19 10:43:31 1999  Jeffrey A Law  (law@cygnus.com)
        * config/tc-hppa.c (pa_ip): Handle 'J', 'K' and 'cc'
        operands.
 
-       * config/tc-hppa.c (pa_ip); Handle "fe", and 'cJ'.
+       * config/tc-hppa.c (pa_ip): Handle "fe", and 'cJ'.
 
        * config/tc-hppa.c (pa_ip): Handle 'd', '#' and 'cq'.
 
        * config/tc-hppa.c (struct pa_it): New field "trunc".
-       (pa_ip): Hadnle 'h', 'm', '=', '{', and '_' operands.
+       (pa_ip): Handle 'h', 'm', '=', '{', and '_' operands.
        (pa_parse_ftest_gfx_completer): New function
        (pa_parse_fp_cnv_format): New function.
 
@@ -2495,10 +2495,10 @@ Thu Oct 22 12:41:33 1998  Catherine Moore  <clm@cygnus.com>
 
 Thu Oct 22 10:03:15 1998  Ron Unrau  <runrau@cygnus.com>
 
-       * config/tc-mips.c : support frame and regmask/fregmask when
+       * config/tc-mips.c: support frame and regmask/fregmask when
          MIPS_STABS_ELF is specified.
 
-Wed Oct 21 11;34:51 1998  Catherine Moore  <clm@cygnus.com>
+Wed Oct 21 11:34:51 1998  Catherine Moore  <clm@cygnus.com>
 
        * config/tc-sh.c (sh_fix_adjustable):  Only include if OBJ_ELF.
        (md_apply_fix):  Don't return 1 for VTABLE relocs.