]> git.proxmox.com Git - rustc.git/blob - src/llvm/test/tools/llvm-readobj/Inputs/relocs.py
Imported Upstream version 1.0.0+dfsg1
[rustc.git] / src / llvm / test / tools / llvm-readobj / Inputs / relocs.py
1 #!/usr/bin/env python
2
3 # Generates ELF, COFF and MachO object files for different architectures
4 # containing all relocations:
5 #
6 # ELF: i386, x86_64, ppc64, aarch64, arm, mips, mips64el
7 # COFF: i386, x86_64
8 # MachO: i386, x86_64, arm
9 # (see end of file for triples)
10 #
11 # To simplify generation, object files are generated with just the proper
12 # number of relocations through repeated instructions. Afterwards, the
13 # relocations in the object file are patched to their proper value.
14
15 import operator
16 import shutil
17 import StringIO
18 import struct
19 import subprocess
20 import sys
21
22 class EnumType(type):
23 def __init__(self, name, bases = (), attributes = {}):
24 super(EnumType, self).__init__(name, bases, attributes)
25
26 type.__setattr__(self, '_map', {})
27 type.__setattr__(self, '_nameMap', {})
28
29 for symbol in attributes:
30 if symbol.startswith('__') or symbol.endswith('__'):
31 continue
32
33 value = attributes[symbol]
34
35 # MyEnum.symbol == value
36 type.__setattr__(self, symbol, value)
37 self._nameMap[symbol] = value
38
39 # The first symbol with the given value is authoritative.
40 if not (value in self._map):
41 # MyEnum[value] == symbol
42 self._map[value] = symbol
43
44 # Not supported (Enums are immutable).
45 def __setattr__(self, name, value):
46 raise NotSupportedException, self.__setattr__
47
48 # Not supported (Enums are immutable).
49 def __delattr__(self, name):
50 raise NotSupportedException, self.__delattr__
51
52 # Gets the enum symbol for the specified value.
53 def __getitem__(self, value):
54 symbol = self._map.get(value)
55 if symbol is None:
56 raise KeyError, value
57 return symbol
58
59 # Gets the enum symbol for the specified value or none.
60 def lookup(self, value):
61 symbol = self._map.get(value)
62 return symbol
63
64 # Not supported (Enums are immutable).
65 def __setitem__(self, value, symbol):
66 raise NotSupportedException, self.__setitem__
67
68 # Not supported (Enums are immutable).
69 def __delitem__(self, value):
70 raise NotSupportedException, self.__delitem__
71
72 def entries(self):
73 # sort by (value, name)
74 def makeKey(item):
75 return (item[1], item[0])
76 e = []
77 for pair in sorted(self._nameMap.iteritems(), key=makeKey):
78 e.append(pair)
79 return e
80
81 def __iter__(self):
82 for e in self.entries():
83 yield e
84
85 Enum = EnumType('Enum', (), {})
86
87 class BinaryReader:
88 def __init__(self, path):
89 self.file = open(path, "r+b", 0)
90 self.isLSB = None
91 self.is64Bit = None
92 self.isN64 = False
93
94 def tell(self):
95 return self.file.tell()
96
97 def seek(self, pos):
98 self.file.seek(pos)
99
100 def read(self, N):
101 data = self.file.read(N)
102 if len(data) != N:
103 raise ValueError, "Out of data!"
104 return data
105
106 def int8(self):
107 return ord(self.read(1))
108
109 def uint8(self):
110 return ord(self.read(1))
111
112 def int16(self):
113 return struct.unpack('><'[self.isLSB] + 'h', self.read(2))[0]
114
115 def uint16(self):
116 return struct.unpack('><'[self.isLSB] + 'H', self.read(2))[0]
117
118 def int32(self):
119 return struct.unpack('><'[self.isLSB] + 'i', self.read(4))[0]
120
121 def uint32(self):
122 return struct.unpack('><'[self.isLSB] + 'I', self.read(4))[0]
123
124 def int64(self):
125 return struct.unpack('><'[self.isLSB] + 'q', self.read(8))[0]
126
127 def uint64(self):
128 return struct.unpack('><'[self.isLSB] + 'Q', self.read(8))[0]
129
130 def writeUInt8(self, value):
131 self.file.write(struct.pack('><'[self.isLSB] + 'B', value))
132
133 def writeUInt16(self, value):
134 self.file.write(struct.pack('><'[self.isLSB] + 'H', value))
135
136 def writeUInt32(self, value):
137 self.file.write(struct.pack('><'[self.isLSB] + 'I', value))
138
139 def writeUInt64(self, value):
140 self.file.write(struct.pack('><'[self.isLSB] + 'Q', value))
141
142 def word(self):
143 if self.is64Bit:
144 return self.uint64()
145 else:
146 return self.uint32()
147
148 def writeWord(self, value):
149 if self.is64Bit:
150 self.writeUInt64(value)
151 else:
152 self.writeUInt32(value)
153
154 class StringTable:
155 def __init__(self, strings):
156 self.string_table = strings
157
158 def __getitem__(self, index):
159 end = self.string_table.index('\x00', index)
160 return self.string_table[index:end]
161
162 class ElfSection:
163 def __init__(self, f):
164 self.sh_name = f.uint32()
165 self.sh_type = f.uint32()
166 self.sh_flags = f.word()
167 self.sh_addr = f.word()
168 self.sh_offset = f.word()
169 self.sh_size = f.word()
170 self.sh_link = f.uint32()
171 self.sh_info = f.uint32()
172 self.sh_addralign = f.word()
173 self.sh_entsize = f.word()
174
175 def patch(self, f, relocs):
176 if self.sh_type == 4 or self.sh_type == 9: # SHT_RELA / SHT_REL
177 self.patchRelocs(f, relocs)
178
179 def patchRelocs(self, f, relocs):
180 entries = self.sh_size // self.sh_entsize
181
182 for index in range(entries):
183 f.seek(self.sh_offset + index * self.sh_entsize)
184 r_offset = f.word()
185
186 if index < len(relocs):
187 ri = index
188 else:
189 ri = 0
190
191 if f.isN64:
192 r_sym = f.uint32()
193 r_ssym = f.uint8()
194 f.seek(f.tell())
195 f.writeUInt8(relocs[ri][1])
196 f.writeUInt8(relocs[ri][1])
197 f.writeUInt8(relocs[ri][1])
198 else:
199 pos = f.tell()
200 r_info = f.word()
201
202 r_type = relocs[ri][1]
203 if f.is64Bit:
204 r_info = (r_info & 0xFFFFFFFF00000000) | (r_type & 0xFFFFFFFF)
205 else:
206 r_info = (r_info & 0xFF00) | (r_type & 0xFF)
207
208 print(" %s" % relocs[ri][0])
209 f.seek(pos)
210 f.writeWord(r_info)
211
212
213 class CoffSection:
214 def __init__(self, f):
215 self.raw_name = f.read(8)
216 self.virtual_size = f.uint32()
217 self.virtual_address = f.uint32()
218 self.raw_data_size = f.uint32()
219 self.pointer_to_raw_data = f.uint32()
220 self.pointer_to_relocations = f.uint32()
221 self.pointer_to_line_numbers = f.uint32()
222 self.relocation_count = f.uint16()
223 self.line_number_count = f.uint16()
224 self.characteristics = f.uint32()
225
226
227 def compileAsm(filename, triple, src):
228 cmd = ["llvm-mc", "-triple=" + triple, "-filetype=obj", "-o", filename]
229 print(" Running: " + " ".join(cmd))
230 p = subprocess.Popen(cmd, stdin=subprocess.PIPE)
231 p.communicate(input=src)
232 p.wait()
233
234 def compileIR(filename, triple, src):
235 cmd = ["llc", "-mtriple=" + triple, "-filetype=obj", "-o", filename]
236 print(" Running: " + " ".join(cmd))
237 p = subprocess.Popen(cmd, stdin=subprocess.PIPE)
238 p.communicate(input=src)
239 p.wait()
240
241
242 def craftElf(filename, triple, relocs, dummyReloc):
243 print("Crafting " + filename + " for " + triple)
244 if type(dummyReloc) is tuple:
245 preSrc, dummyReloc, relocsPerDummy = dummyReloc
246 src = preSrc + "\n"
247 for i in range((len(relocs) + relocsPerDummy - 1) / relocsPerDummy):
248 src += dummyReloc.format(i) + "\n"
249 compileIR(filename, triple, src)
250 else:
251 src = (dummyReloc + "\n") * len(relocs)
252 compileAsm(filename, triple, src)
253
254 print(" Patching relocations...")
255 patchElf(filename, relocs)
256
257 def patchElf(path, relocs):
258 f = BinaryReader(path)
259
260 magic = f.read(4)
261 assert magic == '\x7FELF'
262
263 fileclass = f.uint8()
264 if fileclass == 1:
265 f.is64Bit = False
266 elif fileclass == 2:
267 f.is64Bit = True
268 else:
269 raise ValueError, "Unknown file class %x" % fileclass
270
271 byteordering = f.uint8()
272 if byteordering == 1:
273 f.isLSB = True
274 elif byteordering == 2:
275 f.isLSB = False
276 else:
277 raise ValueError, "Unknown byte ordering %x" % byteordering
278
279 f.seek(18)
280 e_machine = f.uint16()
281 if e_machine == 0x0008 and f.is64Bit: # EM_MIPS && 64 bit
282 f.isN64 = True
283
284 e_version = f.uint32()
285 e_entry = f.word()
286 e_phoff = f.word()
287 e_shoff = f.word()
288 e_flags = f.uint32()
289 e_ehsize = f.uint16()
290 e_phentsize = f.uint16()
291 e_phnum = f.uint16()
292 e_shentsize = f.uint16()
293 e_shnum = f.uint16()
294 e_shstrndx = f.uint16()
295
296 sections = []
297 for index in range(e_shnum):
298 f.seek(e_shoff + index * e_shentsize)
299 s = ElfSection(f)
300 sections.append(s)
301
302 f.seek(sections[e_shstrndx].sh_offset)
303 shstrtab = StringTable(f.read(sections[e_shstrndx].sh_size))
304
305 strtab = None
306 for section in sections:
307 if shstrtab[section.sh_name] == ".strtab":
308 f.seek(section.sh_offset)
309 strtab = StringTable(f.read(section.sh_size))
310 break
311
312 for index in range(e_shnum):
313 sections[index].patch(f, relocs)
314
315
316 def craftCoff(filename, triple, relocs, dummyReloc):
317 print("Crafting " + filename + " for " + triple)
318 src = (dummyReloc + "\n") * len(relocs)
319 compileAsm(filename, triple, src)
320
321 print(" Patching relocations...")
322 patchCoff(filename, relocs)
323
324 def patchCoff(path, relocs):
325 f = BinaryReader(path)
326 f.isLSB = True
327
328 machine_type = f.uint16()
329 section_count = f.uint16()
330
331 # Zero out timestamp to prevent churn when regenerating COFF files.
332 f.writeUInt32(0)
333
334 f.seek(20)
335 sections = [CoffSection(f) for idx in range(section_count)]
336
337 section = sections[0]
338 f.seek(section.pointer_to_relocations)
339 for i in range(section.relocation_count):
340 virtual_addr = f.uint32()
341 symtab_idx = f.uint32()
342 print(" %s" % relocs[i][0])
343 f.writeUInt16(relocs[i][1])
344
345
346 def craftMacho(filename, triple, relocs, dummyReloc):
347 print("Crafting " + filename + " for " + triple)
348
349 if type(dummyReloc) is tuple:
350 srcType, preSrc, dummyReloc, relocsPerDummy = dummyReloc
351 src = preSrc + "\n"
352 for i in range((len(relocs) + relocsPerDummy - 1) / relocsPerDummy):
353 src += dummyReloc.format(i) + "\n"
354 if srcType == "asm":
355 compileAsm(filename, triple, src)
356 elif srcType == "ir":
357 compileIR(filename, triple, src)
358 else:
359 src = (dummyReloc + "\n") * len(relocs)
360 compileAsm(filename, triple, src)
361
362 print(" Patching relocations...")
363 patchMacho(filename, relocs)
364
365 def patchMacho(filename, relocs):
366 f = BinaryReader(filename)
367
368 magic = f.read(4)
369 if magic == '\xFE\xED\xFA\xCE':
370 f.isLSB, f.is64Bit = False, False
371 elif magic == '\xCE\xFA\xED\xFE':
372 f.isLSB, f.is64Bit = True, False
373 elif magic == '\xFE\xED\xFA\xCF':
374 f.isLSB, f.is64Bit = False, True
375 elif magic == '\xCF\xFA\xED\xFE':
376 f.isLSB, f.is64Bit = True, True
377 else:
378 raise ValueError,"Not a Mach-O object file: %r (bad magic)" % path
379
380 cputype = f.uint32()
381 cpusubtype = f.uint32()
382 filetype = f.uint32()
383 numLoadCommands = f.uint32()
384 loadCommandsSize = f.uint32()
385 flag = f.uint32()
386 if f.is64Bit:
387 reserved = f.uint32()
388
389 start = f.tell()
390
391 for i in range(numLoadCommands):
392 patchMachoLoadCommand(f, relocs)
393
394 if f.tell() - start != loadCommandsSize:
395 raise ValueError,"%s: warning: invalid load commands size: %r" % (
396 sys.argv[0], loadCommandsSize)
397
398 def patchMachoLoadCommand(f, relocs):
399 start = f.tell()
400 cmd = f.uint32()
401 cmdSize = f.uint32()
402
403 if cmd == 1:
404 patchMachoSegmentLoadCommand(f, relocs)
405 elif cmd == 25:
406 patchMachoSegmentLoadCommand(f, relocs)
407 else:
408 f.read(cmdSize - 8)
409
410 if f.tell() - start != cmdSize:
411 raise ValueError,"%s: warning: invalid load command size: %r" % (
412 sys.argv[0], cmdSize)
413
414 def patchMachoSegmentLoadCommand(f, relocs):
415 segment_name = f.read(16)
416 vm_addr = f.word()
417 vm_size = f.word()
418 file_offset = f.word()
419 file_size = f.word()
420 maxprot = f.uint32()
421 initprot = f.uint32()
422 numSections = f.uint32()
423 flags = f.uint32()
424 for i in range(numSections):
425 patchMachoSection(f, relocs)
426
427 def patchMachoSection(f, relocs):
428 section_name = f.read(16)
429 segment_name = f.read(16)
430 address = f.word()
431 size = f.word()
432 offset = f.uint32()
433 alignment = f.uint32()
434 relocOffset = f.uint32()
435 numReloc = f.uint32()
436 flags = f.uint32()
437 reserved1 = f.uint32()
438 reserved2 = f.uint32()
439 if f.is64Bit:
440 reserved3 = f.uint32()
441
442 prev_pos = f.tell()
443
444 f.seek(relocOffset)
445 for i in range(numReloc):
446 ri = i < len(relocs) and i or 0
447 print(" %s" % relocs[ri][0])
448 word1 = f.uint32()
449 pos = f.tell()
450 value = f.uint32()
451 f.seek(pos)
452 value = (value & 0x0FFFFFFF) | ((relocs[ri][1] & 0xF) << 28)
453 f.writeUInt32(value)
454 f.seek(prev_pos)
455
456
457 class Relocs_Elf_X86_64(Enum):
458 R_X86_64_NONE = 0
459 R_X86_64_64 = 1
460 R_X86_64_PC32 = 2
461 R_X86_64_GOT32 = 3
462 R_X86_64_PLT32 = 4
463 R_X86_64_COPY = 5
464 R_X86_64_GLOB_DAT = 6
465 R_X86_64_JUMP_SLOT = 7
466 R_X86_64_RELATIVE = 8
467 R_X86_64_GOTPCREL = 9
468 R_X86_64_32 = 10
469 R_X86_64_32S = 11
470 R_X86_64_16 = 12
471 R_X86_64_PC16 = 13
472 R_X86_64_8 = 14
473 R_X86_64_PC8 = 15
474 R_X86_64_DTPMOD64 = 16
475 R_X86_64_DTPOFF64 = 17
476 R_X86_64_TPOFF64 = 18
477 R_X86_64_TLSGD = 19
478 R_X86_64_TLSLD = 20
479 R_X86_64_DTPOFF32 = 21
480 R_X86_64_GOTTPOFF = 22
481 R_X86_64_TPOFF32 = 23
482 R_X86_64_PC64 = 24
483 R_X86_64_GOTOFF64 = 25
484 R_X86_64_GOTPC32 = 26
485 R_X86_64_GOT64 = 27
486 R_X86_64_GOTPCREL64 = 28
487 R_X86_64_GOTPC64 = 29
488 R_X86_64_GOTPLT64 = 30
489 R_X86_64_PLTOFF64 = 31
490 R_X86_64_SIZE32 = 32
491 R_X86_64_SIZE64 = 33
492 R_X86_64_GOTPC32_TLSDESC = 34
493 R_X86_64_TLSDESC_CALL = 35
494 R_X86_64_TLSDESC = 36
495 R_X86_64_IRELATIVE = 37
496
497 class Relocs_Elf_i386(Enum):
498 R_386_NONE = 0
499 R_386_32 = 1
500 R_386_PC32 = 2
501 R_386_GOT32 = 3
502 R_386_PLT32 = 4
503 R_386_COPY = 5
504 R_386_GLOB_DAT = 6
505 R_386_JUMP_SLOT = 7
506 R_386_RELATIVE = 8
507 R_386_GOTOFF = 9
508 R_386_GOTPC = 10
509 R_386_32PLT = 11
510 R_386_TLS_TPOFF = 14
511 R_386_TLS_IE = 15
512 R_386_TLS_GOTIE = 16
513 R_386_TLS_LE = 17
514 R_386_TLS_GD = 18
515 R_386_TLS_LDM = 19
516 R_386_16 = 20
517 R_386_PC16 = 21
518 R_386_8 = 22
519 R_386_PC8 = 23
520 R_386_TLS_GD_32 = 24
521 R_386_TLS_GD_PUSH = 25
522 R_386_TLS_GD_CALL = 26
523 R_386_TLS_GD_POP = 27
524 R_386_TLS_LDM_32 = 28
525 R_386_TLS_LDM_PUSH = 29
526 R_386_TLS_LDM_CALL = 30
527 R_386_TLS_LDM_POP = 31
528 R_386_TLS_LDO_32 = 32
529 R_386_TLS_IE_32 = 33
530 R_386_TLS_LE_32 = 34
531 R_386_TLS_DTPMOD32 = 35
532 R_386_TLS_DTPOFF32 = 36
533 R_386_TLS_TPOFF32 = 37
534 R_386_TLS_GOTDESC = 39
535 R_386_TLS_DESC_CALL = 40
536 R_386_TLS_DESC = 41
537 R_386_IRELATIVE = 42
538 R_386_NUM = 43
539
540 class Relocs_Elf_PPC32(Enum):
541 R_PPC_NONE = 0
542 R_PPC_ADDR32 = 1
543 R_PPC_ADDR24 = 2
544 R_PPC_ADDR16 = 3
545 R_PPC_ADDR16_LO = 4
546 R_PPC_ADDR16_HI = 5
547 R_PPC_ADDR16_HA = 6
548 R_PPC_ADDR14 = 7
549 R_PPC_ADDR14_BRTAKEN = 8
550 R_PPC_ADDR14_BRNTAKEN = 9
551 R_PPC_REL24 = 10
552 R_PPC_REL14 = 11
553 R_PPC_REL14_BRTAKEN = 12
554 R_PPC_REL14_BRNTAKEN = 13
555 R_PPC_REL32 = 26
556 R_PPC_TPREL16_LO = 70
557 R_PPC_TPREL16_HA = 72
558
559 class Relocs_Elf_PPC64(Enum):
560 R_PPC64_NONE = 0
561 R_PPC64_ADDR32 = 1
562 R_PPC64_ADDR16_LO = 4
563 R_PPC64_ADDR16_HI = 5
564 R_PPC64_ADDR14 = 7
565 R_PPC64_REL24 = 10
566 R_PPC64_REL32 = 26
567 R_PPC64_ADDR64 = 38
568 R_PPC64_ADDR16_HIGHER = 39
569 R_PPC64_ADDR16_HIGHEST = 41
570 R_PPC64_REL64 = 44
571 R_PPC64_TOC16 = 47
572 R_PPC64_TOC16_LO = 48
573 R_PPC64_TOC16_HA = 50
574 R_PPC64_TOC = 51
575 R_PPC64_ADDR16_DS = 56
576 R_PPC64_ADDR16_LO_DS = 57
577 R_PPC64_TOC16_DS = 63
578 R_PPC64_TOC16_LO_DS = 64
579 R_PPC64_TLS = 67
580 R_PPC64_TPREL16_LO = 70
581 R_PPC64_TPREL16_HA = 72
582 R_PPC64_DTPREL16_LO = 75
583 R_PPC64_DTPREL16_HA = 77
584 R_PPC64_GOT_TLSGD16_LO = 80
585 R_PPC64_GOT_TLSGD16_HA = 82
586 R_PPC64_GOT_TLSLD16_LO = 84
587 R_PPC64_GOT_TLSLD16_HA = 86
588 R_PPC64_GOT_TPREL16_LO_DS = 88
589 R_PPC64_GOT_TPREL16_HA = 90
590 R_PPC64_TLSGD = 107
591 R_PPC64_TLSLD = 108
592
593 class Relocs_Elf_AArch64(Enum):
594 R_AARCH64_NONE = 0
595 R_AARCH64_ABS64 = 0x101
596 R_AARCH64_ABS32 = 0x102
597 R_AARCH64_ABS16 = 0x103
598 R_AARCH64_PREL64 = 0x104
599 R_AARCH64_PREL32 = 0x105
600 R_AARCH64_PREL16 = 0x106
601 R_AARCH64_MOVW_UABS_G0 = 0x107
602 R_AARCH64_MOVW_UABS_G0_NC = 0x108
603 R_AARCH64_MOVW_UABS_G1 = 0x109
604 R_AARCH64_MOVW_UABS_G1_NC = 0x10a
605 R_AARCH64_MOVW_UABS_G2 = 0x10b
606 R_AARCH64_MOVW_UABS_G2_NC = 0x10c
607 R_AARCH64_MOVW_UABS_G3 = 0x10d
608 R_AARCH64_MOVW_SABS_G0 = 0x10e
609 R_AARCH64_MOVW_SABS_G1 = 0x10f
610 R_AARCH64_MOVW_SABS_G2 = 0x110
611 R_AARCH64_LD_PREL_LO19 = 0x111
612 R_AARCH64_ADR_PREL_LO21 = 0x112
613 R_AARCH64_ADR_PREL_PG_HI21 = 0x113
614 R_AARCH64_ADR_PREL_PG_HI21_NC = 0x114
615 R_AARCH64_ADD_ABS_LO12_NC = 0x115
616 R_AARCH64_LDST8_ABS_LO12_NC = 0x116
617 R_AARCH64_TSTBR14 = 0x117
618 R_AARCH64_CONDBR19 = 0x118
619 R_AARCH64_JUMP26 = 0x11a
620 R_AARCH64_CALL26 = 0x11b
621 R_AARCH64_LDST16_ABS_LO12_NC = 0x11c
622 R_AARCH64_LDST32_ABS_LO12_NC = 0x11d
623 R_AARCH64_LDST64_ABS_LO12_NC = 0x11e
624 R_AARCH64_MOVW_PREL_G0 = 0x11f
625 R_AARCH64_MOVW_PREL_G0_NC = 0x120
626 R_AARCH64_MOVW_PREL_G1 = 0x121
627 R_AARCH64_MOVW_PREL_G1_NC = 0x122
628 R_AARCH64_MOVW_PREL_G2 = 0x123
629 R_AARCH64_MOVW_PREL_G2_NC = 0x124
630 R_AARCH64_MOVW_PREL_G3 = 0x125
631 R_AARCH64_LDST128_ABS_LO12_NC = 0x12b
632 R_AARCH64_MOVW_GOTOFF_G0 = 0x12c
633 R_AARCH64_MOVW_GOTOFF_G0_NC = 0x12d
634 R_AARCH64_MOVW_GOTOFF_G1 = 0x12e
635 R_AARCH64_MOVW_GOTOFF_G1_NC = 0x12f
636 R_AARCH64_MOVW_GOTOFF_G2 = 0x130
637 R_AARCH64_MOVW_GOTOFF_G2_NC = 0x131
638 R_AARCH64_MOVW_GOTOFF_G3 = 0x132
639 R_AARCH64_GOTREL64 = 0x133
640 R_AARCH64_GOTREL32 = 0x134
641 R_AARCH64_GOT_LD_PREL19 = 0x135
642 R_AARCH64_LD64_GOTOFF_LO15 = 0x136
643 R_AARCH64_ADR_GOT_PAGE = 0x137
644 R_AARCH64_LD64_GOT_LO12_NC = 0x138
645 R_AARCH64_LD64_GOTPAGE_LO15 = 0x139
646 R_AARCH64_TLSGD_ADR_PREL21 = 0x200
647 R_AARCH64_TLSGD_ADR_PAGE21 = 0x201
648 R_AARCH64_TLSGD_ADD_LO12_NC = 0x202
649 R_AARCH64_TLSGD_MOVW_G1 = 0x203
650 R_AARCH64_TLSGD_MOVW_G0_NC = 0x204
651 R_AARCH64_TLSLD_ADR_PREL21 = 0x205
652 R_AARCH64_TLSLD_ADR_PAGE21 = 0x206
653 R_AARCH64_TLSLD_ADD_LO12_NC = 0x207
654 R_AARCH64_TLSLD_MOVW_G1 = 0x208
655 R_AARCH64_TLSLD_MOVW_G0_NC = 0x209
656 R_AARCH64_TLSLD_LD_PREL19 = 0x20a
657 R_AARCH64_TLSLD_MOVW_DTPREL_G2 = 0x20b
658 R_AARCH64_TLSLD_MOVW_DTPREL_G1 = 0x20c
659 R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC = 0x20d
660 R_AARCH64_TLSLD_MOVW_DTPREL_G0 = 0x20e
661 R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC = 0x20f
662 R_AARCH64_TLSLD_ADD_DTPREL_HI12 = 0x210
663 R_AARCH64_TLSLD_ADD_DTPREL_LO12 = 0x211
664 R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC = 0x212
665 R_AARCH64_TLSLD_LDST8_DTPREL_LO12 = 0x213
666 R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC = 0x214
667 R_AARCH64_TLSLD_LDST16_DTPREL_LO12 = 0x215
668 R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC = 0x216
669 R_AARCH64_TLSLD_LDST32_DTPREL_LO12 = 0x217
670 R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC = 0x218
671 R_AARCH64_TLSLD_LDST64_DTPREL_LO12 = 0x219
672 R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC = 0x21a
673 R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 = 0x21b
674 R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC = 0x21c
675 R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 = 0x21d
676 R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC = 0x21e
677 R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 = 0x21f
678 R_AARCH64_TLSLE_MOVW_TPREL_G2 = 0x220
679 R_AARCH64_TLSLE_MOVW_TPREL_G1 = 0x221
680 R_AARCH64_TLSLE_MOVW_TPREL_G1_NC = 0x222
681 R_AARCH64_TLSLE_MOVW_TPREL_G0 = 0x223
682 R_AARCH64_TLSLE_MOVW_TPREL_G0_NC = 0x224
683 R_AARCH64_TLSLE_ADD_TPREL_HI12 = 0x225
684 R_AARCH64_TLSLE_ADD_TPREL_LO12 = 0x226
685 R_AARCH64_TLSLE_ADD_TPREL_LO12_NC = 0x227
686 R_AARCH64_TLSLE_LDST8_TPREL_LO12 = 0x228
687 R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC = 0x229
688 R_AARCH64_TLSLE_LDST16_TPREL_LO12 = 0x22a
689 R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC = 0x22b
690 R_AARCH64_TLSLE_LDST32_TPREL_LO12 = 0x22c
691 R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC = 0x22d
692 R_AARCH64_TLSLE_LDST64_TPREL_LO12 = 0x22e
693 R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC = 0x22f
694 R_AARCH64_TLSDESC_LD_PREL19 = 0x230
695 R_AARCH64_TLSDESC_ADR_PREL21 = 0x231
696 R_AARCH64_TLSDESC_ADR_PAGE21 = 0x232
697 R_AARCH64_TLSDESC_LD64_LO12_NC = 0x233
698 R_AARCH64_TLSDESC_ADD_LO12_NC = 0x234
699 R_AARCH64_TLSDESC_OFF_G1 = 0x235
700 R_AARCH64_TLSDESC_OFF_G0_NC = 0x236
701 R_AARCH64_TLSDESC_LDR = 0x237
702 R_AARCH64_TLSDESC_ADD = 0x238
703 R_AARCH64_TLSDESC_CALL = 0x239
704 R_AARCH64_TLSLE_LDST128_TPREL_LO12 = 0x23a
705 R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC = 0x23b
706 R_AARCH64_TLSLD_LDST128_DTPREL_LO12 = 0x23c
707 R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC = 0x23d
708 R_AARCH64_COPY = 0x400
709 R_AARCH64_GLOB_DAT = 0x401
710 R_AARCH64_JUMP_SLOT = 0x402
711 R_AARCH64_RELATIVE = 0x403
712 R_AARCH64_TLS_DTPREL64 = 0x404
713 R_AARCH64_TLS_DTPMOD64 = 0x405
714 R_AARCH64_TLS_TPREL64 = 0x406
715 R_AARCH64_TLSDESC = 0x407
716 R_AARCH64_IRELATIVE = 0x408
717
718 class Relocs_Elf_ARM(Enum):
719 R_ARM_NONE = 0x00
720 R_ARM_PC24 = 0x01
721 R_ARM_ABS32 = 0x02
722 R_ARM_REL32 = 0x03
723 R_ARM_LDR_PC_G0 = 0x04
724 R_ARM_ABS16 = 0x05
725 R_ARM_ABS12 = 0x06
726 R_ARM_THM_ABS5 = 0x07
727 R_ARM_ABS8 = 0x08
728 R_ARM_SBREL32 = 0x09
729 R_ARM_THM_CALL = 0x0a
730 R_ARM_THM_PC8 = 0x0b
731 R_ARM_BREL_ADJ = 0x0c
732 R_ARM_TLS_DESC = 0x0d
733 R_ARM_THM_SWI8 = 0x0e
734 R_ARM_XPC25 = 0x0f
735 R_ARM_THM_XPC22 = 0x10
736 R_ARM_TLS_DTPMOD32 = 0x11
737 R_ARM_TLS_DTPOFF32 = 0x12
738 R_ARM_TLS_TPOFF32 = 0x13
739 R_ARM_COPY = 0x14
740 R_ARM_GLOB_DAT = 0x15
741 R_ARM_JUMP_SLOT = 0x16
742 R_ARM_RELATIVE = 0x17
743 R_ARM_GOTOFF32 = 0x18
744 R_ARM_BASE_PREL = 0x19
745 R_ARM_GOT_BREL = 0x1a
746 R_ARM_PLT32 = 0x1b
747 R_ARM_CALL = 0x1c
748 R_ARM_JUMP24 = 0x1d
749 R_ARM_THM_JUMP24 = 0x1e
750 R_ARM_BASE_ABS = 0x1f
751 R_ARM_ALU_PCREL_7_0 = 0x20
752 R_ARM_ALU_PCREL_15_8 = 0x21
753 R_ARM_ALU_PCREL_23_15 = 0x22
754 R_ARM_LDR_SBREL_11_0_NC = 0x23
755 R_ARM_ALU_SBREL_19_12_NC = 0x24
756 R_ARM_ALU_SBREL_27_20_CK = 0x25
757 R_ARM_TARGET1 = 0x26
758 R_ARM_SBREL31 = 0x27
759 R_ARM_V4BX = 0x28
760 R_ARM_TARGET2 = 0x29
761 R_ARM_PREL31 = 0x2a
762 R_ARM_MOVW_ABS_NC = 0x2b
763 R_ARM_MOVT_ABS = 0x2c
764 R_ARM_MOVW_PREL_NC = 0x2d
765 R_ARM_MOVT_PREL = 0x2e
766 R_ARM_THM_MOVW_ABS_NC = 0x2f
767 R_ARM_THM_MOVT_ABS = 0x30
768 R_ARM_THM_MOVW_PREL_NC = 0x31
769 R_ARM_THM_MOVT_PREL = 0x32
770 R_ARM_THM_JUMP19 = 0x33
771 R_ARM_THM_JUMP6 = 0x34
772 R_ARM_THM_ALU_PREL_11_0 = 0x35
773 R_ARM_THM_PC12 = 0x36
774 R_ARM_ABS32_NOI = 0x37
775 R_ARM_REL32_NOI = 0x38
776 R_ARM_ALU_PC_G0_NC = 0x39
777 R_ARM_ALU_PC_G0 = 0x3a
778 R_ARM_ALU_PC_G1_NC = 0x3b
779 R_ARM_ALU_PC_G1 = 0x3c
780 R_ARM_ALU_PC_G2 = 0x3d
781 R_ARM_LDR_PC_G1 = 0x3e
782 R_ARM_LDR_PC_G2 = 0x3f
783 R_ARM_LDRS_PC_G0 = 0x40
784 R_ARM_LDRS_PC_G1 = 0x41
785 R_ARM_LDRS_PC_G2 = 0x42
786 R_ARM_LDC_PC_G0 = 0x43
787 R_ARM_LDC_PC_G1 = 0x44
788 R_ARM_LDC_PC_G2 = 0x45
789 R_ARM_ALU_SB_G0_NC = 0x46
790 R_ARM_ALU_SB_G0 = 0x47
791 R_ARM_ALU_SB_G1_NC = 0x48
792 R_ARM_ALU_SB_G1 = 0x49
793 R_ARM_ALU_SB_G2 = 0x4a
794 R_ARM_LDR_SB_G0 = 0x4b
795 R_ARM_LDR_SB_G1 = 0x4c
796 R_ARM_LDR_SB_G2 = 0x4d
797 R_ARM_LDRS_SB_G0 = 0x4e
798 R_ARM_LDRS_SB_G1 = 0x4f
799 R_ARM_LDRS_SB_G2 = 0x50
800 R_ARM_LDC_SB_G0 = 0x51
801 R_ARM_LDC_SB_G1 = 0x52
802 R_ARM_LDC_SB_G2 = 0x53
803 R_ARM_MOVW_BREL_NC = 0x54
804 R_ARM_MOVT_BREL = 0x55
805 R_ARM_MOVW_BREL = 0x56
806 R_ARM_THM_MOVW_BREL_NC = 0x57
807 R_ARM_THM_MOVT_BREL = 0x58
808 R_ARM_THM_MOVW_BREL = 0x59
809 R_ARM_TLS_GOTDESC = 0x5a
810 R_ARM_TLS_CALL = 0x5b
811 R_ARM_TLS_DESCSEQ = 0x5c
812 R_ARM_THM_TLS_CALL = 0x5d
813 R_ARM_PLT32_ABS = 0x5e
814 R_ARM_GOT_ABS = 0x5f
815 R_ARM_GOT_PREL = 0x60
816 R_ARM_GOT_BREL12 = 0x61
817 R_ARM_GOTOFF12 = 0x62
818 R_ARM_GOTRELAX = 0x63
819 R_ARM_GNU_VTENTRY = 0x64
820 R_ARM_GNU_VTINHERIT = 0x65
821 R_ARM_THM_JUMP11 = 0x66
822 R_ARM_THM_JUMP8 = 0x67
823 R_ARM_TLS_GD32 = 0x68
824 R_ARM_TLS_LDM32 = 0x69
825 R_ARM_TLS_LDO32 = 0x6a
826 R_ARM_TLS_IE32 = 0x6b
827 R_ARM_TLS_LE32 = 0x6c
828 R_ARM_TLS_LDO12 = 0x6d
829 R_ARM_TLS_LE12 = 0x6e
830 R_ARM_TLS_IE12GP = 0x6f
831 R_ARM_PRIVATE_0 = 0x70
832 R_ARM_PRIVATE_1 = 0x71
833 R_ARM_PRIVATE_2 = 0x72
834 R_ARM_PRIVATE_3 = 0x73
835 R_ARM_PRIVATE_4 = 0x74
836 R_ARM_PRIVATE_5 = 0x75
837 R_ARM_PRIVATE_6 = 0x76
838 R_ARM_PRIVATE_7 = 0x77
839 R_ARM_PRIVATE_8 = 0x78
840 R_ARM_PRIVATE_9 = 0x79
841 R_ARM_PRIVATE_10 = 0x7a
842 R_ARM_PRIVATE_11 = 0x7b
843 R_ARM_PRIVATE_12 = 0x7c
844 R_ARM_PRIVATE_13 = 0x7d
845 R_ARM_PRIVATE_14 = 0x7e
846 R_ARM_PRIVATE_15 = 0x7f
847 R_ARM_ME_TOO = 0x80
848 R_ARM_THM_TLS_DESCSEQ16 = 0x81
849 R_ARM_THM_TLS_DESCSEQ32 = 0x82
850 R_ARM_IRELATIVE = 0xa0
851
852 class Relocs_Elf_Mips(Enum):
853 R_MIPS_NONE = 0
854 R_MIPS_16 = 1
855 R_MIPS_32 = 2
856 R_MIPS_REL32 = 3
857 R_MIPS_26 = 4
858 R_MIPS_HI16 = 5
859 R_MIPS_LO16 = 6
860 R_MIPS_GPREL16 = 7
861 R_MIPS_LITERAL = 8
862 R_MIPS_GOT16 = 9
863 R_MIPS_PC16 = 10
864 R_MIPS_CALL16 = 11
865 R_MIPS_GPREL32 = 12
866 R_MIPS_SHIFT5 = 16
867 R_MIPS_SHIFT6 = 17
868 R_MIPS_64 = 18
869 R_MIPS_GOT_DISP = 19
870 R_MIPS_GOT_PAGE = 20
871 R_MIPS_GOT_OFST = 21
872 R_MIPS_GOT_HI16 = 22
873 R_MIPS_GOT_LO16 = 23
874 R_MIPS_SUB = 24
875 R_MIPS_INSERT_A = 25
876 R_MIPS_INSERT_B = 26
877 R_MIPS_DELETE = 27
878 R_MIPS_HIGHER = 28
879 R_MIPS_HIGHEST = 29
880 R_MIPS_CALL_HI16 = 30
881 R_MIPS_CALL_LO16 = 31
882 R_MIPS_SCN_DISP = 32
883 R_MIPS_REL16 = 33
884 R_MIPS_ADD_IMMEDIATE = 34
885 R_MIPS_PJUMP = 35
886 R_MIPS_RELGOT = 36
887 R_MIPS_JALR = 37
888 R_MIPS_TLS_DTPMOD32 = 38
889 R_MIPS_TLS_DTPREL32 = 39
890 R_MIPS_TLS_DTPMOD64 = 40
891 R_MIPS_TLS_DTPREL64 = 41
892 R_MIPS_TLS_GD = 42
893 R_MIPS_TLS_LDM = 43
894 R_MIPS_TLS_DTPREL_HI16 = 44
895 R_MIPS_TLS_DTPREL_LO16 = 45
896 R_MIPS_TLS_GOTTPREL = 46
897 R_MIPS_TLS_TPREL32 = 47
898 R_MIPS_TLS_TPREL64 = 48
899 R_MIPS_TLS_TPREL_HI16 = 49
900 R_MIPS_TLS_TPREL_LO16 = 50
901 R_MIPS_GLOB_DAT = 51
902 R_MIPS_COPY = 126
903 R_MIPS_JUMP_SLOT = 127
904 R_MIPS_NUM = 218
905
906 class Relocs_Elf_Hexagon(Enum):
907 R_HEX_NONE = 0
908 R_HEX_B22_PCREL = 1
909 R_HEX_B15_PCREL = 2
910 R_HEX_B7_PCREL = 3
911 R_HEX_LO16 = 4
912 R_HEX_HI16 = 5
913 R_HEX_32 = 6
914 R_HEX_16 = 7
915 R_HEX_8 = 8
916 R_HEX_GPREL16_0 = 9
917 R_HEX_GPREL16_1 = 10
918 R_HEX_GPREL16_2 = 11
919 R_HEX_GPREL16_3 = 12
920 R_HEX_HL16 = 13
921 R_HEX_B13_PCREL = 14
922 R_HEX_B9_PCREL = 15
923 R_HEX_B32_PCREL_X = 16
924 R_HEX_32_6_X = 17
925 R_HEX_B22_PCREL_X = 18
926 R_HEX_B15_PCREL_X = 19
927 R_HEX_B13_PCREL_X = 20
928 R_HEX_B9_PCREL_X = 21
929 R_HEX_B7_PCREL_X = 22
930 R_HEX_16_X = 23
931 R_HEX_12_X = 24
932 R_HEX_11_X = 25
933 R_HEX_10_X = 26
934 R_HEX_9_X = 27
935 R_HEX_8_X = 28
936 R_HEX_7_X = 29
937 R_HEX_6_X = 30
938 R_HEX_32_PCREL = 31
939 R_HEX_COPY = 32
940 R_HEX_GLOB_DAT = 33
941 R_HEX_JMP_SLOT = 34
942 R_HEX_RELATIVE = 35
943 R_HEX_PLT_B22_PCREL = 36
944 R_HEX_GOTREL_LO16 = 37
945 R_HEX_GOTREL_HI16 = 38
946 R_HEX_GOTREL_32 = 39
947 R_HEX_GOT_LO16 = 40
948 R_HEX_GOT_HI16 = 41
949 R_HEX_GOT_32 = 42
950 R_HEX_GOT_16 = 43
951 R_HEX_DTPMOD_32 = 44
952 R_HEX_DTPREL_LO16 = 45
953 R_HEX_DTPREL_HI16 = 46
954 R_HEX_DTPREL_32 = 47
955 R_HEX_DTPREL_16 = 48
956 R_HEX_GD_PLT_B22_PCREL = 49
957 R_HEX_GD_GOT_LO16 = 50
958 R_HEX_GD_GOT_HI16 = 51
959 R_HEX_GD_GOT_32 = 52
960 R_HEX_GD_GOT_16 = 53
961 R_HEX_IE_LO16 = 54
962 R_HEX_IE_HI16 = 55
963 R_HEX_IE_32 = 56
964 R_HEX_IE_GOT_LO16 = 57
965 R_HEX_IE_GOT_HI16 = 58
966 R_HEX_IE_GOT_32 = 59
967 R_HEX_IE_GOT_16 = 60
968 R_HEX_TPREL_LO16 = 61
969 R_HEX_TPREL_HI16 = 62
970 R_HEX_TPREL_32 = 63
971 R_HEX_TPREL_16 = 64
972 R_HEX_6_PCREL_X = 65
973 R_HEX_GOTREL_32_6_X = 66
974 R_HEX_GOTREL_16_X = 67
975 R_HEX_GOTREL_11_X = 68
976 R_HEX_GOT_32_6_X = 69
977 R_HEX_GOT_16_X = 70
978 R_HEX_GOT_11_X = 71
979 R_HEX_DTPREL_32_6_X = 72
980 R_HEX_DTPREL_16_X = 73
981 R_HEX_DTPREL_11_X = 74
982 R_HEX_GD_GOT_32_6_X = 75
983 R_HEX_GD_GOT_16_X = 76
984 R_HEX_GD_GOT_11_X = 77
985 R_HEX_IE_32_6_X = 78
986 R_HEX_IE_16_X = 79
987 R_HEX_IE_GOT_32_6_X = 80
988 R_HEX_IE_GOT_16_X = 81
989 R_HEX_IE_GOT_11_X = 82
990 R_HEX_TPREL_32_6_X = 83
991 R_HEX_TPREL_16_X = 84
992 R_HEX_TPREL_11_X = 85
993
994
995 class Relocs_Coff_i386(Enum):
996 IMAGE_REL_I386_ABSOLUTE = 0x0000
997 IMAGE_REL_I386_DIR16 = 0x0001
998 IMAGE_REL_I386_REL16 = 0x0002
999 IMAGE_REL_I386_DIR32 = 0x0006
1000 IMAGE_REL_I386_DIR32NB = 0x0007
1001 IMAGE_REL_I386_SEG12 = 0x0009
1002 IMAGE_REL_I386_SECTION = 0x000A
1003 IMAGE_REL_I386_SECREL = 0x000B
1004 IMAGE_REL_I386_TOKEN = 0x000C
1005 IMAGE_REL_I386_SECREL7 = 0x000D
1006 IMAGE_REL_I386_REL32 = 0x0014
1007
1008 class Relocs_Coff_X86_64(Enum):
1009 IMAGE_REL_AMD64_ABSOLUTE = 0x0000
1010 IMAGE_REL_AMD64_ADDR64 = 0x0001
1011 IMAGE_REL_AMD64_ADDR32 = 0x0002
1012 IMAGE_REL_AMD64_ADDR32NB = 0x0003
1013 IMAGE_REL_AMD64_REL32 = 0x0004
1014 IMAGE_REL_AMD64_REL32_1 = 0x0005
1015 IMAGE_REL_AMD64_REL32_2 = 0x0006
1016 IMAGE_REL_AMD64_REL32_3 = 0x0007
1017 IMAGE_REL_AMD64_REL32_4 = 0x0008
1018 IMAGE_REL_AMD64_REL32_5 = 0x0009
1019 IMAGE_REL_AMD64_SECTION = 0x000A
1020 IMAGE_REL_AMD64_SECREL = 0x000B
1021 IMAGE_REL_AMD64_SECREL7 = 0x000C
1022 IMAGE_REL_AMD64_TOKEN = 0x000D
1023 IMAGE_REL_AMD64_SREL32 = 0x000E
1024 IMAGE_REL_AMD64_PAIR = 0x000F
1025 IMAGE_REL_AMD64_SSPAN32 = 0x0010
1026
1027 class Relocs_Coff_ARM(Enum):
1028 IMAGE_REL_ARM_ABSOLUTE = 0x0000
1029 IMAGE_REL_ARM_ADDR32 = 0x0001
1030 IMAGE_REL_ARM_ADDR32NB = 0x0002
1031 IMAGE_REL_ARM_BRANCH24 = 0x0003
1032 IMAGE_REL_ARM_BRANCH11 = 0x0004
1033 IMAGE_REL_ARM_TOKEN = 0x0005
1034 IMAGE_REL_ARM_BLX24 = 0x0008
1035 IMAGE_REL_ARM_BLX11 = 0x0009
1036 IMAGE_REL_ARM_SECTION = 0x000E
1037 IMAGE_REL_ARM_SECREL = 0x000F
1038 IMAGE_REL_ARM_MOV32A = 0x0010
1039 IMAGE_REL_ARM_MOV32T = 0x0011
1040 IMAGE_REL_ARM_BRANCH20T = 0x0012
1041 IMAGE_REL_ARM_BRANCH24T = 0x0014
1042 IMAGE_REL_ARM_BLX23T = 0x0015
1043
1044
1045 class Relocs_Macho_i386(Enum):
1046 RIT_Vanilla = 0
1047 RIT_Pair = 1
1048 RIT_Difference = 2
1049 RIT_Generic_PreboundLazyPointer = 3
1050 RIT_Generic_LocalDifference = 4
1051 RIT_Generic_TLV = 5
1052
1053 class Relocs_Macho_X86_64(Enum):
1054 RIT_X86_64_Unsigned = 0
1055 RIT_X86_64_Signed = 1
1056 RIT_X86_64_Branch = 2
1057 RIT_X86_64_GOTLoad = 3
1058 RIT_X86_64_GOT = 4
1059 RIT_X86_64_Subtractor = 5
1060 RIT_X86_64_Signed1 = 6
1061 RIT_X86_64_Signed2 = 7
1062 RIT_X86_64_Signed4 = 8
1063 RIT_X86_64_TLV = 9
1064
1065 class Relocs_Macho_ARM(Enum):
1066 RIT_Vanilla = 0
1067 RIT_Pair = 1
1068 RIT_Difference = 2
1069 RIT_ARM_LocalDifference = 3
1070 RIT_ARM_PreboundLazyPointer = 4
1071 RIT_ARM_Branch24Bit = 5
1072 RIT_ARM_ThumbBranch22Bit = 6
1073 RIT_ARM_ThumbBranch32Bit = 7
1074 RIT_ARM_Half = 8
1075 RIT_ARM_HalfDifference = 9
1076
1077 class Relocs_Macho_PPC(Enum):
1078 PPC_RELOC_VANILLA = 0
1079 PPC_RELOC_PAIR = 1
1080 PPC_RELOC_BR14 = 2
1081 PPC_RELOC_BR24 = 3
1082 PPC_RELOC_HI16 = 4
1083 PPC_RELOC_LO16 = 5
1084 PPC_RELOC_HA16 = 6
1085 PPC_RELOC_LO14 = 7
1086 PPC_RELOC_SECTDIFF = 8
1087 PPC_RELOC_PB_LA_PTR = 9
1088 PPC_RELOC_HI16_SECTDIFF = 10
1089 PPC_RELOC_LO16_SECTDIFF = 11
1090 PPC_RELOC_HA16_SECTDIFF = 12
1091 PPC_RELOC_JBSR = 13
1092 PPC_RELOC_LO14_SECTDIFF = 14
1093 PPC_RELOC_LOCAL_SECTDIFF = 15
1094
1095
1096 craftElf("relocs.obj.elf-x86_64", "x86_64-pc-linux-gnu", Relocs_Elf_X86_64.entries(), "leaq sym@GOTTPOFF(%rip), %rax")
1097 craftElf("relocs.obj.elf-i386", "i386-pc-linux-gnu", Relocs_Elf_i386.entries(), "mov sym@GOTOFF(%ebx), %eax")
1098 #craftElf("relocs-elf-ppc32", "powerpc-unknown-linux-gnu", Relocs_Elf_PPC32.entries(), ...)
1099 craftElf("relocs.obj.elf-ppc64", "powerpc64-unknown-linux-gnu", Relocs_Elf_PPC64.entries(),
1100 ("@t = thread_local global i32 0, align 4", "define i32* @f{0}() nounwind {{ ret i32* @t }}", 2))
1101 craftElf("relocs.obj.elf-aarch64", "aarch64", Relocs_Elf_AArch64.entries(), "movz x0, #:abs_g0:sym")
1102 craftElf("relocs.obj.elf-arm", "arm-unknown-unknown", Relocs_Elf_ARM.entries(), "b sym")
1103 craftElf("relocs.obj.elf-mips", "mips-unknown-linux", Relocs_Elf_Mips.entries(), "lui $2, %hi(sym)")
1104 craftElf("relocs.obj.elf-mips64el", "mips64el-unknown-linux", Relocs_Elf_Mips.entries(), "lui $2, %hi(sym)")
1105 #craftElf("relocs.obj.elf-hexagon", "hexagon-unknown-unknown", Relocs_Elf_Hexagon.entries(), ...)
1106
1107 craftCoff("relocs.obj.coff-i386", "i386-pc-win32", Relocs_Coff_i386.entries(), "mov foo@imgrel(%ebx, %ecx, 4), %eax")
1108 craftCoff("relocs.obj.coff-x86_64", "x86_64-pc-win32", Relocs_Coff_X86_64.entries(), "mov foo@imgrel(%ebx, %ecx, 4), %eax")
1109 #craftCoff("relocs.obj.coff-arm", "arm-pc-win32", Relocs_Coff_ARM.entries(), "...")
1110
1111 craftMacho("relocs.obj.macho-i386", "i386-apple-darwin9", Relocs_Macho_i386.entries(),
1112 ("asm", ".subsections_via_symbols; .text; a: ; b:", "call a", 1))
1113 craftMacho("relocs.obj.macho-x86_64", "x86_64-apple-darwin9", Relocs_Macho_X86_64.entries(),
1114 ("asm", ".subsections_via_symbols; .text; a: ; b:", "call a", 1))
1115 craftMacho("relocs.obj.macho-arm", "armv7-apple-darwin10", Relocs_Macho_ARM.entries(), "bl sym")
1116 #craftMacho("relocs.obj.macho-ppc", "powerpc-apple-darwin10", Relocs_Macho_PPC.entries(), ...)