diff options
author | Christopher Lamb <christopher.lamb@gmail.com> | 2007-04-30 20:41:08 +0000 |
---|---|---|
committer | Christopher Lamb <christopher.lamb@gmail.com> | 2007-04-30 20:41:08 +0000 |
commit | 99eaef9b06ca8326fd2a6eca6f9eb2c546ace088 (patch) | |
tree | 6a7aeaf353555d7c22cfc7eae704b4759709c3d6 /include/llvm/CodeGen/ELFRelocation.h | |
parent | bd4e080a16b3baf0b6c463ad57adac0b5e0262dc (diff) | |
download | llvm-99eaef9b06ca8326fd2a6eca6f9eb2c546ace088.tar.gz llvm-99eaef9b06ca8326fd2a6eca6f9eb2c546ace088.tar.bz2 llvm-99eaef9b06ca8326fd2a6eca6f9eb2c546ace088.tar.xz |
Header file for ELF relocations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36597 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen/ELFRelocation.h')
-rw-r--r-- | include/llvm/CodeGen/ELFRelocation.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/ELFRelocation.h b/include/llvm/CodeGen/ELFRelocation.h new file mode 100644 index 0000000000..2120d7323b --- /dev/null +++ b/include/llvm/CodeGen/ELFRelocation.h @@ -0,0 +1,49 @@ +//=== ELFRelocation.h - ELF Relocation Info ---------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by Christopher Lamb and is distributed under the +// University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the ELFRelocation class. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CODEGEN_ELF_RELOCATION_H +#define LLVM_CODEGEN_ELF_RELOCATION_H + +namespace llvm { + + /// ELFRelocation - This class contains all the information necessary to + /// to generate any 32-bit or 64-bit ELF relocation entry. + class ELFRelocation { + uint64_t r_offset; // offset in the section of the object this applies to + uint32_t r_symidx; // symbol table index of the symbol to use + uint32_t r_type; // machine specific relocation type + int64_t r_add; // explicit relocation addend + bool r_rela; // if true then the addend is part of the entry + // otherwise the addend is at the location specified + // by r_offset + public: + + uint64_t getInfo(bool is64Bit = false) const { + if (is64Bit) + return ((uint64_t)r_symidx << 32) + ((uint64_t)r_type & 0xFFFFFFFFL); + else + return (r_symidx << 8) + (r_type & 0xFFL); + } + + uint64_t getOffset() const { return r_offset; } + uint64_t getAddress() const { return r_add; } + + ELFRelocation(uint64_t off, uint32_t sym, uint32_t type, + bool rela = true, int64_t addend = 0) : + r_offset(off), r_symidx(sym), r_type(type), + r_add(addend), r_rela(rela) {} + }; + +} // end llvm namespace + +#endif // LLVM_CODEGEN_ELF_RELOCATION_H
\ No newline at end of file |