[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:
Michael J. Spencer 2015-09-05 00:36:03 +00:00
parent baae538cc6
commit 1b3fffa6e0
2 changed files with 35 additions and 0 deletions

View File

@ -271,8 +271,12 @@ template <class ELFT> void OutputSection<ELFT>::writeTo(uint8_t *Buf) {
SymVA + (RI.r_addend - (P + Offset)));
break;
case llvm::ELF::R_X86_64_32:
case llvm::ELF::R_X86_64_32S:
support::endian::write32le(Location, SymVA + RI.r_addend);
break;
case llvm::ELF::R_X86_64_64:
support::endian::write64le(Location, SymVA + RI.r_addend);
break;
default:
llvm::errs() << Twine("unrecognized reloc ") + Twine(Type) << '\n';
break;

View File

@ -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