mirror of
https://github.com/intel/llvm.git
synced 2026-01-27 06:06:34 +08:00
[ELF] - Process R_X86_64_GOTPCRELX/R_X86_64_REX_GOTPCRELX relocations.
R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX relocations were added in latest ABI: https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-r249.pdf They should be generated instead of R_X86_64_GOTPCREL for cases when relaxation is possible. Currently this patch just process them in the same way like R_X86_64_GOTPCREL. That should work for now and we can implement relaxations later. There is no testcases provided as I think there is no way to generate such relocations using llvm-mc atm. Differential revision: http://reviews.llvm.org/D18301 llvm-svn: 264043
This commit is contained in:
@@ -736,7 +736,8 @@ bool X86_64TargetInfo::needsCopyRelImpl(uint32_t Type) const {
|
||||
}
|
||||
|
||||
bool X86_64TargetInfo::refersToGotEntry(uint32_t Type) const {
|
||||
return Type == R_X86_64_GOTPCREL;
|
||||
return Type == R_X86_64_GOTPCREL || Type == R_X86_64_GOTPCRELX ||
|
||||
Type == R_X86_64_REX_GOTPCRELX;
|
||||
}
|
||||
|
||||
bool X86_64TargetInfo::needsGot(uint32_t Type, SymbolBody &S) const {
|
||||
@@ -934,6 +935,8 @@ void X86_64TargetInfo::relocateOne(uint8_t *Loc, uint8_t *BufEnd, uint32_t Type,
|
||||
write32le(Loc, SA);
|
||||
break;
|
||||
case R_X86_64_GOTPCREL:
|
||||
case R_X86_64_GOTPCRELX:
|
||||
case R_X86_64_REX_GOTPCRELX:
|
||||
case R_X86_64_PC32:
|
||||
case R_X86_64_PLT32:
|
||||
case R_X86_64_TLSGD:
|
||||
|
||||
Reference in New Issue
Block a user