| # RUN: yaml2obj --docnum=1 %s -o %t |
| # RUN: llvm-readobj -r %t | FileCheck %s --check-prefix=LLVM --match-full-lines |
| # RUN: llvm-readelf -r %t | FileCheck %s --check-prefix=GNU --match-full-lines |
| |
| # LLVM: Relocations [ |
| # LLVM-NEXT: Section ([[#]]) .crel.text { |
| # LLVM-NEXT: 0x1 R_X86_64_32 g1 0x1 |
| # LLVM-NEXT: 0x2 R_X86_64_64 l1 0x2 |
| # LLVM-NEXT: 0x0 R_X86_64_32S g1 0xFFFFFFFFFFFFFFFF |
| # LLVM-NEXT: 0x4 R_X86_64_32S .text 0x8000000000000000 |
| # LLVM-NEXT: } |
| # LLVM-NEXT: Section ([[#]]) .crelnonalloc { |
| # LLVM-NEXT: 0x10 R_X86_64_64 g1 0x1 |
| # LLVM-NEXT: 0x20 R_X86_64_64 g2 0x2 |
| # LLVM-NEXT: } |
| # LLVM-NEXT: ] |
| |
| # GNU: Relocation section '.crel.text' at offset 0x48 contains 4 entries: |
| # GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend |
| # GNU-NEXT: 0000000000000001 000000030000000a R_X86_64_32 0000000000000000 g1 + 1 |
| # GNU-NEXT: 0000000000000002 0000000200000001 R_X86_64_64 0000000000000000 l1 + 2 |
| # GNU-NEXT: 0000000000000000 000000030000000b R_X86_64_32S 0000000000000000 g1 - 1 |
| # GNU-NEXT: 0000000000000004 000000010000000b R_X86_64_32S 0000000000000000 .text - 8000000000000000 |
| # GNU-EMPTY: |
| # GNU-NEXT: Relocation section '.crelnonalloc' at offset 0xa2 contains 2 entries: |
| # GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend |
| # GNU-NEXT: 0000000000000010 0000000300000001 R_X86_64_64 0000000000000000 g1 + 1 |
| # GNU-NEXT: 0000000000000020 0000000400000001 R_X86_64_64 0000000000000000 g2 + 2 |
| |
| --- !ELF |
| FileHeader: !FileHeader |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_REL |
| Machine: EM_X86_64 |
| |
| Sections: |
| - Name: .text |
| Type: SHT_PROGBITS |
| Content: "0000000000000000" |
| Flags: [SHF_ALLOC] |
| - Name: .crel.text |
| Type: SHT_CREL |
| Info: .text |
| Link: .symtab |
| Relocations: |
| - Offset: 0x1 |
| Symbol: g1 |
| Type: R_X86_64_32 |
| Addend: 1 |
| - Offset: 0x2 |
| Symbol: l1 |
| Type: R_X86_64_64 |
| Addend: 2 |
| - Offset: 0x0 |
| Symbol: g1 |
| Type: R_X86_64_32S |
| Addend: 0xffffffffffffffff |
| - Offset: 0x4 |
| Symbol: .text |
| Type: R_X86_64_32S |
| Addend: 0x8000000000000000 |
| - Name: nonalloc |
| Type: SHT_PROGBITS |
| Size: 0x30 |
| - Name: .crelnonalloc |
| Type: SHT_CREL |
| Info: nonalloc |
| Link: .symtab |
| Relocations: |
| - Offset: 0x10 |
| Symbol: g1 |
| Type: R_X86_64_64 |
| Addend: 1 |
| - Offset: 0x20 |
| Symbol: g2 |
| Type: R_X86_64_64 |
| Addend: 2 |
| |
| Symbols: |
| - Name: .text |
| Type: STT_SECTION |
| Section: .text |
| - Name: l1 |
| - Name: g1 |
| Section: .text |
| Value: 0x0 |
| Size: 4 |
| Binding: STB_GLOBAL |
| - Name: g2 |
| Binding: STB_GLOBAL |
| |
| ## Check relocation formatting on ELFCLASS32 as well. |
| # RUN: yaml2obj --docnum=2 %s -o %t2 |
| # RUN: llvm-readobj -r %t2 | FileCheck %s --check-prefix=LLVM2 --match-full-lines |
| # RUN: llvm-readelf -r %t2 | FileCheck %s --check-prefix=GNU2 --match-full-lines |
| |
| # LLVM2: Relocations [ |
| # LLVM2-NEXT: Section (2) .crel.text { |
| # LLVM2-NEXT: 0x8 R_386_PC32 l1 0x1 |
| # LLVM2-NEXT: 0x4 R_386_32 g1 0x0 |
| # LLVM2-NEXT: } |
| # LLVM2-NEXT: ] |
| |
| # GNU2: Relocation section '.crel.text' at offset {{.*}} contains 2 entries: |
| # GNU2-NEXT: Offset Info Type Sym. Value Symbol's Name + Addend |
| # GNU2-NEXT: 00000008 00000102 R_386_PC32 00000000 l1 + 1 |
| # GNU2-NEXT: 00000004 00000201 R_386_32 00000000 g1 + 0 |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS32 |
| Data: ELFDATA2LSB |
| Type: ET_REL |
| Machine: EM_386 |
| Sections: |
| - Name: .text |
| Type: SHT_PROGBITS |
| Size: 0x10 |
| - Name: .crel.text |
| Type: SHT_CREL |
| Info: .text |
| Link: .symtab |
| Relocations: |
| - Offset: 0x8 |
| Symbol: l1 |
| Type: R_386_PC32 |
| Addend: 1 |
| - Offset: 0x4 |
| Symbol: g1 |
| Type: R_386_32 |
| Symbols: |
| - Name: l1 |
| - Name: g1 |
| Binding: STB_GLOBAL |
| |
| ## Check CREL with implicit addends. |
| # RUN: yaml2obj --docnum=3 %s -o %t3 |
| # RUN: llvm-readobj -r %t3 | FileCheck %s --check-prefix=LLVM3 --match-full-lines |
| # RUN: llvm-readelf -r %t3 | FileCheck %s --check-prefix=GNU3 --match-full-lines |
| |
| # LLVM3: Relocations [ |
| # LLVM3-NEXT: Section (3) .crel.data { |
| # LLVM3-NEXT: 0x1F R_X86_64_32 g1 |
| # LLVM3-NEXT: 0x3F R_X86_64_64 g1 |
| # LLVM3-NEXT: 0x0 R_X86_64_32S l1 |
| # LLVM3-NEXT: } |
| # LLVM3-NEXT: ] |
| |
| # GNU3: Relocation section '.crel.data' at offset {{.*}} contains 3 entries: |
| # GNU3-NEXT: Offset Info Type Symbol's Value Symbol's Name |
| # GNU3-NEXT: 000000000000001f 000000030000000a R_X86_64_32 0000000000000000 g1 |
| # GNU3-NEXT: 000000000000003f 0000000300000001 R_X86_64_64 0000000000000000 g1 |
| # GNU3-NEXT: 0000000000000000 000000020000000b R_X86_64_32S 0000000000000000 l1 |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_REL |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .text |
| Type: SHT_PROGBITS |
| - Name: .data |
| Type: SHT_PROGBITS |
| - Name: .crel.data |
| Type: SHT_CREL |
| Flags: [ SHF_INFO_LINK ] |
| Link: .symtab |
| Info: .data |
| Content: 187f030a82017787feffffffffffffff077f0a |
| Symbols: |
| - Name: .text |
| Type: STT_SECTION |
| Section: .text |
| - Name: l1 |
| Section: .text |
| - Name: g1 |
| Section: .text |
| Binding: STB_GLOBAL |
| |
| ## Test errors. See also relocation-errors.test. |
| # RUN: yaml2obj --docnum=4 %s -o %t.err |
| # RUN: llvm-readobj -r %t.err 2>&1 | FileCheck %s --check-prefix=ERR-LLVM -DFILE=%t.err |
| # RUN: llvm-readelf -r %t.err 2>&1 | FileCheck %s --check-prefix=ERR-GNU -DFILE=%t.err |
| |
| # ERR-LLVM: Section ([[#]]) .crel.data { |
| # ERR-LLVM-NEXT: warning: '[[FILE]]': unable to read relocations from SHT_CREL section with index 3: unable to decode LEB128 at offset 0x00000000: malformed uleb128, extends past end |
| # ERR-LLVM-NEXT: } |
| |
| # ERR-GNU: warning: '[[FILE]]': unable to get the number of relocations in SHT_CREL section with index 3: unable to decode LEB128 at offset 0x00000000: malformed uleb128, extends past end |
| # ERR-GNU-EMPTY: |
| # ERR-GNU-NEXT: Relocation section '.crel.data' at offset 0x40 contains <?> entries: |
| # ERR-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name |
| # ERR-GNU-NOT: {{.}} |
| |
| # RUN: yaml2obj --docnum=4 -DCONTENT=08 %s -o %t.err2 |
| # RUN: llvm-readobj -r %t.err2 2>&1 | FileCheck %s --check-prefix=ERR2-LLVM -DFILE=%t.err2 |
| # RUN: llvm-readelf -r %t.err2 2>&1 | FileCheck %s --check-prefix=ERR2-GNU -DFILE=%t.err2 |
| |
| # ERR2-LLVM: Section ([[#]]) .crel.data { |
| # ERR2-LLVM-NEXT: warning: '[[FILE]]': unable to read relocations from SHT_CREL section with index 3: unexpected end of data at offset 0x1 while reading [0x1, 0x2) |
| # ERR2-LLVM-NEXT: } |
| |
| # ERR2-GNU: Relocation section '.crel.data' at offset 0x40 contains 1 entries: |
| # ERR2-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name |
| # ERR2-GNU: warning: '[[FILE]]': unable to read relocations from SHT_CREL section with index 3: unexpected end of data at offset 0x1 while reading [0x1, 0x2) |
| # ERR2-GNU-NOT: {{.}} |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_REL |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .text |
| Type: SHT_PROGBITS |
| - Name: .data |
| Type: SHT_PROGBITS |
| - Name: .crel.data |
| Type: SHT_CREL |
| Flags: [] |
| Link: .symtab |
| Info: .data |
| Content: [[CONTENT=""]] |
| Symbols: |
| - Name: .text |
| Type: STT_SECTION |
| Section: .text |