From 5c3b36b9182aa333265603a74e8f70c1f9cde22a Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Thu, 11 May 2006 15:05:17 +0000 Subject: [PATCH] 2006-05-11 Paul Brook gas/ * config/tc-arm.c (arm_fix_adjustable): Return 0 for function symbols. gas/testsuite/ * gas/arm/local_function.d: New test. * gas/arm/local_function.s: New test. --- gas/ChangeLog | 4 ++++ gas/config/tc-arm.c | 10 +++++++--- gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/arm/local_function.d | 10 ++++++++++ gas/testsuite/gas/arm/local_function.s | 10 ++++++++++ 5 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 gas/testsuite/gas/arm/local_function.d create mode 100644 gas/testsuite/gas/arm/local_function.s diff --git a/gas/ChangeLog b/gas/ChangeLog index 54ac4a32a1..35a8dbedab 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,7 @@ +2006-05-11 Paul Brook + + * config/tc-arm.c (arm_fix_adjustable): Return 0 for function symbols. + 2006-05-11 Thiemo Seufer * config/tc-mips.c (append_insn): Don't check the range of j or diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 690f59f7bd..50940dc47e 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -17053,9 +17053,9 @@ arm_fix_adjustable (fixS * fixP) #endif #ifdef OBJ_ELF -/* Relocations against Thumb function names must be left unadjusted, - so that the linker can use this information to correctly set the - bottom bit of their addresses. The MIPS version of this function +/* Relocations against function names must be left unadjusted, + so that the linker can use this information to generate interworking + stubs. The MIPS version of this function also prevents relocations that are mips-16 specific, but I do not know why it does this. @@ -17072,6 +17072,10 @@ arm_fix_adjustable (fixS * fixP) if (fixP->fx_addsy == NULL) return 1; + /* Preserve relocations against symbols with function type. */ + if (symbol_get_bfdsym (fixP->fx_addsy)->flags & BSF_FUNCTION) + return 0; + if (THUMB_IS_FUNC (fixP->fx_addsy) && fixP->fx_subsy == NULL) return 0; diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 9ef3da9985..e9745b114e 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-05-11 Paul Brook + + * gas/arm/local_function.d: New test. + * gas/arm/local_function.s: New test. + 2006-05-11 Thiemo Seufer * gas/mips/jal-range.l: Don't check the range of j or jal diff --git a/gas/testsuite/gas/arm/local_function.d b/gas/testsuite/gas/arm/local_function.d new file mode 100644 index 0000000000..46da8eceb6 --- /dev/null +++ b/gas/testsuite/gas/arm/local_function.d @@ -0,0 +1,10 @@ +#objdump: -r +#name: Relocations agains local function symbols +# 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 +00000000 R_ARM_(CALL|PC24) bar diff --git a/gas/testsuite/gas/arm/local_function.s b/gas/testsuite/gas/arm/local_function.s new file mode 100644 index 0000000000..1d98a37425 --- /dev/null +++ b/gas/testsuite/gas/arm/local_function.s @@ -0,0 +1,10 @@ + .text + .type foo, %function +foo: + bl bar + + .section .text.bar + nop + .type bar, %function +bar: + nop -- 2.11.0