forked from OSchip/llvm-project
[elf2] Add 32S and 64 relocations (needed for musl).
It wasn't obvious what the assembly was to generate these relocations, so I did the test with yaml. llvm-svn: 246902
This commit is contained in:
parent
baae538cc6
commit
1b3fffa6e0
|
|
@ -271,8 +271,12 @@ template <class ELFT> void OutputSection<ELFT>::writeTo(uint8_t *Buf) {
|
||||||
SymVA + (RI.r_addend - (P + Offset)));
|
SymVA + (RI.r_addend - (P + Offset)));
|
||||||
break;
|
break;
|
||||||
case llvm::ELF::R_X86_64_32:
|
case llvm::ELF::R_X86_64_32:
|
||||||
|
case llvm::ELF::R_X86_64_32S:
|
||||||
support::endian::write32le(Location, SymVA + RI.r_addend);
|
support::endian::write32le(Location, SymVA + RI.r_addend);
|
||||||
break;
|
break;
|
||||||
|
case llvm::ELF::R_X86_64_64:
|
||||||
|
support::endian::write64le(Location, SymVA + RI.r_addend);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
llvm::errs() << Twine("unrecognized reloc ") + Twine(Type) << '\n';
|
llvm::errs() << Twine("unrecognized reloc ") + Twine(Type) << '\n';
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
# RUN: yaml2obj -format elf %s -o %t
|
||||||
|
# RUN: lld -flavor gnu2 %t -o %tout
|
||||||
|
# RUN: llvm-objdump -s %tout | FileCheck %s
|
||||||
|
|
||||||
|
FileHeader:
|
||||||
|
Class: ELFCLASS64
|
||||||
|
Data: ELFDATA2LSB
|
||||||
|
Type: ET_REL
|
||||||
|
Machine: EM_X86_64
|
||||||
|
Sections:
|
||||||
|
- Name: .text
|
||||||
|
Type: SHT_PROGBITS
|
||||||
|
Size: 512
|
||||||
|
- Name: .rela.text
|
||||||
|
Type: SHT_RELA
|
||||||
|
Info: .text
|
||||||
|
Relocations:
|
||||||
|
- Offset: 0x0000000000000000
|
||||||
|
Symbol: _start
|
||||||
|
Type: R_X86_64_32S
|
||||||
|
- Offset: 0x0000000000000004
|
||||||
|
Symbol: _start
|
||||||
|
Type: R_X86_64_64
|
||||||
|
|
||||||
|
Symbols:
|
||||||
|
Global:
|
||||||
|
- Name: _start
|
||||||
|
Section: .text
|
||||||
|
Value: 0x42
|
||||||
|
|
||||||
|
# CHECK: 0000 42000000 42000000 00000000 00000000
|
||||||
Loading…
Reference in New Issue