From: Paul Brook Date: Fri, 1 Dec 2006 16:42:26 +0000 (+0000) Subject: 2006-12-01 Paul Brook X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f0291e4c153abd12f729d9314338775bfc614f03;p=binutils-gdb.git 2006-12-01 Paul Brook gas/ * config/tc-arm.c (arm_force_relocation): Return 1 for relocs against function symbols. gas/testsuite/ * gas/arm/thumbrel.s: New test. * gas/arm/thumbrel.d: New test. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index d8066c4f123..63750dba9ca 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2006-12-01 Paul Brook + + * config/tc-arm.c (arm_force_relocation): Return 1 for relocs against + function symbols. + 2006-11-29 Paul Brook * config/tc-arm.c (arm_is_eabi): New function. diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 8ea3ad198b7..a7859dc373a 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -18962,6 +18962,12 @@ arm_force_relocation (struct fix * fixp) || fixp->fx_r_type == BFD_RELOC_ARM_LDR_PC_G0) return 1; + /* Always generate relocations against function symbols. */ + if (fixp->fx_r_type == BFD_RELOC_32 + && fixp->fx_addsy + && (symbol_get_bfdsym (fixp->fx_addsy)->flags & BSF_FUNCTION)) + return 1; + return generic_force_reloc (fixp); } diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 580dcd90ea7..3abddcd9204 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-12-01 Paul Brook + + * gas/arm/thumbrel.s: New test. + * gas/arm/thumbrel.d: New test. + 2006-11-30 Jan Beulich * gas/i386/intel.d: Adjust. diff --git a/gas/testsuite/gas/arm/thumbrel.d b/gas/testsuite/gas/arm/thumbrel.d new file mode 100644 index 00000000000..495360fe74e --- /dev/null +++ b/gas/testsuite/gas/arm/thumbrel.d @@ -0,0 +1,14 @@ +#objdump: -sr +# This test is only valid on ELF based ports. +#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* + +.*: file format.* + +RELOCATION RECORDS FOR \[.text\]: +OFFSET TYPE VALUE +00000004 R_ARM_REL32 b + +Contents of section .text: + 0000 00000000 (00000004|04000000) 00000000 00000000 .* +# Ignore .ARM.attributes section +#... diff --git a/gas/testsuite/gas/arm/thumbrel.s b/gas/testsuite/gas/arm/thumbrel.s new file mode 100644 index 00000000000..769da16156c --- /dev/null +++ b/gas/testsuite/gas/arm/thumbrel.s @@ -0,0 +1,11 @@ +@ Check that PC-relative relocs against local function symbols are +@ generated correctly. +.text +.thumb +a: +.word 0 +.word b - a +.word 0 +.word 0 +.type b, %function +b: