diff options
author | Bob Wilson <bob.wilson@acm.org> | 2007-12-13 19:03:45 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@acm.org> | 2007-12-13 19:03:45 +0000 |
commit | 38f9cb7fe14013c49fff2ed04c3cf6406e7077e6 (patch) | |
tree | 3440ff2ed546b7d34ed84afeff334123e8b0f51d /gas | |
parent | 3690dd376bc19907f4c229fc3471b9898386d32c (diff) | |
download | gdb-38f9cb7fe14013c49fff2ed04c3cf6406e7077e6.zip gdb-38f9cb7fe14013c49fff2ed04c3cf6406e7077e6.tar.gz gdb-38f9cb7fe14013c49fff2ed04c3cf6406e7077e6.tar.bz2 |
gas/
* config/tc-xtensa.c (xg_symbolic_immeds_fit): Relax for weak
references but not weak definitions.
gas/testsuite/
* gas/xtensa/all.exp: Run new weak-call test.
* gas/xtensa/weak-call.d: New.
* gas/xtensa/weak-call.s: New.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-xtensa.c | 10 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/xtensa/all.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/xtensa/weak-call.d | 11 | ||||
-rw-r--r-- | gas/testsuite/gas/xtensa/weak-call.s | 8 |
6 files changed, 39 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 5748053..a68a38f 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2007-12-13 Bob Wilson <bob.wilson@acm.org> + + * config/tc-xtensa.c (xg_symbolic_immeds_fit): Relax for weak + references but not weak definitions. + 2007-12-12 Bob Wilson <bob.wilson@acm.org> * config/tc-xtensa.c (xg_symbolic_immeds_fit): Do not relax calls to diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c index 051f79f..e632ef3 100644 --- a/gas/config/tc-xtensa.c +++ b/gas/config/tc-xtensa.c @@ -3241,9 +3241,15 @@ xg_symbolic_immeds_fit (const TInsn *insn, || S_GET_SEGMENT (expr->X_add_symbol) != pc_seg) { /* For a direct call with --no-longcalls, be optimistic and - assume it will be in range. */ + assume it will be in range. If the symbol is weak and + undefined, it may remain undefined at link-time, in which + case it will have a zero value and almost certainly be out + of range for a direct call; thus, relax for undefined weak + symbols even if longcalls is not enabled. */ if (is_direct_call_opcode (insn->opcode) - && ! pc_frag->tc_frag_data.use_longcalls) + && ! pc_frag->tc_frag_data.use_longcalls + && (! S_IS_WEAK (expr->X_add_symbol) + || S_IS_DEFINED (expr->X_add_symbol))) return TRUE; return FALSE; diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 9de1854..c95d172 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2007-12-13 Bob Wilson <bob.wilson@acm.org> + + * gas/xtensa/all.exp: Run new weak-call test. + * gas/xtensa/weak-call.d: New. + * gas/xtensa/weak-call.s: New. + 2007-12-11 Catherine Moore <clm@codesourcery.com> gas/elf/symtab.s: New test. diff --git a/gas/testsuite/gas/xtensa/all.exp b/gas/testsuite/gas/xtensa/all.exp index d4b2493..85c0716 100644 --- a/gas/testsuite/gas/xtensa/all.exp +++ b/gas/testsuite/gas/xtensa/all.exp @@ -80,6 +80,7 @@ if [istarget xtensa*-*-*] then { run_dump_test "short_branch_offset" run_dump_test "pcrel" + run_dump_test "weak-call" } if [info exists errorInfo] then { diff --git a/gas/testsuite/gas/xtensa/weak-call.d b/gas/testsuite/gas/xtensa/weak-call.d new file mode 100644 index 0000000..0b8d84b --- /dev/null +++ b/gas/testsuite/gas/xtensa/weak-call.d @@ -0,0 +1,11 @@ +#as: +#objdump: -r -j .text +#name: relaxing calls to weak symbols + +.*: +file format .*xtensa.* + +RELOCATION RECORDS FOR \[\.text\]: +OFFSET TYPE VALUE +00000000 R_XTENSA_SLOT0_OP weakdef +00000003 R_XTENSA_SLOT0_OP \.literal +00000003 R_XTENSA_ASM_EXPAND weakref diff --git a/gas/testsuite/gas/xtensa/weak-call.s b/gas/testsuite/gas/xtensa/weak-call.s new file mode 100644 index 0000000..d6800c5 --- /dev/null +++ b/gas/testsuite/gas/xtensa/weak-call.s @@ -0,0 +1,8 @@ + .text + .begin no-longcalls + .weak weakdef + call8 weakdef +weakdef: + .weak weakref + call8 weakref + .end no-longcalls |