1 Pull in r200112 from upstream llvm trunk (by Venkatraman Govindaraju):
3 [Sparc] Add support for sparc relocation types in ELF object file.
5 Introduced here: http://svnweb.freebsd.org/changeset/base/262261
7 Index: test/MC/Sparc/sparc-relocations.s
8 ===================================================================
9 --- test/MC/Sparc/sparc-relocations.s
10 +++ test/MC/Sparc/sparc-relocations.s
12 ! RUN: llvm-mc %s -arch=sparcv9 -show-encoding | FileCheck %s
13 +! RUN: llvm-mc %s -arch=sparcv9 -filetype=obj | llvm-readobj -r | FileCheck %s --check-prefix=CHECK-OBJ
15 + ! CHECK-OBJ: Format: ELF64-sparc
16 + ! CHECK-OBJ: Relocations [
17 + ! CHECK-OBJ: 0x{{[0-9,A-F]+}} R_SPARC_WDISP30 foo
18 + ! CHECK-OBJ: 0x{{[0-9,A-F]+}} R_SPARC_LO10 sym
19 + ! CHECK-OBJ: 0x{{[0-9,A-F]+}} R_SPARC_HI22 sym
20 + ! CHECK-OBJ: 0x{{[0-9,A-F]+}} R_SPARC_H44 sym
21 + ! CHECK-OBJ: 0x{{[0-9,A-F]+}} R_SPARC_M44 sym
22 + ! CHECK-OBJ: 0x{{[0-9,A-F]+}} R_SPARC_L44 sym
23 + ! CHECK-OBJ: 0x{{[0-9,A-F]+}} R_SPARC_HH22 sym
24 + ! CHECK-OBJ: 0x{{[0-9,A-F]+}} R_SPARC_HM10 sym
27 ! CHECK: call foo ! encoding: [0b01AAAAAA,A,A,A]
28 ! CHECK: ! fixup A - offset: 0, value: foo, kind: fixup_sparc_call30
30 Index: include/llvm/Object/ELFObjectFile.h
31 ===================================================================
32 --- include/llvm/Object/ELFObjectFile.h
33 +++ include/llvm/Object/ELFObjectFile.h
34 @@ -922,6 +922,9 @@ StringRef ELFObjectFile<ELFT>::getFileFormatName()
39 + case ELF::EM_SPARC32PLUS:
40 + return "ELF32-sparc";
42 return "ELF32-unknown";
44 @@ -937,6 +940,8 @@ StringRef ELFObjectFile<ELFT>::getFileFormatName()
48 + case ELF::EM_SPARCV9:
49 + return "ELF64-sparc";
51 return "ELF64-unknown";
53 @@ -967,6 +972,13 @@ unsigned ELFObjectFile<ELFT>::getArch() const {
56 return Triple::systemz;
59 + case ELF::EM_SPARC32PLUS:
60 + return Triple::sparc;
61 + case ELF::EM_SPARCV9:
62 + return Triple::sparcv9;
65 return Triple::UnknownArch;
67 Index: lib/Object/ELF.cpp
68 ===================================================================
69 --- lib/Object/ELF.cpp
70 +++ lib/Object/ELF.cpp
71 @@ -702,6 +702,98 @@ StringRef getELFRelocationTypeName(uint32_t Machin
76 + case ELF::EM_SPARC32PLUS:
77 + case ELF::EM_SPARCV9:
79 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_NONE);
80 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_8);
81 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_16);
82 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_32);
83 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_DISP8);
84 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_DISP16);
85 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_DISP32);
86 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_WDISP30);
87 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_WDISP22);
88 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_HI22);
89 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_22);
90 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_13);
91 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_LO10);
92 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_GOT10);
93 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_GOT13);
94 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_GOT22);
95 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_PC10);
96 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_PC22);
97 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_WPLT30);
98 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_COPY);
99 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_GLOB_DAT);
100 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_JMP_SLOT);
101 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_RELATIVE);
102 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_UA32);
103 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_PLT32);
104 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_HIPLT22);
105 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_LOPLT10);
106 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_PCPLT32);
107 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_PCPLT22);
108 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_PCPLT10);
109 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_10);
110 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_11);
111 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_64);
112 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_OLO10);
113 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_HH22);
114 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_HM10);
115 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_LM22);
116 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_PC_HH22);
117 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_PC_HM10);
118 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_PC_LM22);
119 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_WDISP16);
120 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_WDISP19);
121 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_7);
122 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_5);
123 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_6);
124 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_DISP64);
125 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_PLT64);
126 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_HIX22);
127 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_LOX10);
128 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_H44);
129 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_M44);
130 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_L44);
131 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_REGISTER);
132 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_UA64);
133 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_UA16);
134 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_GD_HI22);
135 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_GD_LO10);
136 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_GD_ADD);
137 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_GD_CALL);
138 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_LDM_HI22);
139 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_LDM_LO10);
140 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_LDM_ADD);
141 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_LDM_CALL);
142 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_LDO_HIX22);
143 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_LDO_LOX10);
144 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_LDO_ADD);
145 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_IE_HI22);
146 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_IE_LO10);
147 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_IE_LD);
148 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_IE_LDX);
149 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_IE_ADD);
150 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_LE_HIX22);
151 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_LE_LOX10);
152 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_DTPMOD32);
153 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_DTPMOD64);
154 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_DTPOFF32);
155 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_DTPOFF64);
156 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_TPOFF32);
157 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_TLS_TPOFF64);
158 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_GOTDATA_HIX22);
159 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_GOTDATA_LOX22);
160 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_GOTDATA_OP_HIX22);
161 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_GOTDATA_OP_LOX22);
162 + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_SPARC_GOTDATA_OP);