[PATCH] fix some ld testsuite regressions for arm-nacl targets

Roland McGrath mcgrathr@google.com
Thu Jun 28 16:58:00 GMT 2012


On Thu, Jun 28, 2012 at 7:49 AM, nick clifton <nickc@redhat.com> wrote:
> Approved, please apply.

Committed.

> Note - testing with an arm-nacl toolchain I found that the "Simple non-PIC
> shared library (no PLT check)" failed because the library did not build:
>
>  ld-new -o tmpdir/arm-lib.so -shared tmpdir/arm-lib.o
>
>  ld-new: BFD (GNU Binutils) 2.22.52.20120628 assertion fail
>  bfd/elf32-arm.c:7640
>
> Would you care to take a look at this ?

This happens only with a 32-bit-only host (and no --enable-64-bit-bfd),
which is why I failed to notice it.  I committed the fix below.


Thanks,
Roland


bfd/
2012-06-28  Roland McGrath  <mcgrathr@google.com>

        * elf32-arm.c (elf32_arm_populate_plt_entry): Use int32_t for
        displacement calculation in nacl_p case.


diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 826dd7e..4ac0a9d 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -23,6 +23,7 @@
 #include <limits.h>

 #include "bfd.h"
+#include "bfd_stdint.h"
 #include "libiberty.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
@@ -7629,7 +7630,7 @@ elf32_arm_populate_plt_entry (bfd *output_bfd, struct bfd\
_link_info *info,
        {
          /* Calculate the displacement between the PLT slot and the
             common tail that's part of the special initial PLT slot.  */
-         bfd_vma tail_displacement
+         int32_t tail_displacement
            = ((splt->output_section->vma + splt->output_offset
                + ARM_NACL_PLT_TAIL_OFFSET)
               - (plt_address + htab->plt_entry_size + 4));
@@ -7642,7 +7643,8 @@ elf32_arm_populate_plt_entry (bfd *output_bfd, struct bfd\
_link_info *info,
          /* Calculate the displacement between the PLT slot and the entry
             in the GOT.  The offset accounts for the value produced by
             adding to pc in the penultimate instruction of the PLT stub.  */
-         got_displacement = got_address - (plt_address + htab->plt_entry_size)\
;
+         got_displacement = (got_address
+                              - (plt_address + htab->plt_entry_size));

          /* NaCl does not support interworking at all.  */
          BFD_ASSERT (!elf32_arm_plt_needs_thumb_stub_p (info, arm_plt));



More information about the Binutils mailing list