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/config/tc-xtensa.c | |
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/config/tc-xtensa.c')
-rw-r--r-- | gas/config/tc-xtensa.c | 10 |
1 files changed, 8 insertions, 2 deletions
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; |