2010-03-15  Wei Guozhi  <carrot@google.com>

       PR gas/11323
       * bfd-in2.h (enum bfd_reloc_code_real): New BFD_RELOC_GOT_PREL type.
       * elf32-arm.c (elf32_arm_reloc_map): BFD_RELOC_GOT_PREL to
       R_ARM_GOT_PREL map.
       * libbfd.h (bfd_reloc_code_real_names): BFD_RELOC_GOT_PREL name.
       * reloc.c (comments): Document the new relocation.

gas/
2010-03-15  Wei Guozhi  <carrot@google.com>

       PR gas/11323
       * config/tc-arm.c (reloc_names): New relocation names.
       (md_apply_fix): New case for BFD_RELOC_ARM_GOT_PREL.
       (tc_gen_reloc): New case for BFD_RELOC_ARM_GOT_PREL.
       * doc/c-arm.texi (ARM-Relocations): Document the new relocation.

gas/testsuite
2010-03-15  Wei Guozhi  <carrot@google.com>

       PR gas/11323
       * gas/arm/got_prel.s: New test case.
       * gas/arm/got_prel.d: Likewise.
This commit is contained in:
Nick Clifton
2010-03-18 11:22:46 +00:00
parent 17299ac7f6
commit b43420e6cd
11 changed files with 82 additions and 4 deletions

View File

@ -1,3 +1,12 @@
2010-03-18 Wei Guozhi <carrot@google.com>
PR gas/11323
* elf32-arm.c (elf32_arm_reloc_map): Map BFD_RELOC_ARM_GOT_PREL to
R_ARM_GOT_PREL.
* reloc.c (BFD_RELOC_ARM_GOT_PREL): New ARM relocation.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
2010-03-17 H.J. Lu <hongjiu.lu@intel.com>
* reloc.c (BFD_RELOC_SPU_PIC18): Removed.

View File

@ -3114,6 +3114,7 @@ pc-relative or some form of GOT-indirect relocation. */
BFD_RELOC_ARM_RELATIVE,
BFD_RELOC_ARM_GOTOFF,
BFD_RELOC_ARM_GOTPC,
BFD_RELOC_ARM_GOT_PREL,
/* ARM thread-local storage relocations. */
BFD_RELOC_ARM_TLS_GD32,

View File

@ -1721,6 +1721,7 @@ static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] =
{BFD_RELOC_ARM_RELATIVE, R_ARM_RELATIVE},
{BFD_RELOC_ARM_GOTOFF, R_ARM_GOTOFF32},
{BFD_RELOC_ARM_GOTPC, R_ARM_GOTPC},
{BFD_RELOC_ARM_GOT_PREL, R_ARM_GOT_PREL},
{BFD_RELOC_ARM_GOT32, R_ARM_GOT32},
{BFD_RELOC_ARM_PLT32, R_ARM_PLT32},
{BFD_RELOC_ARM_TARGET1, R_ARM_TARGET1},

View File

@ -1330,6 +1330,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_ARM_RELATIVE",
"BFD_RELOC_ARM_GOTOFF",
"BFD_RELOC_ARM_GOTPC",
"BFD_RELOC_ARM_GOT_PREL",
"BFD_RELOC_ARM_TLS_GD32",
"BFD_RELOC_ARM_TLS_LDO32",
"BFD_RELOC_ARM_TLS_LDM32",

View File

@ -2936,6 +2936,8 @@ ENUMX
BFD_RELOC_ARM_GOTOFF
ENUMX
BFD_RELOC_ARM_GOTPC
ENUMX
BFD_RELOC_ARM_GOT_PREL
ENUMDOC
Relocations for setting up GOTs and PLTs for shared libraries.

View File

@ -1,3 +1,11 @@
2010-03-18 Wei Guozhi <carrot@google.com>
PR gas/11323
* config/tc-arm.c (reloc_names): New relocation names.
(md_apply_fix): New case for BFD_RELOC_ARM_GOT_PREL.
(tc_gen_reloc): New case for BFD_RELOC_ARM_GOT_PREL.
* doc/c-arm.texi (ARM-Relocations): Document the new relocation.
2010-03-15 Thomas Schwinge <thomas@codesourcery.com>
* dw2gencfi.c (output_cie): Consider emitting the S augmentation in all

View File

