Skip to content

Commit

Permalink
Allow ELF64 relocation type to be more than 8 bits.
Browse files Browse the repository at this point in the history
Current targets don't have more than 256 relocations so they don't hit this
limit, but ELF64 actually allows more than 8 bits for a relocation type. These
were being truncated on AArch64.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171845 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
Tim Northover authored and Tim Northover committed Jan 8, 2013
1 parent 40b2c32 commit 0b74023
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions include/llvm/Object/ELF.h
Original file line number Diff line number Diff line change
Expand Up @@ -387,14 +387,14 @@ struct Elf_Rel_Impl<target_endianness, max_alignment, true, isRela>

// These accessors and mutators correspond to the ELF64_R_SYM, ELF64_R_TYPE,
// and ELF64_R_INFO macros defined in the ELF specification:
uint64_t getSymbol() const { return (r_info >> 32); }
unsigned char getType() const {
return (unsigned char) (r_info & 0xffffffffL);
uint32_t getSymbol() const { return (uint32_t) (r_info >> 32); }
uint32_t getType() const {
return (uint32_t) (r_info & 0xffffffffL);
}
void setSymbol(uint64_t s) { setSymbolAndType(s, getType()); }
void setType(unsigned char t) { setSymbolAndType(getSymbol(), t); }
void setSymbolAndType(uint64_t s, unsigned char t) {
r_info = (s << 32) + (t&0xffffffffL);
void setSymbol(uint32_t s) { setSymbolAndType(s, getType()); }
void setType(uint32_t t) { setSymbolAndType(getSymbol(), t); }
void setSymbolAndType(uint32_t s, uint32_t t) {
r_info = ((uint64_t)s << 32) + (t&0xffffffffL);
}
};

Expand Down Expand Up @@ -1553,7 +1553,7 @@ error_code ELFObjectFile<target_endianness, max_alignment, is64Bits>
::getRelocationTypeName(DataRefImpl Rel,
SmallVectorImpl<char> &Result) const {
const Elf_Shdr *sec = getSection(Rel.w.b);
uint8_t type;
uint32_t type;
StringRef res;
switch (sec->sh_type) {
default :
Expand Down

0 comments on commit 0b74023

Please sign in to comment.