mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-17 17:06:59 +00:00
Don't relocate with sections if there might be a paired relocation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205240 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1c056d8be9
commit
c298307ae6
@ -880,6 +880,9 @@ enum {
|
||||
R_MIPS_TLS_TPREL_HI16 = 49,
|
||||
R_MIPS_TLS_TPREL_LO16 = 50,
|
||||
R_MIPS_GLOB_DAT = 51,
|
||||
R_MIPS16_GOT16 = 102,
|
||||
R_MIPS16_HI16 = 104,
|
||||
R_MIPS16_LO16 = 105,
|
||||
R_MIPS_COPY = 126,
|
||||
R_MIPS_JUMP_SLOT = 127,
|
||||
R_MICROMIPS_26_S1 = 133,
|
||||
|
@ -206,9 +206,25 @@ MipsELFObjectWriter::needsRelocateWithSymbol(unsigned Type) const {
|
||||
default:
|
||||
return true;
|
||||
|
||||
case ELF::R_MIPS_26:
|
||||
case ELF::R_MIPS_LO16:
|
||||
case ELF::R_MIPS_GOT16:
|
||||
case ELF::R_MIPS16_GOT16:
|
||||
case ELF::R_MICROMIPS_GOT16:
|
||||
llvm_unreachable("Should have been handled already");
|
||||
|
||||
// These relocations might be paired with another relocation. The pairing is
|
||||
// done by the static linker by matching the symbol. Since we only see one
|
||||
// relocation at a time, we have to force them to relocate with a symbol to
|
||||
// avoid ending up with a pair where one points to a section and another
|
||||
// points to a symbol.
|
||||
case ELF::R_MIPS_HI16:
|
||||
case ELF::R_MIPS16_HI16:
|
||||
case ELF::R_MICROMIPS_HI16:
|
||||
case ELF::R_MIPS_LO16:
|
||||
case ELF::R_MIPS16_LO16:
|
||||
case ELF::R_MICROMIPS_LO16:
|
||||
return true;
|
||||
|
||||
case ELF::R_MIPS_26:
|
||||
case ELF::R_MIPS_32:
|
||||
case ELF::R_MIPS_64:
|
||||
case ELF::R_MIPS_GPREL16:
|
||||
|
@ -11,7 +11,7 @@
|
||||
// CHECK: 0x24 R_MIPS_CALL_HI16 printf
|
||||
// CHECK: 0x2C R_MIPS_GOT16 $.str
|
||||
// CHECK: 0x30 R_MIPS_CALL_LO16 printf
|
||||
// CHECK: 0x38 R_MIPS_LO16 .rodata.str1.1
|
||||
// CHECK: 0x38 R_MIPS_LO16 $.str
|
||||
// CHECK: ]
|
||||
|
||||
.text
|
||||
|
Loading…
Reference in New Issue
Block a user