18ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck#!/usr/bin/env python
28ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
38ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck# Generates ELF, COFF and MachO object files for different architectures
48ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck# containing all relocations:
58ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck#
68ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck# ELF:   i386, x86_64, ppc64, aarch64, arm, mips, mips64el
78ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck# COFF:  i386, x86_64
88ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck# MachO: i386, x86_64, arm
98ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck# (see end of file for triples)
108ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck#
118ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck# To simplify generation, object files are generated with just the proper
128ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck# number of relocations through repeated instructions. Afterwards, the
138ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck# relocations in the object file are patched to their proper value.
148ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
158ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckimport operator
168ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckimport shutil
178ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckimport StringIO
188ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckimport struct
198ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckimport subprocess
208ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckimport sys
218ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
228ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass EnumType(type):
238ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def __init__(self, name, bases = (), attributes = {}):
248ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    super(EnumType, self).__init__(name, bases, attributes)
258ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
268ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    type.__setattr__(self, '_map', {})
278ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    type.__setattr__(self, '_nameMap', {})
288ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
298ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    for symbol in attributes:
308ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      if symbol.startswith('__') or symbol.endswith('__'):
318ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        continue
328ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
338ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      value = attributes[symbol]
348ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
358ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      # MyEnum.symbol == value
368ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      type.__setattr__(self, symbol, value)
378ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      self._nameMap[symbol] = value
388ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
398ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      # The first symbol with the given value is authoritative.
408ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      if not (value in self._map):
418ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        # MyEnum[value] == symbol
428ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        self._map[value] = symbol
438ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
448ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  # Not supported (Enums are immutable).
458ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def __setattr__(self, name, value):
468ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    raise NotSupportedException, self.__setattr__
478ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
488ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  # Not supported (Enums are immutable).
498ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def __delattr__(self, name):
508ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    raise NotSupportedException, self.__delattr__
518ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
528ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  # Gets the enum symbol for the specified value.
538ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def __getitem__(self, value):
548ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    symbol = self._map.get(value)
558ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    if symbol is None:
568ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      raise KeyError, value
578ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return symbol
588ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
598ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  # Gets the enum symbol for the specified value or none.
608ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def lookup(self, value):
618ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    symbol = self._map.get(value)
628ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return symbol
638ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
648ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  # Not supported (Enums are immutable).
658ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def __setitem__(self, value, symbol):
668ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    raise NotSupportedException, self.__setitem__
678ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
688ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  # Not supported (Enums are immutable).
698ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def __delitem__(self, value):
708ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    raise NotSupportedException, self.__delitem__
718ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
728ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def entries(self):
738ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    # sort by (value, name)
748ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    def makeKey(item):
758ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      return (item[1], item[0])
768ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    e = []
778ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    for pair in sorted(self._nameMap.iteritems(), key=makeKey):
788ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      e.append(pair)
798ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return e
808ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
818ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def __iter__(self):
828ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    for e in self.entries():
838ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      yield e
848ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
858ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckEnum = EnumType('Enum', (), {})
868ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
878ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass BinaryReader:
888ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def __init__(self, path):
898ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.file = open(path, "r+b", 0)
908ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.isLSB = None
918ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.is64Bit = None
928ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.isN64 = False
938ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
948ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def tell(self):
958ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return self.file.tell()
968ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
978ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def seek(self, pos):
988ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.file.seek(pos)
998ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1008ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def read(self, N):
1018ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    data = self.file.read(N)
1028ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    if len(data) != N:
1038ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      raise ValueError, "Out of data!"
1048ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return data
1058ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1068ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def int8(self):
1078ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return ord(self.read(1))
1088ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1098ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def uint8(self):
1108ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return ord(self.read(1))
1118ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1128ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def int16(self):
1138ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return struct.unpack('><'[self.isLSB] + 'h', self.read(2))[0]
1148ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1158ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def uint16(self):
1168ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return struct.unpack('><'[self.isLSB] + 'H', self.read(2))[0]
1178ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1188ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def int32(self):
1198ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return struct.unpack('><'[self.isLSB] + 'i', self.read(4))[0]
1208ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1218ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def uint32(self):
1228ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return struct.unpack('><'[self.isLSB] + 'I', self.read(4))[0]
1238ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1248ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def int64(self):
1258ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return struct.unpack('><'[self.isLSB] + 'q', self.read(8))[0]
1268ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1278ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def uint64(self):
1288ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return struct.unpack('><'[self.isLSB] + 'Q', self.read(8))[0]
1298ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1308ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def writeUInt8(self, value):
1318ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.file.write(struct.pack('><'[self.isLSB] + 'B', value))
1328ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1338ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def writeUInt16(self, value):
1348ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.file.write(struct.pack('><'[self.isLSB] + 'H', value))
1358ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1368ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def writeUInt32(self, value):
1378ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.file.write(struct.pack('><'[self.isLSB] + 'I', value))
1388ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1398ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def writeUInt64(self, value):
1408ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.file.write(struct.pack('><'[self.isLSB] + 'Q', value))
1418ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1428ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def word(self):
1438ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    if self.is64Bit:
1448ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      return self.uint64()
1458ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    else:
1468ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      return self.uint32()
1478ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1488ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def writeWord(self, value):
1498ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    if self.is64Bit:
1508ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      self.writeUInt64(value)
1518ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    else:
1528ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      self.writeUInt32(value)
1538ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1548ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass StringTable:
1558ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def __init__(self, strings):
1568ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.string_table = strings
1578ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1588ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def __getitem__(self, index):
1598ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    end = self.string_table.index('\x00', index)
1608ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    return self.string_table[index:end]
1618ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1628ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass ElfSection:
1638ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def __init__(self, f):
1648ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.sh_name = f.uint32()
1658ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.sh_type = f.uint32()
1668ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.sh_flags = f.word()
1678ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.sh_addr = f.word()
1688ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.sh_offset = f.word()
1698ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.sh_size = f.word()
1708ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.sh_link = f.uint32()
1718ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.sh_info = f.uint32()
1728ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.sh_addralign = f.word()
1738ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.sh_entsize = f.word()
1748ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1758ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def patch(self, f, relocs):
1768ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    if self.sh_type == 4 or self.sh_type == 9: # SHT_RELA / SHT_REL
1778ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      self.patchRelocs(f, relocs)
1788ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1798ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def patchRelocs(self, f, relocs):
1808ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    entries = self.sh_size // self.sh_entsize
1818ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1828ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    for index in range(entries):
1838ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      f.seek(self.sh_offset + index * self.sh_entsize)
1848ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      r_offset = f.word()
1858ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1868ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      if index < len(relocs):
1878ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        ri = index
1888ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      else:
1898ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        ri = 0
1908ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
1918ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      if f.isN64:
1928ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        r_sym =   f.uint32()
1938ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        r_ssym =  f.uint8()
1948ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        f.seek(f.tell())
1958ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        f.writeUInt8(relocs[ri][1])
1968ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        f.writeUInt8(relocs[ri][1])
1978ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        f.writeUInt8(relocs[ri][1])
1988ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      else:
1998ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        pos = f.tell()
2008ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        r_info = f.word()
2018ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2028ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        r_type = relocs[ri][1]
2038ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        if f.is64Bit:
2048ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck          r_info = (r_info & 0xFFFFFFFF00000000) | (r_type & 0xFFFFFFFF)
2058ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        else:
2068ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck          r_info = (r_info & 0xFF00) | (r_type & 0xFF)
2078ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2088ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        print("    %s" % relocs[ri][0])
2098ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        f.seek(pos)
2108ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck        f.writeWord(r_info)
2118ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2128ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2138ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass CoffSection:
2148ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  def __init__(self, f):
2158ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.raw_name                = f.read(8)
2168ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.virtual_size            = f.uint32()
2178ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.virtual_address         = f.uint32()
2188ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.raw_data_size           = f.uint32()
2198ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.pointer_to_raw_data     = f.uint32()
2208ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.pointer_to_relocations  = f.uint32()
2218ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.pointer_to_line_numbers = f.uint32()
2228ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.relocation_count        = f.uint16()
2238ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.line_number_count       = f.uint16()
2248ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    self.characteristics         = f.uint32()
2258ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2268ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2278ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckdef compileAsm(filename, triple, src):
2288ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  cmd = ["llvm-mc", "-triple=" + triple, "-filetype=obj", "-o", filename]
2298ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  print("  Running: " + " ".join(cmd))
2308ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  p = subprocess.Popen(cmd, stdin=subprocess.PIPE)
2318ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  p.communicate(input=src)
2328ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  p.wait()
2338ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2348ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckdef compileIR(filename, triple, src):
2358ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  cmd = ["llc", "-mtriple=" + triple, "-filetype=obj", "-o", filename]
2368ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  print("  Running: " + " ".join(cmd))
2378ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  p = subprocess.Popen(cmd, stdin=subprocess.PIPE)
2388ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  p.communicate(input=src)
2398ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  p.wait()
2408ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2418ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2428ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckdef craftElf(filename, triple, relocs, dummyReloc):
2438ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  print("Crafting " + filename + " for " + triple)
2448ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  if type(dummyReloc) is tuple:
2458ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    preSrc, dummyReloc, relocsPerDummy = dummyReloc
2468ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    src = preSrc + "\n"
2478ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    for i in range((len(relocs) + relocsPerDummy - 1) / relocsPerDummy):
2488ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      src += dummyReloc.format(i) + "\n"
2498ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    compileIR(filename, triple, src)
2508ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  else:
2518ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    src = (dummyReloc + "\n") * len(relocs)
2528ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    compileAsm(filename, triple, src)
2538ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2548ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  print("  Patching relocations...")
2558ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  patchElf(filename, relocs)
2568ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2578ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckdef patchElf(path, relocs):
2588ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  f = BinaryReader(path)
2598ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2608ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  magic = f.read(4)
2618ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  assert magic == '\x7FELF'
2628ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2638ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  fileclass = f.uint8()
2648ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  if fileclass == 1:
2658ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    f.is64Bit = False
2668ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  elif fileclass == 2:
2678ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    f.is64Bit = True
2688ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  else:
2698ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    raise ValueError, "Unknown file class %x" % fileclass
2708ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2718ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  byteordering = f.uint8()
2728ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  if byteordering == 1:
2738ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      f.isLSB = True
2748ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  elif byteordering == 2:
2758ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      f.isLSB = False
2768ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  else:
2778ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      raise ValueError, "Unknown byte ordering %x" % byteordering
2788ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2798ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  f.seek(18)
2808ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  e_machine = f.uint16()
2818ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  if e_machine == 0x0008 and f.is64Bit: # EM_MIPS && 64 bit
2828ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      f.isN64 = True
2838ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2848ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  e_version = f.uint32()
2858ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  e_entry = f.word()
2868ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  e_phoff = f.word()
2878ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  e_shoff = f.word()
2888ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  e_flags = f.uint32()
2898ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  e_ehsize = f.uint16()
2908ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  e_phentsize = f.uint16()
2918ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  e_phnum = f.uint16()
2928ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  e_shentsize = f.uint16()
2938ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  e_shnum = f.uint16()
2948ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  e_shstrndx = f.uint16()
2958ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
2968ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  sections = []
2978ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  for index in range(e_shnum):
2988ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    f.seek(e_shoff + index * e_shentsize)
2998ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    s = ElfSection(f)
3008ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    sections.append(s)
3018ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3028ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  f.seek(sections[e_shstrndx].sh_offset)
3038ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  shstrtab = StringTable(f.read(sections[e_shstrndx].sh_size))
3048ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3058ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  strtab = None
3068ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  for section in sections:
3078ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    if shstrtab[section.sh_name] == ".strtab":
3088ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      f.seek(section.sh_offset)
3098ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      strtab = StringTable(f.read(section.sh_size))
3108ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      break
3118ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3128ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  for index in range(e_shnum):
3138ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    sections[index].patch(f, relocs)
3148ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3158ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3168ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckdef craftCoff(filename, triple, relocs, dummyReloc):
3178ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  print("Crafting " + filename + " for " + triple)
3188ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  src = (dummyReloc + "\n") * len(relocs)
3198ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  compileAsm(filename, triple, src)
3208ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3218ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  print("  Patching relocations...")
3228ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  patchCoff(filename, relocs)
3238ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3248ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckdef patchCoff(path, relocs):
3258ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  f = BinaryReader(path)
3268ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  f.isLSB = True
3278ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3288ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  machine_type            = f.uint16()
3298ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  section_count           = f.uint16()
3308ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  f.seek(20)
3318ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  sections = [CoffSection(f) for idx in range(section_count)]
3328ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3338ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  section = sections[0]
3348ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  f.seek(section.pointer_to_relocations)
3358ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  for i in range(section.relocation_count):
3368ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    virtual_addr = f.uint32()
3378ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    symtab_idx   = f.uint32()
3388ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    print("    %s" % relocs[i][0])
3398ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    f.writeUInt16(relocs[i][1])
3408ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3418ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3428ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckdef craftMacho(filename, triple, relocs, dummyReloc):
3438ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  print("Crafting " + filename + " for " + triple)
3448ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3458ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  if type(dummyReloc) is tuple:
3468ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    srcType, preSrc, dummyReloc, relocsPerDummy = dummyReloc
3478ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    src = preSrc + "\n"
3488ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    for i in range((len(relocs) + relocsPerDummy - 1) / relocsPerDummy):
3498ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      src += dummyReloc.format(i) + "\n"
3508ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    if srcType == "asm":
3518ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      compileAsm(filename, triple, src)
3528ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    elif srcType == "ir":
3538ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      compileIR(filename, triple, src)
3548ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  else:
3558ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    src = (dummyReloc + "\n") * len(relocs)
3568ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    compileAsm(filename, triple, src)
3578ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3588ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  print("  Patching relocations...")
3598ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  patchMacho(filename, relocs)
3608ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3618ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckdef patchMacho(filename, relocs):
3628ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  f = BinaryReader(filename)
3638ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3648ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  magic = f.read(4)
3658ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  if magic == '\xFE\xED\xFA\xCE':
3668ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    f.isLSB, f.is64Bit = False, False
3678ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  elif magic == '\xCE\xFA\xED\xFE':
3688ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    f.isLSB, f.is64Bit = True, False
3698ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  elif magic == '\xFE\xED\xFA\xCF':
3708ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    f.isLSB, f.is64Bit = False, True
3718ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  elif magic == '\xCF\xFA\xED\xFE':
3728ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    f.isLSB, f.is64Bit = True, True
3738ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  else:
3748ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    raise ValueError,"Not a Mach-O object file: %r (bad magic)" % path
3758ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3768ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  cputype = f.uint32()
3778ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  cpusubtype = f.uint32()
3788ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  filetype = f.uint32()
3798ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  numLoadCommands = f.uint32()
3808ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  loadCommandsSize = f.uint32()
3818ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  flag = f.uint32()
3828ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  if f.is64Bit:
3838ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    reserved = f.uint32()
3848ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3858ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  start = f.tell()
3868ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3878ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  for i in range(numLoadCommands):
3888ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    patchMachoLoadCommand(f, relocs)
3898ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3908ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  if f.tell() - start != loadCommandsSize:
3918ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    raise ValueError,"%s: warning: invalid load commands size: %r" % (
3928ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      sys.argv[0], loadCommandsSize)
3938ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3948ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckdef patchMachoLoadCommand(f, relocs):
3958ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  start = f.tell()
3968ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  cmd = f.uint32()
3978ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  cmdSize = f.uint32()
3988ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
3998ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  if cmd == 1:
4008ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    patchMachoSegmentLoadCommand(f, relocs)
4018ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  elif cmd == 25:
4028ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    patchMachoSegmentLoadCommand(f, relocs)
4038ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  else:
4048ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    f.read(cmdSize - 8)
4058ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
4068ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  if f.tell() - start != cmdSize:
4078ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    raise ValueError,"%s: warning: invalid load command size: %r" % (
4088ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck      sys.argv[0], cmdSize)
4098ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
4108ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckdef patchMachoSegmentLoadCommand(f, relocs):
4118ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  segment_name = f.read(16)
4128ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  vm_addr = f.word()
4138ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  vm_size = f.word()
4148ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  file_offset = f.word()
4158ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  file_size = f.word()
4168ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  maxprot = f.uint32()
4178ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  initprot = f.uint32()
4188ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  numSections = f.uint32()
4198ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  flags = f.uint32()
4208ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  for i in range(numSections):
4218ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    patchMachoSection(f, relocs)
4228ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
4238ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckdef patchMachoSection(f, relocs):
4248ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  section_name = f.read(16)
4258ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  segment_name = f.read(16)
4268ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  address = f.word()
4278ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  size = f.word()
4288ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  offset = f.uint32()
4298ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  alignment = f.uint32()
4308ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  relocOffset = f.uint32()
4318ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  numReloc = f.uint32()
4328ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  flags = f.uint32()
4338ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  reserved1 = f.uint32()
4348ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  reserved2 = f.uint32()
4358ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  if f.is64Bit:
4368ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    reserved3 = f.uint32()
4378ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
4388ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  prev_pos = f.tell()
4398ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
4408ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  f.seek(relocOffset)
4418ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  for i in range(numReloc):
4428ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    ri = i < len(relocs) and i or 0
4438ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    print("    %s" % relocs[ri][0])
4448ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    word1 = f.uint32()
4458ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    pos = f.tell()
4468ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    value = f.uint32()
4478ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    f.seek(pos)
4488ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    value = (value & 0x0FFFFFFF) | ((relocs[ri][1] & 0xF) << 28)
4498ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck    f.writeUInt32(value)
4508ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  f.seek(prev_pos)
4518ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
4528ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
4538ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Elf_X86_64(Enum):
4548ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_NONE       = 0
4558ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_64         = 1
4568ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_PC32       = 2
4578ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_GOT32      = 3
4588ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_PLT32      = 4
4598ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_COPY       = 5
4608ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_GLOB_DAT   = 6
4618ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_JUMP_SLOT  = 7
4628ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_RELATIVE   = 8
4638ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_GOTPCREL   = 9
4648ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_32         = 10
4658ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_32S        = 11
4668ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_16         = 12
4678ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_PC16       = 13
4688ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_8          = 14
4698ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_PC8        = 15
4708ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_DTPMOD64   = 16
4718ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_DTPOFF64   = 17
4728ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_TPOFF64    = 18
4738ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_TLSGD      = 19
4748ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_TLSLD      = 20
4758ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_DTPOFF32   = 21
4768ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_GOTTPOFF   = 22
4778ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_TPOFF32    = 23
4788ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_PC64       = 24
4798ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_GOTOFF64   = 25
4808ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_GOTPC32    = 26
4818ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_GOT64      = 27
4828ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_GOTPCREL64 = 28
4838ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_GOTPC64    = 29
4848ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_GOTPLT64   = 30
4858ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_PLTOFF64   = 31
4868ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_SIZE32     = 32
4878ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_SIZE64     = 33
4888ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_GOTPC32_TLSDESC = 34
4898ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_TLSDESC_CALL    = 35
4908ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_TLSDESC    = 36
4918ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_X86_64_IRELATIVE  = 37
4928ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
4938ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Elf_i386(Enum):
4948ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_NONE          = 0
4958ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_32            = 1
4968ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_PC32          = 2
4978ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_GOT32         = 3
4988ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_PLT32         = 4
4998ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_COPY          = 5
5008ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_GLOB_DAT      = 6
5018ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_JUMP_SLOT     = 7
5028ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_RELATIVE      = 8
5038ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_GOTOFF        = 9
5048ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_GOTPC         = 10
5058ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_32PLT         = 11
5068ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_TPOFF     = 14
5078ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_IE        = 15
5088ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_GOTIE     = 16
5098ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_LE        = 17
5108ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_GD        = 18
5118ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_LDM       = 19
5128ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_16            = 20
5138ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_PC16          = 21
5148ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_8             = 22
5158ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_PC8           = 23
5168ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_GD_32     = 24
5178ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_GD_PUSH   = 25
5188ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_GD_CALL   = 26
5198ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_GD_POP    = 27
5208ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_LDM_32    = 28
5218ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_LDM_PUSH  = 29
5228ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_LDM_CALL  = 30
5238ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_LDM_POP   = 31
5248ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_LDO_32    = 32
5258ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_IE_32     = 33
5268ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_LE_32     = 34
5278ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_DTPMOD32  = 35
5288ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_DTPOFF32  = 36
5298ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_TPOFF32   = 37
5308ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_GOTDESC   = 39
5318ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_DESC_CALL = 40
5328ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_TLS_DESC      = 41
5338ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_IRELATIVE     = 42
5348ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_386_NUM           = 43
5358ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
5368ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Elf_PPC32(Enum):
5378ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_NONE                  = 0
5388ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_ADDR32                = 1
5398ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_ADDR24                = 2
5408ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_ADDR16                = 3
5418ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_ADDR16_LO             = 4
5428ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_ADDR16_HI             = 5
5438ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_ADDR16_HA             = 6
5448ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_ADDR14                = 7
5458ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_ADDR14_BRTAKEN        = 8
5468ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_ADDR14_BRNTAKEN       = 9
5478ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_REL24                 = 10
5488ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_REL14                 = 11
5498ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_REL14_BRTAKEN         = 12
5508ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_REL14_BRNTAKEN        = 13
5518ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_REL32                 = 26
5528ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_TPREL16_LO            = 70
5538ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC_TPREL16_HA            = 72
5548ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
5558ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Elf_PPC64(Enum):
5568ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_NONE                = 0
5578ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_ADDR32              = 1
5588ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_ADDR16_LO           = 4
5598ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_ADDR16_HI           = 5
5608ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_ADDR14              = 7
5618ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_REL24               = 10
5628ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_REL32               = 26
5638ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_ADDR64              = 38
5648ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_ADDR16_HIGHER       = 39
5658ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_ADDR16_HIGHEST      = 41
5668ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_REL64               = 44
5678ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_TOC16               = 47
5688ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_TOC16_LO            = 48
5698ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_TOC16_HA            = 50
5708ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_TOC                 = 51
5718ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_ADDR16_DS           = 56
5728ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_ADDR16_LO_DS        = 57
5738ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_TOC16_DS            = 63
5748ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_TOC16_LO_DS         = 64
5758ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_TLS                 = 67
5768ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_TPREL16_LO          = 70
5778ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_TPREL16_HA          = 72
5788ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_DTPREL16_LO         = 75
5798ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_DTPREL16_HA         = 77
5808ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_GOT_TLSGD16_LO      = 80
5818ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_GOT_TLSGD16_HA      = 82
5828ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_GOT_TLSLD16_LO      = 84
5838ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_GOT_TLSLD16_HA      = 86
5848ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_GOT_TPREL16_LO_DS   = 88
5858ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_GOT_TPREL16_HA      = 90
5868ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_TLSGD               = 107
5878ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_PPC64_TLSLD               = 108
5888ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
5898ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Elf_AArch64(Enum):
5908ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_NONE                        = 0x100
5918ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_ABS64                       = 0x101
5928ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_ABS32                       = 0x102
5938ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_ABS16                       = 0x103
5948ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_PREL64                      = 0x104
5958ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_PREL32                      = 0x105
5968ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_PREL16                      = 0x106
5978ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_MOVW_UABS_G0                = 0x107
5988ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_MOVW_UABS_G0_NC             = 0x108
5998ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_MOVW_UABS_G1                = 0x109
6008ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_MOVW_UABS_G1_NC             = 0x10a
6018ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_MOVW_UABS_G2                = 0x10b
6028ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_MOVW_UABS_G2_NC             = 0x10c
6038ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_MOVW_UABS_G3                = 0x10d
6048ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_MOVW_SABS_G0                = 0x10e
6058ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_MOVW_SABS_G1                = 0x10f
6068ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_MOVW_SABS_G2                = 0x110
6078ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_LD_PREL_LO19                = 0x111
6088ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_ADR_PREL_LO21               = 0x112
6098ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_ADR_PREL_PG_HI21            = 0x113
6108ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_ADD_ABS_LO12_NC             = 0x115
6118ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_LDST8_ABS_LO12_NC           = 0x116
6128ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TSTBR14                     = 0x117
6138ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_CONDBR19                    = 0x118
6148ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_JUMP26                      = 0x11a
6158ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_CALL26                      = 0x11b
6168ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_LDST16_ABS_LO12_NC          = 0x11c
6178ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_LDST32_ABS_LO12_NC          = 0x11d
6188ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_LDST64_ABS_LO12_NC          = 0x11e
6198ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_LDST128_ABS_LO12_NC         = 0x12b
6208ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_ADR_GOT_PAGE                = 0x137
6218ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_LD64_GOT_LO12_NC            = 0x138
6228ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_MOVW_DTPREL_G2        = 0x20b
6238ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_MOVW_DTPREL_G1        = 0x20c
6248ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC     = 0x20d
6258ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_MOVW_DTPREL_G0        = 0x20e
6268ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC     = 0x20f
6278ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_ADD_DTPREL_HI12       = 0x210
6288ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_ADD_DTPREL_LO12       = 0x211
6298ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC    = 0x212
6308ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_LDST8_DTPREL_LO12     = 0x213
6318ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC  = 0x214
6328ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_LDST16_DTPREL_LO12    = 0x215
6338ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC = 0x216
6348ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_LDST32_DTPREL_LO12    = 0x217
6358ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC = 0x218
6368ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_LDST64_DTPREL_LO12    = 0x219
6378ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC = 0x21a
6388ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSIE_MOVW_GOTTPREL_G1      = 0x21b
6398ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC   = 0x21c
6408ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21   = 0x21d
6418ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC = 0x21e
6428ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSIE_LD_GOTTPREL_PREL19    = 0x21f
6438ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_MOVW_TPREL_G2         = 0x220
6448ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_MOVW_TPREL_G1         = 0x221
6458ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_MOVW_TPREL_G1_NC      = 0x222
6468ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_MOVW_TPREL_G0         = 0x223
6478ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_MOVW_TPREL_G0_NC      = 0x224
6488ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_ADD_TPREL_HI12        = 0x225
6498ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_ADD_TPREL_LO12        = 0x226
6508ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_ADD_TPREL_LO12_NC     = 0x227
6518ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_LDST8_TPREL_LO12      = 0x228
6528ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC   = 0x229
6538ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_LDST16_TPREL_LO12     = 0x22a
6548ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC  = 0x22b
6558ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_LDST32_TPREL_LO12     = 0x22c
6568ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC  = 0x22d
6578ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_LDST64_TPREL_LO12     = 0x22e
6588ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC  = 0x22f
6598ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSDESC_ADR_PAGE            = 0x232
6608ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSDESC_LD64_LO12_NC        = 0x233
6618ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSDESC_ADD_LO12_NC         = 0x234
6628ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_AARCH64_TLSDESC_CALL                = 0x239
6638ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
6648ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Elf_ARM(Enum):
6658ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_NONE                  = 0x00
6668ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PC24                  = 0x01
6678ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ABS32                 = 0x02
6688ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_REL32                 = 0x03
6698ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDR_PC_G0             = 0x04
6708ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ABS16                 = 0x05
6718ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ABS12                 = 0x06
6728ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_ABS5              = 0x07
6738ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ABS8                  = 0x08
6748ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_SBREL32               = 0x09
6758ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_CALL              = 0x0a
6768ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_PC8               = 0x0b
6778ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_BREL_ADJ              = 0x0c
6788ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_DESC              = 0x0d
6798ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_SWI8              = 0x0e
6808ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_XPC25                 = 0x0f
6818ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_XPC22             = 0x10
6828ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_DTPMOD32          = 0x11
6838ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_DTPOFF32          = 0x12
6848ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_TPOFF32           = 0x13
6858ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_COPY                  = 0x14
6868ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_GLOB_DAT              = 0x15
6878ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_JUMP_SLOT             = 0x16
6888ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_RELATIVE              = 0x17
6898ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_GOTOFF32              = 0x18
6908ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_BASE_PREL             = 0x19
6918ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_GOT_BREL              = 0x1a
6928ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PLT32                 = 0x1b
6938ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_CALL                  = 0x1c
6948ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_JUMP24                = 0x1d
6958ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_JUMP24            = 0x1e
6968ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_BASE_ABS              = 0x1f
6978ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_PCREL_7_0         = 0x20
6988ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_PCREL_15_8        = 0x21
6998ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_PCREL_23_15       = 0x22
7008ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDR_SBREL_11_0_NC     = 0x23
7018ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_SBREL_19_12_NC    = 0x24
7028ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_SBREL_27_20_CK    = 0x25
7038ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TARGET1               = 0x26
7048ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_SBREL31               = 0x27
7058ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_V4BX                  = 0x28
7068ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TARGET2               = 0x29
7078ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PREL31                = 0x2a
7088ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_MOVW_ABS_NC           = 0x2b
7098ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_MOVT_ABS              = 0x2c
7108ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_MOVW_PREL_NC          = 0x2d
7118ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_MOVT_PREL             = 0x2e
7128ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_MOVW_ABS_NC       = 0x2f
7138ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_MOVT_ABS          = 0x30
7148ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_MOVW_PREL_NC      = 0x31
7158ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_MOVT_PREL         = 0x32
7168ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_JUMP19            = 0x33
7178ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_JUMP6             = 0x34
7188ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_ALU_PREL_11_0     = 0x35
7198ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_PC12              = 0x36
7208ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ABS32_NOI             = 0x37
7218ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_REL32_NOI             = 0x38
7228ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_PC_G0_NC          = 0x39
7238ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_PC_G0             = 0x3a
7248ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_PC_G1_NC          = 0x3b
7258ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_PC_G1             = 0x3c
7268ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_PC_G2             = 0x3d
7278ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDR_PC_G1             = 0x3e
7288ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDR_PC_G2             = 0x3f
7298ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDRS_PC_G0            = 0x40
7308ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDRS_PC_G1            = 0x41
7318ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDRS_PC_G2            = 0x42
7328ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDC_PC_G0             = 0x43
7338ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDC_PC_G1             = 0x44
7348ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDC_PC_G2             = 0x45
7358ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_SB_G0_NC          = 0x46
7368ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_SB_G0             = 0x47
7378ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_SB_G1_NC          = 0x48
7388ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_SB_G1             = 0x49
7398ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ALU_SB_G2             = 0x4a
7408ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDR_SB_G0             = 0x4b
7418ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDR_SB_G1             = 0x4c
7428ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDR_SB_G2             = 0x4d
7438ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDRS_SB_G0            = 0x4e
7448ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDRS_SB_G1            = 0x4f
7458ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDRS_SB_G2            = 0x50
7468ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDC_SB_G0             = 0x51
7478ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDC_SB_G1             = 0x52
7488ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_LDC_SB_G2             = 0x53
7498ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_MOVW_BREL_NC          = 0x54
7508ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_MOVT_BREL             = 0x55
7518ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_MOVW_BREL             = 0x56
7528ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_MOVW_BREL_NC      = 0x57
7538ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_MOVT_BREL         = 0x58
7548ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_MOVW_BREL         = 0x59
7558ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_GOTDESC           = 0x5a
7568ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_CALL              = 0x5b
7578ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_DESCSEQ           = 0x5c
7588ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_TLS_CALL          = 0x5d
7598ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PLT32_ABS             = 0x5e
7608ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_GOT_ABS               = 0x5f
7618ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_GOT_PREL              = 0x60
7628ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_GOT_BREL12            = 0x61
7638ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_GOTOFF12              = 0x62
7648ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_GOTRELAX              = 0x63
7658ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_GNU_VTENTRY           = 0x64
7668ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_GNU_VTINHERIT         = 0x65
7678ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_JUMP11            = 0x66
7688ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_JUMP8             = 0x67
7698ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_GD32              = 0x68
7708ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_LDM32             = 0x69
7718ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_LDO32             = 0x6a
7728ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_IE32              = 0x6b
7738ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_LE32              = 0x6c
7748ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_LDO12             = 0x6d
7758ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_LE12              = 0x6e
7768ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_TLS_IE12GP            = 0x6f
7778ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_0             = 0x70
7788ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_1             = 0x71
7798ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_2             = 0x72
7808ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_3             = 0x73
7818ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_4             = 0x74
7828ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_5             = 0x75
7838ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_6             = 0x76
7848ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_7             = 0x77
7858ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_8             = 0x78
7868ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_9             = 0x79
7878ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_10            = 0x7a
7888ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_11            = 0x7b
7898ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_12            = 0x7c
7908ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_13            = 0x7d
7918ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_14            = 0x7e
7928ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_PRIVATE_15            = 0x7f
7938ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_ME_TOO                = 0x80
7948ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_TLS_DESCSEQ16     = 0x81
7958ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_ARM_THM_TLS_DESCSEQ32     = 0x82
7968ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
7978ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Elf_Mips(Enum):
7988ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_NONE              =  0
7998ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_16                =  1
8008ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_32                =  2
8018ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_REL32             =  3
8028ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_26                =  4
8038ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_HI16              =  5
8048ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_LO16              =  6
8058ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_GPREL16           =  7
8068ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_LITERAL           =  8
8078ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_GOT16             =  9
8088ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_PC16              = 10
8098ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_CALL16            = 11
8108ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_GPREL32           = 12
8118ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_SHIFT5            = 16
8128ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_SHIFT6            = 17
8138ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_64                = 18
8148ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_GOT_DISP          = 19
8158ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_GOT_PAGE          = 20
8168ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_GOT_OFST          = 21
8178ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_GOT_HI16          = 22
8188ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_GOT_LO16          = 23
8198ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_SUB               = 24
8208ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_INSERT_A          = 25
8218ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_INSERT_B          = 26
8228ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_DELETE            = 27
8238ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_HIGHER            = 28
8248ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_HIGHEST           = 29
8258ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_CALL_HI16         = 30
8268ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_CALL_LO16         = 31
8278ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_SCN_DISP          = 32
8288ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_REL16             = 33
8298ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_ADD_IMMEDIATE     = 34
8308ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_PJUMP             = 35
8318ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_RELGOT            = 36
8328ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_JALR              = 37
8338ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_DTPMOD32      = 38
8348ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_DTPREL32      = 39
8358ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_DTPMOD64      = 40
8368ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_DTPREL64      = 41
8378ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_GD            = 42
8388ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_LDM           = 43
8398ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_DTPREL_HI16   = 44
8408ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_DTPREL_LO16   = 45
8418ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_GOTTPREL      = 46
8428ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_TPREL32       = 47
8438ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_TPREL64       = 48
8448ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_TPREL_HI16    = 49
8458ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_TLS_TPREL_LO16    = 50
8468ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_GLOB_DAT          = 51
8478ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_COPY              = 126
8488ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_JUMP_SLOT         = 127
8498ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_MIPS_NUM               = 218
8508ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
8518ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Elf_Hexagon(Enum):
8528ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_NONE              =  0
8538ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_B22_PCREL         =  1
8548ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_B15_PCREL         =  2
8558ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_B7_PCREL          =  3
8568ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_LO16              =  4
8578ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_HI16              =  5
8588ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_32                =  6
8598ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_16                =  7
8608ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_8                 =  8
8618ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GPREL16_0         =  9
8628ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GPREL16_1         =  10
8638ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GPREL16_2         =  11
8648ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GPREL16_3         =  12
8658ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_HL16              =  13
8668ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_B13_PCREL         =  14
8678ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_B9_PCREL          =  15
8688ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_B32_PCREL_X       =  16
8698ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_32_6_X            =  17
8708ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_B22_PCREL_X       =  18
8718ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_B15_PCREL_X       =  19
8728ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_B13_PCREL_X       =  20
8738ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_B9_PCREL_X        =  21
8748ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_B7_PCREL_X        =  22
8758ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_16_X              =  23
8768ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_12_X              =  24
8778ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_11_X              =  25
8788ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_10_X              =  26
8798ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_9_X               =  27
8808ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_8_X               =  28
8818ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_7_X               =  29
8828ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_6_X               =  30
8838ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_32_PCREL          =  31
8848ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_COPY              =  32
8858ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GLOB_DAT          =  33
8868ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_JMP_SLOT          =  34
8878ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_RELATIVE          =  35
8888ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_PLT_B22_PCREL     =  36
8898ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOTREL_LO16       =  37
8908ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOTREL_HI16       =  38
8918ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOTREL_32         =  39
8928ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOT_LO16          =  40
8938ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOT_HI16          =  41
8948ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOT_32            =  42
8958ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOT_16            =  43
8968ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_DTPMOD_32         =  44
8978ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_DTPREL_LO16       =  45
8988ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_DTPREL_HI16       =  46
8998ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_DTPREL_32         =  47
9008ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_DTPREL_16         =  48
9018ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GD_PLT_B22_PCREL  =  49
9028ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GD_GOT_LO16       =  50
9038ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GD_GOT_HI16       =  51
9048ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GD_GOT_32         =  52
9058ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GD_GOT_16         =  53
9068ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_IE_LO16           =  54
9078ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_IE_HI16           =  55
9088ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_IE_32             =  56
9098ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_IE_GOT_LO16       =  57
9108ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_IE_GOT_HI16       =  58
9118ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_IE_GOT_32         =  59
9128ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_IE_GOT_16         =  60
9138ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_TPREL_LO16        =  61
9148ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_TPREL_HI16        =  62
9158ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_TPREL_32          =  63
9168ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_TPREL_16          =  64
9178ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_6_PCREL_X         =  65
9188ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOTREL_32_6_X     =  66
9198ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOTREL_16_X       =  67
9208ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOTREL_11_X       =  68
9218ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOT_32_6_X        =  69
9228ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOT_16_X          =  70
9238ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GOT_11_X          =  71
9248ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_DTPREL_32_6_X     =  72
9258ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_DTPREL_16_X       =  73
9268ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_DTPREL_11_X       =  74
9278ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GD_GOT_32_6_X     =  75
9288ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GD_GOT_16_X       =  76
9298ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_GD_GOT_11_X       =  77
9308ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_IE_32_6_X         =  78
9318ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_IE_16_X           =  79
9328ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_IE_GOT_32_6_X     =  80
9338ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_IE_GOT_16_X       =  81
9348ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_IE_GOT_11_X       =  82
9358ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_TPREL_32_6_X      =  83
9368ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_TPREL_16_X        =  84
9378ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  R_HEX_TPREL_11_X        =  85
9388ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
9398ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
9408ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Coff_i386(Enum):
9418ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_I386_ABSOLUTE = 0x0000
9428ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_I386_DIR16    = 0x0001
9438ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_I386_REL16    = 0x0002
9448ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_I386_DIR32    = 0x0006
9458ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_I386_DIR32NB  = 0x0007
9468ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_I386_SEG12    = 0x0009
9478ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_I386_SECTION  = 0x000A
9488ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_I386_SECREL   = 0x000B
9498ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_I386_TOKEN    = 0x000C
9508ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_I386_SECREL7  = 0x000D
9518ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_I386_REL32    = 0x0014
9528ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
9538ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Coff_X86_64(Enum):
9548ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_ABSOLUTE  = 0x0000
9558ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_ADDR64    = 0x0001
9568ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_ADDR32    = 0x0002
9578ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_ADDR32NB  = 0x0003
9588ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_REL32     = 0x0004
9598ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_REL32_1   = 0x0005
9608ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_REL32_2   = 0x0006
9618ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_REL32_3   = 0x0007
9628ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_REL32_4   = 0x0008
9638ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_REL32_5   = 0x0009
9648ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_SECTION   = 0x000A
9658ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_SECREL    = 0x000B
9668ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_SECREL7   = 0x000C
9678ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_TOKEN     = 0x000D
9688ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_SREL32    = 0x000E
9698ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_PAIR      = 0x000F
9708ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_AMD64_SSPAN32   = 0x0010
9718ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
9728ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Coff_ARM(Enum):
9738ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_ABSOLUTE  = 0x0000
9748ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_ADDR32    = 0x0001
9758ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_ADDR32NB  = 0x0002
9768ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_BRANCH24  = 0x0003
9778ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_BRANCH11  = 0x0004
9788ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_TOKEN     = 0x0005
9798ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_BLX24     = 0x0008
9808ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_BLX11     = 0x0009
9818ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_SECTION   = 0x000E
9828ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_SECREL    = 0x000F
9838ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_MOV32A    = 0x0010
9848ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_MOV32T    = 0x0011
9858ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_BRANCH20T = 0x0012
9868ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_BRANCH24T = 0x0014
9878ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  IMAGE_REL_ARM_BLX23T    = 0x0015
9888ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
9898ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
9908ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Macho_i386(Enum):
9918ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_Vanilla                     = 0
9928ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_Pair                        = 1
9938ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_Difference                  = 2
9948ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_Generic_PreboundLazyPointer = 3
9958ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_Generic_LocalDifference     = 4
9968ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_Generic_TLV                 = 5
9978ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
9988ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Macho_X86_64(Enum):
9998ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_X86_64_Unsigned   = 0
10008ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_X86_64_Signed     = 1
10018ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_X86_64_Branch     = 2
10028ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_X86_64_GOTLoad    = 3
10038ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_X86_64_GOT        = 4
10048ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_X86_64_Subtractor = 5
10058ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_X86_64_Signed1    = 6
10068ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_X86_64_Signed2    = 7
10078ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_X86_64_Signed4    = 8
10088ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_X86_64_TLV        = 9
10098ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
10108ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Macho_ARM(Enum):
10118ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_Vanilla                     = 0
10128ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_Pair                        = 1
10138ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_Difference                  = 2
10148ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_ARM_LocalDifference         = 3
10158ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_ARM_PreboundLazyPointer     = 4
10168ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_ARM_Branch24Bit             = 5
10178ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_ARM_ThumbBranch22Bit        = 6
10188ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_ARM_ThumbBranch32Bit        = 7
10198ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_ARM_Half                    = 8
10208ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  RIT_ARM_HalfDifference          = 9
10218ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
10228ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieckclass Relocs_Macho_PPC(Enum):
10238ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_VANILLA        = 0
10248ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_PAIR           = 1
10258ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_BR14           = 2
10268ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_BR24           = 3
10278ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_HI16           = 4
10288ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_LO16           = 5
10298ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_HA16           = 6
10308ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_LO14           = 7
10318ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_SECTDIFF       = 8
10328ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_PB_LA_PTR      = 9
10338ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_HI16_SECTDIFF  = 10
10348ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_LO16_SECTDIFF  = 11
10358ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_HA16_SECTDIFF  = 12
10368ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_JBSR           = 13
10378ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_LO14_SECTDIFF  = 14
10388ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck  PPC_RELOC_LOCAL_SECTDIFF = 15
10398ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
10408ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
10418ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckcraftElf("relocs.obj.elf-x86_64",   "x86_64-pc-linux-gnu",         Relocs_Elf_X86_64.entries(), "leaq sym@GOTTPOFF(%rip), %rax")
10428ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckcraftElf("relocs.obj.elf-i386",     "i386-pc-linux-gnu",           Relocs_Elf_i386.entries(),   "mov sym@GOTOFF(%ebx), %eax")
10438ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck#craftElf("relocs-elf-ppc32",   "powerpc-unknown-linux-gnu",   Relocs_Elf_PPC32.entries(), ...)
10448ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckcraftElf("relocs.obj.elf-ppc64",   "powerpc64-unknown-linux-gnu", Relocs_Elf_PPC64.entries(),
10458ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck         ("@t = thread_local global i32 0, align 4", "define i32* @f{0}() nounwind {{ ret i32* @t }}", 2))
10468ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckcraftElf("relocs.obj.elf-aarch64",  "aarch64",                     Relocs_Elf_AArch64.entries(), "movz x0, #:abs_g0:sym")
10478ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckcraftElf("relocs.obj.elf-arm",      "arm-unknown-unknown",         Relocs_Elf_ARM.entries(), "b sym")
10488ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckcraftElf("relocs.obj.elf-mips",     "mips-unknown-linux",          Relocs_Elf_Mips.entries(), "lui $2, %hi(sym)")
10498ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckcraftElf("relocs.obj.elf-mips64el", "mips64el-unknown-linux",        Relocs_Elf_Mips.entries(), "lui $2, %hi(sym)")
10508ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck#craftElf("relocs.obj.elf-hexagon",  "hexagon-unknown-unknown",     Relocs_Elf_Hexagon.entries(), ...)
10518ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
10528ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckcraftCoff("relocs.obj.coff-i386",   "i386-pc-win32",   Relocs_Coff_i386.entries(),   "mov foo@imgrel(%ebx, %ecx, 4), %eax")
10538ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckcraftCoff("relocs.obj.coff-x86_64", "x86_64-pc-win32", Relocs_Coff_X86_64.entries(), "mov foo@imgrel(%ebx, %ecx, 4), %eax")
10548ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck#craftCoff("relocs.obj.coff-arm",    "arm-pc-win32",    Relocs_Coff_ARM.entries(), "...")
10558ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck
10568ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckcraftMacho("relocs.obj.macho-i386",   "i386-apple-darwin9", Relocs_Macho_i386.entries(),
10578ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck          ("asm", ".subsections_via_symbols; .text; a: ; b:", "call a", 1))
10588ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckcraftMacho("relocs.obj.macho-x86_64", "x86_64-apple-darwin9", Relocs_Macho_X86_64.entries(),
10598ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck          ("asm", ".subsections_via_symbols; .text; a: ; b:", "call a", 1))
10608ed205f0a35337089407a57cc8e01de59bc4e26bNico RieckcraftMacho("relocs.obj.macho-arm",    "armv7-apple-darwin10", Relocs_Macho_ARM.entries(), "bl sym")
10618ed205f0a35337089407a57cc8e01de59bc4e26bNico Rieck#craftMacho("relocs.obj.macho-ppc",   "powerpc-apple-darwin10", Relocs_Macho_PPC.entries(), ...)
1062