@ -1,6 +1,6 @@
/* tc-arm.c -- Assemble for the ARM
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
2004, 2005, 2006, 2007, 2008, 2009
2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
Modified by David Taylor (dtaylor@armltd.co.uk)
@ -16191,7 +16191,8 @@ static struct reloc_entry reloc_names[] =
{ "tlsldm", BFD_RELOC_ARM_TLS_LDM32}, { "TLSLDM", BFD_RELOC_ARM_TLS_LDM32},
{ "tlsldo", BFD_RELOC_ARM_TLS_LDO32}, { "TLSLDO", BFD_RELOC_ARM_TLS_LDO32},
{ "gottpoff",BFD_RELOC_ARM_TLS_IE32}, { "GOTTPOFF",BFD_RELOC_ARM_TLS_IE32},
{ "tpoff", BFD_RELOC_ARM_TLS_LE32}, { "TPOFF", BFD_RELOC_ARM_TLS_LE32}
{ "tpoff", BFD_RELOC_ARM_TLS_LE32}, { "TPOFF", BFD_RELOC_ARM_TLS_LE32},
{ "got_prel", BFD_RELOC_ARM_GOT_PREL}, { "GOT_PREL", BFD_RELOC_ARM_GOT_PREL}
};
#endif
@ -20477,7 +20478,12 @@ md_apply_fix (fixS * fixP,
if (fixP->fx_done || !seg->use_rela_p)
md_number_to_chars (buf, 0, 4);
break;
case BFD_RELOC_ARM_GOT_PREL:
if (fixP->fx_done || !seg->use_rela_p)
md_number_to_chars (buf, value, 4);
break;
case BFD_RELOC_ARM_TARGET2:
/* TARGET2 is not partial-inplace, so we need to write the
addend here for REL targets, because it won't be written out
@ -21062,6 +21068,7 @@ tc_gen_reloc (asection *section, fixS *fixp)
#ifdef OBJ_ELF
case BFD_RELOC_ARM_GOT32:
case BFD_RELOC_ARM_GOTOFF:
case BFD_RELOC_ARM_GOT_PREL:
case BFD_RELOC_ARM_PLT32:
case BFD_RELOC_ARM_TARGET1:
case BFD_RELOC_ARM_ROSEGREL32:

View File

@ -452,7 +452,8 @@ The following relocations are supported:
@code{TLSGD},
@code{TLSLDM},
@code{TLSLDO},
@code{GOTTPOFF}
@code{GOTTPOFF},
@code{GOT_PREL}
and
@code{TPOFF}.

View File

@ -1,3 +1,9 @@
2010-03-18 Wei Guozhi <carrot@google.com>
PR gas/11323
* gas/arm/got_prel.s: New test case.
* gas/arm/got_prel.d: Expected disassembly.
2010-03-17 H.J. Lu <hongjiu.lu@intel.com>
* gas/i386/i386.exp: Run list-1, list-2 and list-3 only for

View File

@ -0,0 +1,19 @@
# name: R_ARM_GOT_PREL relocation
# source: got_prel.s
# as: -march=armv5te -meabi=5
# readelf: -x 4 -r
# target: *-*-*eabi *-*-symbianelf *-*-linux-* *-*-elf
Relocation section '.rel.text.foo' at offset 0x3f0 contains 1 entries:
Offset Info Type Sym.Value Sym. Name
00000010 00000c60 R_ARM_GOT_PREL 00000000 i
Relocation section '.rel.ARM.exidx.text.foo' at offset 0x3f8 contains 2 entries:
Offset Info Type Sym.Value Sym. Name
00000000 0000042a R_ARM_PREL31 00000000 .text.foo
00000000 00000d00 R_ARM_NONE 00000000 __aeabi_unwind_cpp_pr0
Hex dump of section '.text.foo':
NOTE: This section has relocations against it, but these have NOT been applied to this dump.
0x00000000 034b7b44 1b681a68 1860101c 7047c046 .K{D.h.h.`..pG.F
0x00000010 0a000000 ....

View File

@ -0,0 +1,23 @@
.code 16
.text
.Ltext0:
.section .text.foo,"ax",%progbits
.align 2
.global foo
.code 16
.thumb_func
.type foo, %function
foo:
.fnstart
ldr r3, .L3
.LPIC0:
add r3, pc
ldr r3, [r3]
ldr r2, [r3]
str r0, [r3]
mov r0, r2
bx lr
.align 2
.L3:
.word i(GOT_PREL) + (. - (.LPIC0+4))
.fnend