[SPARC] Add llvm-readobj support, update ELF reloc types and dynamic tags. (#137916)

Values sourced from binutils.
This commit is contained in:
Alex Rønne Petersen authored and GitHub committed 2025-05-05 17:39:31 +02:00
1 parent 44856d957e
commit 4418a8e5ef
5 files changed
+257

No files matched your search

@@ -36,6 +36,11 @@
#define RISCV_DYNAMIC_TAG_DEFINED
#endif
#ifndef SPARC_DYNAMIC_TAG
#define SPARC_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
#define SPARC_DYNAMIC_TAG_DEFINED
#endif
#ifndef DYNAMIC_TAG_MARKER
#define DYNAMIC_TAG_MARKER(name, value) DYNAMIC_TAG(name, value)
#define DYNAMIC_TAG_MARKER_DEFINED
@@ -239,6 +244,10 @@ PPC64_DYNAMIC_TAG(PPC64_OPT, 0x70000003) // Flags to control optimizations
// RISC-V specific dynamic array tags.
RISCV_DYNAMIC_TAG(RISCV_VARIANT_CC, 0x70000001)
// SPARC specific dynamic table entry tags.
SPARC_DYNAMIC_TAG(SPARC_REGISTER, 0x70000001)
// Sun machine-independent extensions.
DYNAMIC_TAG(AUXILIARY, 0x7FFFFFFD) // Shared object to load before self
DYNAMIC_TAG(USED, 0x7FFFFFFE) // Same as DT_NEEDED
@@ -87,3 +87,8 @@ ELF_RELOC(R_SPARC_GOTDATA_LOX10, 81)
ELF_RELOC(R_SPARC_GOTDATA_OP_HIX22, 82)
ELF_RELOC(R_SPARC_GOTDATA_OP_LOX10, 83)
ELF_RELOC(R_SPARC_GOTDATA_OP, 84)
ELF_RELOC(R_SPARC_H34, 85)
ELF_RELOC(R_SPARC_SIZE32, 86)
ELF_RELOC(R_SPARC_SIZE64, 87)
ELF_RELOC(R_SPARC_WDISP10, 88)
ELF_RELOC(R_SPARC_IRELATIVE, 249)
+10
View File
@@ -953,6 +953,9 @@ void ScalarEnumerationTraits<ELFYAML::ELF_REL>::enumeration(
case ELF::EM_PPC64:
#include "llvm/BinaryFormat/ELFRelocs/PowerPC64.def"
break;
case ELF::EM_SPARCV9:
#include "llvm/BinaryFormat/ELFRelocs/Sparc.def"
break;
case ELF::EM_68K:
#include "llvm/BinaryFormat/ELFRelocs/M68k.def"
break;
@@ -1029,6 +1032,13 @@ void ScalarEnumerationTraits<ELFYAML::ELF_DYNTAG>::enumeration(
#undef RISCV_DYNAMIC_TAG
#define RISCV_DYNAMIC_TAG(name, value)
break;
case ELF::EM_SPARCV9:
#undef SPARC_DYNAMIC_TAG
#define SPARC_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
#include "llvm/BinaryFormat/DynamicTags.def"
#undef SPARC_DYNAMIC_TAG
#define SPARC_DYNAMIC_TAG(name, value)
break;
default:
#include "llvm/BinaryFormat/DynamicTags.def"
break;
@@ -445,3 +445,41 @@ ProgramHeaders:
- Type: PT_DYNAMIC
FirstSec: .dynamic
LastSec: .dynamic
## Case 7: Test that SPARCV9 machine-specific tags can be dumped.
# RUN: yaml2obj --docnum=7 %s -o %t.sparcv9
# RUN: llvm-readobj --dynamic-table %t.sparcv9 | FileCheck %s --check-prefix=LLVM-SPARCV9
# RUN: llvm-readelf --dynamic-table %t.sparcv9 | FileCheck %s --check-prefix=GNU-SPARCV9
# LLVM-SPARCV9: DynamicSection [ (2 entries)
# LLVM-SPARCV9-NEXT: Tag Type Name/Value
# LLVM-SPARCV9-NEXT: 0x0000000070000001 SPARC_REGISTER 0x12345
# LLVM-SPARCV9-NEXT: 0x0000000000000000 NULL 0x0
# LLVM-SPARCV9-NEXT: ]
# GNU-SPARCV9: Dynamic section at offset {{.*}} contains 2 entries:
# GNU-SPARCV9-NEXT: Tag Type Name/Value
# GNU-SPARCV9-NEXT: 0x0000000070000001 (SPARC_REGISTER) 0x12345
# GNU-SPARCV9-NEXT: 0x0000000000000000 (NULL) 0x0
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2MSB
Type: ET_EXEC
Machine: EM_SPARCV9
Sections:
- Name: .dynamic
Type: SHT_DYNAMIC
Entries:
- Tag: DT_SPARC_REGISTER
Value: 0x12345
- Tag: DT_NULL
Value: 0
ProgramHeaders:
- Type: PT_LOAD
FirstSec: .dynamic
LastSec: .dynamic
- Type: PT_DYNAMIC
FirstSec: .dynamic
LastSec: .dynamic
@@ -0,0 +1,195 @@
## Test that llvm-readobj shows proper relocation type
## names and values for sparcv9 target.
# RUN: yaml2obj %s -o %t-sparcv9.o
# RUN: llvm-readobj -r --expand-relocs %t-sparcv9.o | FileCheck %s
# CHECK: Type: R_SPARC_NONE (0)
# CHECK: Type: R_SPARC_8 (1)
# CHECK: Type: R_SPARC_16 (2)
# CHECK: Type: R_SPARC_32 (3)
# CHECK: Type: R_SPARC_DISP8 (4)
# CHECK: Type: R_SPARC_DISP16 (5)
# CHECK: Type: R_SPARC_DISP32 (6)
# CHECK: Type: R_SPARC_WDISP30 (7)
# CHECK: Type: R_SPARC_WDISP22 (8)
# CHECK: Type: R_SPARC_HI22 (9)
# CHECK: Type: R_SPARC_22 (10)
# CHECK: Type: R_SPARC_13 (11)
# CHECK: Type: R_SPARC_LO10 (12)
# CHECK: Type: R_SPARC_GOT10 (13)
# CHECK: Type: R_SPARC_GOT13 (14)
# CHECK: Type: R_SPARC_GOT22 (15)
# CHECK: Type: R_SPARC_PC10 (16)
# CHECK: Type: R_SPARC_PC22 (17)
# CHECK: Type: R_SPARC_WPLT30 (18)
# CHECK: Type: R_SPARC_COPY (19)
# CHECK: Type: R_SPARC_GLOB_DAT (20)
# CHECK: Type: R_SPARC_JMP_SLOT (21)
# CHECK: Type: R_SPARC_RELATIVE (22)
# CHECK: Type: R_SPARC_UA32 (23)
# CHECK: Type: R_SPARC_PLT32 (24)
# CHECK: Type: R_SPARC_HIPLT22 (25)
# CHECK: Type: R_SPARC_LOPLT10 (26)
# CHECK: Type: R_SPARC_PCPLT32 (27)
# CHECK: Type: R_SPARC_PCPLT22 (28)
# CHECK: Type: R_SPARC_PCPLT10 (29)
# CHECK: Type: R_SPARC_10 (30)
# CHECK: Type: R_SPARC_11 (31)
# CHECK: Type: R_SPARC_64 (32)
# CHECK: Type: R_SPARC_OLO10 (33)
# CHECK: Type: R_SPARC_HH22 (34)
# CHECK: Type: R_SPARC_HM10 (35)
# CHECK: Type: R_SPARC_LM22 (36)
# CHECK: Type: R_SPARC_PC_HH22 (37)
# CHECK: Type: R_SPARC_PC_HM10 (38)
# CHECK: Type: R_SPARC_PC_LM22 (39)
# CHECK: Type: R_SPARC_WDISP16 (40)
# CHECK: Type: R_SPARC_WDISP19 (41)
# CHECK: Type: R_SPARC_7 (43)
# CHECK: Type: R_SPARC_5 (44)
# CHECK: Type: R_SPARC_6 (45)
# CHECK: Type: R_SPARC_DISP64 (46)
# CHECK: Type: R_SPARC_PLT64 (47)
# CHECK: Type: R_SPARC_HIX22 (48)
# CHECK: Type: R_SPARC_LOX10 (49)
# CHECK: Type: R_SPARC_H44 (50)
# CHECK: Type: R_SPARC_M44 (51)
# CHECK: Type: R_SPARC_L44 (52)
# CHECK: Type: R_SPARC_REGISTER (53)
# CHECK: Type: R_SPARC_UA64 (54)
# CHECK: Type: R_SPARC_UA16 (55)
# CHECK: Type: R_SPARC_TLS_GD_HI22 (56)
# CHECK: Type: R_SPARC_TLS_GD_LO10 (57)
# CHECK: Type: R_SPARC_TLS_GD_ADD (58)
# CHECK: Type: R_SPARC_TLS_GD_CALL (59)
# CHECK: Type: R_SPARC_TLS_LDM_HI22 (60)
# CHECK: Type: R_SPARC_TLS_LDM_LO10 (61)
# CHECK: Type: R_SPARC_TLS_LDM_ADD (62)
# CHECK: Type: R_SPARC_TLS_LDM_CALL (63)
# CHECK: Type: R_SPARC_TLS_LDO_HIX22 (64)
# CHECK: Type: R_SPARC_TLS_LDO_LOX10 (65)
# CHECK: Type: R_SPARC_TLS_LDO_ADD (66)
# CHECK: Type: R_SPARC_TLS_IE_HI22 (67)
# CHECK: Type: R_SPARC_TLS_IE_LO10 (68)
# CHECK: Type: R_SPARC_TLS_IE_LD (69)
# CHECK: Type: R_SPARC_TLS_IE_LDX (70)
# CHECK: Type: R_SPARC_TLS_IE_ADD (71)
# CHECK: Type: R_SPARC_TLS_LE_HIX22 (72)
# CHECK: Type: R_SPARC_TLS_LE_LOX10 (73)
# CHECK: Type: R_SPARC_TLS_DTPMOD32 (74)
# CHECK: Type: R_SPARC_TLS_DTPMOD64 (75)
# CHECK: Type: R_SPARC_TLS_DTPOFF32 (76)
# CHECK: Type: R_SPARC_TLS_DTPOFF64 (77)
# CHECK: Type: R_SPARC_TLS_TPOFF32 (78)
# CHECK: Type: R_SPARC_TLS_TPOFF64 (79)
# CHECK: Type: R_SPARC_GOTDATA_HIX22 (80)
# CHECK: Type: R_SPARC_GOTDATA_LOX10 (81)
# CHECK: Type: R_SPARC_GOTDATA_OP_HIX22 (82)
# CHECK: Type: R_SPARC_GOTDATA_OP_LOX10 (83)
# CHECK: Type: R_SPARC_GOTDATA_OP (84)
# CHECK: Type: R_SPARC_H34 (85)
# CHECK: Type: R_SPARC_SIZE32 (86)
# CHECK: Type: R_SPARC_SIZE64 (87)
# CHECK: Type: R_SPARC_WDISP10 (88)
# CHECK: Type: R_SPARC_IRELATIVE (249)
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2MSB
Type: ET_REL
Machine: EM_SPARCV9
Sections:
- Name: .rela.text
Type: SHT_RELA
Relocations:
- Type: R_SPARC_NONE
- Type: R_SPARC_8
- Type: R_SPARC_16
- Type: R_SPARC_32
- Type: R_SPARC_DISP8
- Type: R_SPARC_DISP16
- Type: R_SPARC_DISP32
- Type: R_SPARC_WDISP30
- Type: R_SPARC_WDISP22
- Type: R_SPARC_HI22
- Type: R_SPARC_22
- Type: R_SPARC_13
- Type: R_SPARC_LO10
- Type: R_SPARC_GOT10
- Type: R_SPARC_GOT13
- Type: R_SPARC_GOT22
- Type: R_SPARC_PC10
- Type: R_SPARC_PC22
- Type: R_SPARC_WPLT30
- Type: R_SPARC_COPY
- Type: R_SPARC_GLOB_DAT
- Type: R_SPARC_JMP_SLOT
- Type: R_SPARC_RELATIVE
- Type: R_SPARC_UA32
- Type: R_SPARC_PLT32
- Type: R_SPARC_HIPLT22
- Type: R_SPARC_LOPLT10
- Type: R_SPARC_PCPLT32
- Type: R_SPARC_PCPLT22
- Type: R_SPARC_PCPLT10
- Type: R_SPARC_10
- Type: R_SPARC_11
- Type: R_SPARC_64
- Type: R_SPARC_OLO10
- Type: R_SPARC_HH22
- Type: R_SPARC_HM10
- Type: R_SPARC_LM22
- Type: R_SPARC_PC_HH22
- Type: R_SPARC_PC_HM10
- Type: R_SPARC_PC_LM22
- Type: R_SPARC_WDISP16
- Type: R_SPARC_WDISP19
- Type: R_SPARC_7
- Type: R_SPARC_5
- Type: R_SPARC_6
- Type: R_SPARC_DISP64
- Type: R_SPARC_PLT64
- Type: R_SPARC_HIX22
- Type: R_SPARC_LOX10
- Type: R_SPARC_H44
- Type: R_SPARC_M44
- Type: R_SPARC_L44
- Type: R_SPARC_REGISTER
- Type: R_SPARC_UA64
- Type: R_SPARC_UA16
- Type: R_SPARC_TLS_GD_HI22
- Type: R_SPARC_TLS_GD_LO10
- Type: R_SPARC_TLS_GD_ADD
- Type: R_SPARC_TLS_GD_CALL
- Type: R_SPARC_TLS_LDM_HI22
- Type: R_SPARC_TLS_LDM_LO10
- Type: R_SPARC_TLS_LDM_ADD
- Type: R_SPARC_TLS_LDM_CALL
- Type: R_SPARC_TLS_LDO_HIX22
- Type: R_SPARC_TLS_LDO_LOX10
- Type: R_SPARC_TLS_LDO_ADD
- Type: R_SPARC_TLS_IE_HI22
- Type: R_SPARC_TLS_IE_LO10
- Type: R_SPARC_TLS_IE_LD
- Type: R_SPARC_TLS_IE_LDX
- Type: R_SPARC_TLS_IE_ADD
- Type: R_SPARC_TLS_LE_HIX22
- Type: R_SPARC_TLS_LE_LOX10
- Type: R_SPARC_TLS_DTPMOD32
- Type: R_SPARC_TLS_DTPMOD64
- Type: R_SPARC_TLS_DTPOFF32
- Type: R_SPARC_TLS_DTPOFF64
- Type: R_SPARC_TLS_TPOFF32
- Type: R_SPARC_TLS_TPOFF64
- Type: R_SPARC_GOTDATA_HIX22
- Type: R_SPARC_GOTDATA_LOX10
- Type: R_SPARC_GOTDATA_OP_HIX22
- Type: R_SPARC_GOTDATA_OP_LOX10
- Type: R_SPARC_GOTDATA_OP
- Type: R_SPARC_H34
- Type: R_SPARC_SIZE32
- Type: R_SPARC_SIZE64
- Type: R_SPARC_WDISP10
- Type: R_SPARC_IRELATIVE