From d57a6823eff0cd356690e3ee37a7ca4f84c5e759 Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Fri, 1 Dec 2006 16:42:26 +0000 Subject: [PATCH] 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. --- gas/ChangeLog | 5 +++++ gas/config/tc-arm.c | 6 ++++++ gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/arm/thumbrel.d | 14 ++++++++++++++ gas/testsuite/gas/arm/thumbrel.s | 11 +++++++++++ 5 files changed, 41 insertions(+) create mode 100644 gas/testsuite/gas/arm/thumbrel.d create mode 100644 gas/testsuite/gas/arm/thumbrel.s diff --git a/gas/ChangeLog b/gas/ChangeLog index d8066c4f12..63750dba9c 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 8ea3ad198b..a7859dc373 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 580dcd90ea..3abddcd920 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 0000000000..495360fe74 --- /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 0000000000..769da16156 --- /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: -- 2.11.0