diff options
| author | Simon Atanasyan <simon@atanasyan.com> | 2014-04-11 04:13:39 +0000 |
|---|---|---|
| committer | Simon Atanasyan <simon@atanasyan.com> | 2014-04-11 04:13:39 +0000 |
| commit | 42ac0dd3c35c9e2fedcfaeb4814776789bbcdaec (patch) | |
| tree | 00b959cdd63eee8dd504727fe7820217feb01a03 /llvm/test/Object | |
| parent | ceec2bdaa52186b0bf92a6efe1545d093d70eb60 (diff) | |
| download | bcm5719-llvm-42ac0dd3c35c9e2fedcfaeb4814776789bbcdaec.tar.gz bcm5719-llvm-42ac0dd3c35c9e2fedcfaeb4814776789bbcdaec.zip | |
[yaml2obj][ELF] ELF Relocations Support.
The patch implements support for both relocation record formats: Elf_Rel
and Elf_Rela. It is possible to define relocation against symbol only.
Relocations against sections will be implemented later. Now yaml2obj
recognizes X86_64, MIPS and Hexagon relocation types.
Example of relocation section specification:
Sections:
- Name: .text
Type: SHT_PROGBITS
Content: "0000000000000000"
AddressAlign: 16
Flags: [SHF_ALLOC]
- Name: .rel.text
Type: SHT_REL
Info: .text
AddressAlign: 4
Relocations:
- Offset: 0x1
Symbol: glob1
Type: R_MIPS_32
- Offset: 0x2
Symbol: glob2
Type: R_MIPS_CALL16
The patch reviewed by Michael Spencer, Sean Silva, Shankar Easwaran.
llvm-svn: 206017
Diffstat (limited to 'llvm/test/Object')
| -rw-r--r-- | llvm/test/Object/yaml2obj-elf-rel.yaml | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/llvm/test/Object/yaml2obj-elf-rel.yaml b/llvm/test/Object/yaml2obj-elf-rel.yaml new file mode 100644 index 00000000000..121a533b8cb --- /dev/null +++ b/llvm/test/Object/yaml2obj-elf-rel.yaml @@ -0,0 +1,118 @@ +# RUN: yaml2obj -format=elf %s | llvm-readobj -sections -relocations - | FileCheck %s + +!ELF +FileHeader: !FileHeader + Class: ELFCLASS32 + Data: ELFDATA2MSB + Type: ET_REL + Machine: EM_MIPS + +Sections: +- Name: .text + Type: SHT_PROGBITS + Content: "0000000000000000" + AddressAlign: 16 + Flags: [SHF_ALLOC] + +- Name: .rel.text + Type: SHT_REL + Info: .text + AddressAlign: 4 + Relocations: + - Offset: 0x1 + Symbol: glob1 + Type: R_MIPS_32 + - Offset: 0x1 + Symbol: glob2 + Type: R_MIPS_CALL16 + - Offset: 0x2 + Symbol: loc1 + Type: R_MIPS_LO16 + +- Name: .rela.text + Type: SHT_RELA + Link: .symtab + Info: .text + AddressAlign: 4 + Relocations: + - Offset: 0x1 + Addend: 1 + Symbol: glob1 + Type: R_MIPS_32 + - Offset: 0x1 + Addend: 2 + Symbol: glob2 + Type: R_MIPS_CALL16 + - Offset: 0x2 + Addend: 3 + Symbol: loc1 + Type: R_MIPS_LO16 + +Symbols: + Local: + - Name: loc1 + - Name: loc2 + Global: + - Name: glob1 + Section: .text + Value: 0x0 + Size: 4 + - Name: glob2 + Weak: + - Name: weak1 + +# CHECK: Section { +# CHECK-NEXT: Index: 0 +# CHECK: } +# CHECK: Section { +# CHECK-NEXT: Index: 1 +# CHECK-NEXT: Name: .text (1) +# CHECK: } +# CHECK-NEXT: Section { +# CHECK-NEXT: Index: 2 +# CHECK-NEXT: Name: .rel.text (7) +# CHECK-NEXT: Type: SHT_REL (0x9) +# CHECK-NEXT: Flags [ (0x0) +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x0 +# CHECK-NEXT: Offset: 0x160 +# CHECK-NEXT: Size: 24 +# CHECK-NEXT: Link: 4 +# CHECK-NEXT: Info: 1 +# CHECK-NEXT: AddressAlignment: 4 +# CHECK-NEXT: EntrySize: 8 +# CHECK-NEXT: } +# CHECK-NEXT: Section { +# CHECK-NEXT: Index: 3 +# CHECK-NEXT: Name: .rela.text (17) +# CHECK-NEXT: Type: SHT_RELA (0x4) +# CHECK-NEXT: Flags [ (0x0) +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x0 +# CHECK-NEXT: Offset: 0x180 +# CHECK-NEXT: Size: 36 +# CHECK-NEXT: Link: 4 +# CHECK-NEXT: Info: 1 +# CHECK-NEXT: AddressAlignment: 4 +# CHECK-NEXT: EntrySize: 12 +# CHECK-NEXT: } +# CHECK-NEXT: Section { +# CHECK-NEXT: Index: 4 +# CHECK-NEXT: Name: .symtab (28) +# CHECK: } +# CHECK-NEXT: Section { +# CHECK-NEXT: Index: 5 +# CHECK-NEXT: Name: .strtab (36) +# CHECK: } +# CHECK: Relocations [ +# CHECK-NEXT: Section (2) .rel.text { +# CHECK-NEXT: 0x1 R_MIPS_32 glob1 0x0 +# CHECK-NEXT: 0x1 R_MIPS_CALL16 glob2 0x0 +# CHECK-NEXT: 0x2 R_MIPS_LO16 loc1 0x0 +# CHECK-NEXT: } +# CHECK-NEXT: Section (3) .rela.text { +# CHECK-NEXT: 0x1 R_MIPS_32 glob1 0x1 +# CHECK-NEXT: 0x1 R_MIPS_CALL16 glob2 0x2 +# CHECK-NEXT: 0x2 R_MIPS_LO16 loc1 0x3 +# CHECK-NEXT: } +# CHECK-NEXT: ] |

