diff options
author | Bob Wilson <bob.wilson@acm.org> | 2004-04-27 22:47:56 +0000 |
---|---|---|
committer | Bob Wilson <bwilson@gcc.gnu.org> | 2004-04-27 22:47:56 +0000 |
commit | f1dfe7049d4c81118be3e7e53c007cce8be81021 (patch) | |
tree | 2d5f39671b0e3bd55cda95a52cefd60f46068e50 /gcc | |
parent | 80408cac1637c8452c3b9f3a227d701b9d40641f (diff) | |
download | gcc-f1dfe7049d4c81118be3e7e53c007cce8be81021.zip gcc-f1dfe7049d4c81118be3e7e53c007cce8be81021.tar.gz gcc-f1dfe7049d4c81118be3e7e53c007cce8be81021.tar.bz2 |
xtensa.c (call_insn_operand): Check SYMBOL_REF_EXTERNAL_P in addition to SYMBOL_REF_LOCAL_P.
* config/xtensa/xtensa.c (call_insn_operand): Check
SYMBOL_REF_EXTERNAL_P in addition to SYMBOL_REF_LOCAL_P.
* config/xtensa/xtensa.h (LEGITIMATE_PIC_OPERAND): Likewise.
* config/xtensa/xtensa.md (call, call_value): Likewise.
From-SVN: r81228
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/xtensa/xtensa.c | 3 | ||||
-rw-r--r-- | gcc/config/xtensa/xtensa.h | 3 | ||||
-rw-r--r-- | gcc/config/xtensa/xtensa.md | 6 |
4 files changed, 15 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7bd874a..b72cf39 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-04-27 Bob Wilson <bob.wilson@acm.org> + + * config/xtensa/xtensa.c (call_insn_operand): Check + SYMBOL_REF_EXTERNAL_P in addition to SYMBOL_REF_LOCAL_P. + * config/xtensa/xtensa.h (LEGITIMATE_PIC_OPERAND): Likewise. + * config/xtensa/xtensa.md (call, call_value): Likewise. + 2004-04-27 Wu Yongwei <adah@sh163.net> * gthr-win32.h (__gthread_mutex_t): Change typedef to new structure. diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c index 6c059ff..d110368 100644 --- a/gcc/config/xtensa/xtensa.c +++ b/gcc/config/xtensa/xtensa.c @@ -572,7 +572,8 @@ call_insn_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) { tree callee, callee_sec, caller_sec; - if (GET_CODE (op) != SYMBOL_REF || !SYMBOL_REF_LOCAL_P (op)) + if (GET_CODE (op) != SYMBOL_REF + || !SYMBOL_REF_LOCAL_P (op) || SYMBOL_REF_EXTERNAL_P (op)) return FALSE; /* Don't attempt a direct call if the callee is known to be in diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h index 3d2432b..d04560b 100644 --- a/gcc/config/xtensa/xtensa.h +++ b/gcc/config/xtensa/xtensa.h @@ -1060,7 +1060,8 @@ typedef struct xtensa_args operand on the target machine when generating position independent code. */ #define LEGITIMATE_PIC_OPERAND_P(X) \ - ((GET_CODE (X) != SYMBOL_REF || SYMBOL_REF_LOCAL_P (X)) \ + ((GET_CODE (X) != SYMBOL_REF \ + || (SYMBOL_REF_LOCAL_P (X) && !SYMBOL_REF_EXTERNAL_P (X))) \ && GET_CODE (X) != LABEL_REF \ && GET_CODE (X) != CONST) diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index 6e13568..0b557c1 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -1999,7 +1999,8 @@ "" { rtx addr = XEXP (operands[0], 0); - if (flag_pic && GET_CODE (addr) == SYMBOL_REF && !SYMBOL_REF_LOCAL_P (addr)) + if (flag_pic && GET_CODE (addr) == SYMBOL_REF + && (!SYMBOL_REF_LOCAL_P (addr) || SYMBOL_REF_EXTERNAL_P (addr))) addr = gen_sym_PLT (addr); if (!call_insn_operand (addr, VOIDmode)) XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, addr); @@ -2023,7 +2024,8 @@ "" { rtx addr = XEXP (operands[1], 0); - if (flag_pic && GET_CODE (addr) == SYMBOL_REF && !SYMBOL_REF_LOCAL_P (addr)) + if (flag_pic && GET_CODE (addr) == SYMBOL_REF + && (!SYMBOL_REF_LOCAL_P (addr) || SYMBOL_REF_EXTERNAL_P (addr))) addr = gen_sym_PLT (addr); if (!call_insn_operand (addr, VOIDmode)) XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, addr); |