Change relocation type to unsigned

This commit is contained in:
Richard Chien 2022-05-17 14:05:56 +00:00 committed by Serge Lamikhov-Center
parent 21fa533df3
commit 01f8fed8ad
4 changed files with 171 additions and 170 deletions

View File

@ -703,99 +703,100 @@ constexpr unsigned char STV_PROTECTED = 3;
constexpr Elf_Word STN_UNDEF = 0;
// Relocation types
constexpr unsigned char R_386_NONE = 0;
constexpr unsigned char R_X86_64_NONE = 0;
constexpr unsigned char R_AMDGPU_NONE = 0;
constexpr unsigned char R_386_32 = 1;
constexpr unsigned char R_X86_64_64 = 1;
constexpr unsigned char R_AMDGPU_ABS32_LO = 1;
constexpr unsigned char R_386_PC32 = 2;
constexpr unsigned char R_X86_64_PC32 = 2;
constexpr unsigned char R_AMDGPU_ABS32_HI = 2;
constexpr unsigned char R_386_GOT32 = 3;
constexpr unsigned char R_X86_64_GOT32 = 3;
constexpr unsigned char R_AMDGPU_ABS64 = 3;
constexpr unsigned char R_386_PLT32 = 4;
constexpr unsigned char R_X86_64_PLT32 = 4;
constexpr unsigned char R_AMDGPU_REL32 = 4;
constexpr unsigned char R_386_COPY = 5;
constexpr unsigned char R_X86_64_COPY = 5;
constexpr unsigned char R_AMDGPU_REL64 = 5;
constexpr unsigned char R_386_GLOB_DAT = 6;
constexpr unsigned char R_X86_64_GLOB_DAT = 6;
constexpr unsigned char R_AMDGPU_ABS32 = 6;
constexpr unsigned char R_386_JMP_SLOT = 7;
constexpr unsigned char R_X86_64_JUMP_SLOT = 7;
constexpr unsigned char R_AMDGPU_GOTPCREL = 7;
constexpr unsigned char R_386_RELATIVE = 8;
constexpr unsigned char R_X86_64_RELATIVE = 8;
constexpr unsigned char R_AMDGPU_GOTPCREL32_LO = 8;
constexpr unsigned char R_386_GOTOFF = 9;
constexpr unsigned char R_X86_64_GOTPCREL = 9;
constexpr unsigned char R_AMDGPU_GOTPCREL32_HI = 9;
constexpr unsigned char R_386_GOTPC = 10;
constexpr unsigned char R_X86_64_32 = 10;
constexpr unsigned char R_AMDGPU_REL32_LO = 10;
constexpr unsigned char R_386_32PLT = 11;
constexpr unsigned char R_X86_64_32S = 11;
constexpr unsigned char R_AMDGPU_REL32_HI = 11;
constexpr unsigned char R_X86_64_16 = 12;
constexpr unsigned char R_X86_64_PC16 = 13;
constexpr unsigned char R_AMDGPU_RELATIVE64 = 13;
constexpr unsigned char R_386_TLS_TPOFF = 14;
constexpr unsigned char R_X86_64_8 = 14;
constexpr unsigned char R_386_TLS_IE = 15;
constexpr unsigned char R_X86_64_PC8 = 15;
constexpr unsigned char R_386_TLS_GOTIE = 16;
constexpr unsigned char R_X86_64_DTPMOD64 = 16;
constexpr unsigned char R_386_TLS_LE = 17;
constexpr unsigned char R_X86_64_DTPOFF64 = 17;
constexpr unsigned char R_386_TLS_GD = 18;
constexpr unsigned char R_X86_64_TPOFF64 = 18;
constexpr unsigned char R_386_TLS_LDM = 19;
constexpr unsigned char R_X86_64_TLSGD = 19;
constexpr unsigned char R_386_16 = 20;
constexpr unsigned char R_X86_64_TLSLD = 20;
constexpr unsigned char R_386_PC16 = 21;
constexpr unsigned char R_X86_64_DTPOFF32 = 21;
constexpr unsigned char R_386_8 = 22;
constexpr unsigned char R_X86_64_GOTTPOFF = 22;
constexpr unsigned char R_386_PC8 = 23;
constexpr unsigned char R_X86_64_TPOFF32 = 23;
constexpr unsigned char R_386_TLS_GD_32 = 24;
constexpr unsigned char R_X86_64_PC64 = 24;
constexpr unsigned char R_386_TLS_GD_PUSH = 25;
constexpr unsigned char R_X86_64_GOTOFF64 = 25;
constexpr unsigned char R_386_TLS_GD_CALL = 26;
constexpr unsigned char R_X86_64_GOTPC32 = 26;
constexpr unsigned char R_386_TLS_GD_POP = 27;
constexpr unsigned char R_X86_64_GOT64 = 27;
constexpr unsigned char R_386_TLS_LDM_32 = 28;
constexpr unsigned char R_X86_64_GOTPCREL64 = 28;
constexpr unsigned char R_386_TLS_LDM_PUSH = 29;
constexpr unsigned char R_X86_64_GOTPC64 = 29;
constexpr unsigned char R_386_TLS_LDM_CALL = 30;
constexpr unsigned char R_X86_64_GOTPLT64 = 30;
constexpr unsigned char R_386_TLS_LDM_POP = 31;
constexpr unsigned char R_X86_64_PLTOFF64 = 31;
constexpr unsigned char R_386_TLS_LDO_32 = 32;
constexpr unsigned char R_386_TLS_IE_32 = 33;
constexpr unsigned char R_386_TLS_LE_32 = 34;
constexpr unsigned char R_X86_64_GOTPC32_TLSDESC = 34;
constexpr unsigned char R_386_TLS_DTPMOD32 = 35;
constexpr unsigned char R_X86_64_TLSDESC_CALL = 35;
constexpr unsigned char R_386_TLS_DTPOFF32 = 36;
constexpr unsigned char R_X86_64_TLSDESC = 36;
constexpr unsigned char R_386_TLS_TPOFF32 = 37;
constexpr unsigned char R_X86_64_IRELATIVE = 37;
constexpr unsigned char R_386_SIZE32 = 38;
constexpr unsigned char R_386_TLS_GOTDESC = 39;
constexpr unsigned char R_386_TLS_DESC_CALL = 40;
constexpr unsigned char R_386_TLS_DESC = 41;
constexpr unsigned char R_386_IRELATIVE = 42;
constexpr unsigned char R_386_GOT32X = 43;
constexpr unsigned char R_X86_64_GNU_VTINHERIT = 250;
constexpr unsigned char R_X86_64_GNU_VTENTRY = 251;
// X86
constexpr unsigned R_386_NONE = 0;
constexpr unsigned R_X86_64_NONE = 0;
constexpr unsigned R_AMDGPU_NONE = 0;
constexpr unsigned R_386_32 = 1;
constexpr unsigned R_X86_64_64 = 1;
constexpr unsigned R_AMDGPU_ABS32_LO = 1;
constexpr unsigned R_386_PC32 = 2;
constexpr unsigned R_X86_64_PC32 = 2;
constexpr unsigned R_AMDGPU_ABS32_HI = 2;
constexpr unsigned R_386_GOT32 = 3;
constexpr unsigned R_X86_64_GOT32 = 3;
constexpr unsigned R_AMDGPU_ABS64 = 3;
constexpr unsigned R_386_PLT32 = 4;
constexpr unsigned R_X86_64_PLT32 = 4;
constexpr unsigned R_AMDGPU_REL32 = 4;
constexpr unsigned R_386_COPY = 5;
constexpr unsigned R_X86_64_COPY = 5;
constexpr unsigned R_AMDGPU_REL64 = 5;
constexpr unsigned R_386_GLOB_DAT = 6;
constexpr unsigned R_X86_64_GLOB_DAT = 6;
constexpr unsigned R_AMDGPU_ABS32 = 6;
constexpr unsigned R_386_JMP_SLOT = 7;
constexpr unsigned R_X86_64_JUMP_SLOT = 7;
constexpr unsigned R_AMDGPU_GOTPCREL = 7;
constexpr unsigned R_386_RELATIVE = 8;
constexpr unsigned R_X86_64_RELATIVE = 8;
constexpr unsigned R_AMDGPU_GOTPCREL32_LO = 8;
constexpr unsigned R_386_GOTOFF = 9;
constexpr unsigned R_X86_64_GOTPCREL = 9;
constexpr unsigned R_AMDGPU_GOTPCREL32_HI = 9;
constexpr unsigned R_386_GOTPC = 10;
constexpr unsigned R_X86_64_32 = 10;
constexpr unsigned R_AMDGPU_REL32_LO = 10;
constexpr unsigned R_386_32PLT = 11;
constexpr unsigned R_X86_64_32S = 11;
constexpr unsigned R_AMDGPU_REL32_HI = 11;
constexpr unsigned R_X86_64_16 = 12;
constexpr unsigned R_X86_64_PC16 = 13;
constexpr unsigned R_AMDGPU_RELATIVE64 = 13;
constexpr unsigned R_386_TLS_TPOFF = 14;
constexpr unsigned R_X86_64_8 = 14;
constexpr unsigned R_386_TLS_IE = 15;
constexpr unsigned R_X86_64_PC8 = 15;
constexpr unsigned R_386_TLS_GOTIE = 16;
constexpr unsigned R_X86_64_DTPMOD64 = 16;
constexpr unsigned R_386_TLS_LE = 17;
constexpr unsigned R_X86_64_DTPOFF64 = 17;
constexpr unsigned R_386_TLS_GD = 18;
constexpr unsigned R_X86_64_TPOFF64 = 18;
constexpr unsigned R_386_TLS_LDM = 19;
constexpr unsigned R_X86_64_TLSGD = 19;
constexpr unsigned R_386_16 = 20;
constexpr unsigned R_X86_64_TLSLD = 20;
constexpr unsigned R_386_PC16 = 21;
constexpr unsigned R_X86_64_DTPOFF32 = 21;
constexpr unsigned R_386_8 = 22;
constexpr unsigned R_X86_64_GOTTPOFF = 22;
constexpr unsigned R_386_PC8 = 23;
constexpr unsigned R_X86_64_TPOFF32 = 23;
constexpr unsigned R_386_TLS_GD_32 = 24;
constexpr unsigned R_X86_64_PC64 = 24;
constexpr unsigned R_386_TLS_GD_PUSH = 25;
constexpr unsigned R_X86_64_GOTOFF64 = 25;
constexpr unsigned R_386_TLS_GD_CALL = 26;
constexpr unsigned R_X86_64_GOTPC32 = 26;
constexpr unsigned R_386_TLS_GD_POP = 27;
constexpr unsigned R_X86_64_GOT64 = 27;
constexpr unsigned R_386_TLS_LDM_32 = 28;
constexpr unsigned R_X86_64_GOTPCREL64 = 28;
constexpr unsigned R_386_TLS_LDM_PUSH = 29;
constexpr unsigned R_X86_64_GOTPC64 = 29;
constexpr unsigned R_386_TLS_LDM_CALL = 30;
constexpr unsigned R_X86_64_GOTPLT64 = 30;
constexpr unsigned R_386_TLS_LDM_POP = 31;
constexpr unsigned R_X86_64_PLTOFF64 = 31;
constexpr unsigned R_386_TLS_LDO_32 = 32;
constexpr unsigned R_386_TLS_IE_32 = 33;
constexpr unsigned R_386_TLS_LE_32 = 34;
constexpr unsigned R_X86_64_GOTPC32_TLSDESC = 34;
constexpr unsigned R_386_TLS_DTPMOD32 = 35;
constexpr unsigned R_X86_64_TLSDESC_CALL = 35;
constexpr unsigned R_386_TLS_DTPOFF32 = 36;
constexpr unsigned R_X86_64_TLSDESC = 36;
constexpr unsigned R_386_TLS_TPOFF32 = 37;
constexpr unsigned R_X86_64_IRELATIVE = 37;
constexpr unsigned R_386_SIZE32 = 38;
constexpr unsigned R_386_TLS_GOTDESC = 39;
constexpr unsigned R_386_TLS_DESC_CALL = 40;
constexpr unsigned R_386_TLS_DESC = 41;
constexpr unsigned R_386_IRELATIVE = 42;
constexpr unsigned R_386_GOT32X = 43;
constexpr unsigned R_X86_64_GNU_VTINHERIT = 250;
constexpr unsigned R_X86_64_GNU_VTENTRY = 251;
// Segment types
constexpr Elf_Word PT_NULL = 0;

View File

@ -83,11 +83,11 @@ template <class S> class relocation_section_accessor_template
}
//------------------------------------------------------------------------------
bool get_entry( Elf_Xword index,
Elf64_Addr& offset,
Elf_Word& symbol,
unsigned char& type,
Elf_Sxword& addend ) const
bool get_entry( Elf_Xword index,
Elf64_Addr& offset,
Elf_Word& symbol,
unsigned& type,
Elf_Sxword& addend ) const
{
if ( index >= get_entries_num() ) { // Is index valid
return false;
@ -118,13 +118,13 @@ template <class S> class relocation_section_accessor_template
}
//------------------------------------------------------------------------------
bool get_entry( Elf_Xword index,
Elf64_Addr& offset,
Elf64_Addr& symbolValue,
std::string& symbolName,
unsigned char& type,
Elf_Sxword& addend,
Elf_Sxword& calcValue ) const
bool get_entry( Elf_Xword index,
Elf64_Addr& offset,
Elf64_Addr& symbolValue,
std::string& symbolName,
unsigned& type,
Elf_Sxword& addend,
Elf_Sxword& calcValue ) const
{
// Do regular job
Elf_Word symbol;
@ -185,11 +185,11 @@ template <class S> class relocation_section_accessor_template
}
//------------------------------------------------------------------------------
bool set_entry( Elf_Xword index,
Elf64_Addr offset,
Elf_Word symbol,
unsigned char type,
Elf_Sxword addend )
bool set_entry( Elf_Xword index,
Elf64_Addr offset,
Elf_Word symbol,
unsigned type,
Elf_Sxword addend )
{
if ( index >= get_entries_num() ) { // Is index valid
return false;
@ -231,7 +231,7 @@ template <class S> class relocation_section_accessor_template
}
//------------------------------------------------------------------------------
void add_entry( Elf64_Addr offset, Elf_Word symbol, unsigned char type )
void add_entry( Elf64_Addr offset, Elf_Word symbol, unsigned type )
{
Elf_Xword info;
if ( elf_file.get_class() == ELFCLASS32 ) {
@ -256,10 +256,10 @@ template <class S> class relocation_section_accessor_template
}
//------------------------------------------------------------------------------
void add_entry( Elf64_Addr offset,
Elf_Word symbol,
unsigned char type,
Elf_Sxword addend )
void add_entry( Elf64_Addr offset,
Elf_Word symbol,
unsigned type,
Elf_Sxword addend )
{
Elf_Xword info;
if ( elf_file.get_class() == ELFCLASS32 ) {
@ -282,7 +282,7 @@ template <class S> class relocation_section_accessor_template
unsigned char other,
Elf_Half shndx,
Elf64_Addr offset,
unsigned char type )
unsigned type )
{
Elf_Word str_index = str_writer.add_string( str );
Elf_Word sym_index = sym_writer.add_symbol( str_index, value, size,
@ -293,10 +293,10 @@ template <class S> class relocation_section_accessor_template
//------------------------------------------------------------------------------
void swap_symbols( Elf_Xword first, Elf_Xword second )
{
Elf64_Addr offset;
Elf_Word symbol;
unsigned char rtype;
Elf_Sxword addend;
Elf64_Addr offset;
Elf_Word symbol;
unsigned rtype;
Elf_Sxword addend;
for ( Elf_Word i = 0; i < get_entries_num(); i++ ) {
get_entry( i, offset, symbol, rtype, addend );
if ( symbol == first ) {
@ -318,11 +318,11 @@ template <class S> class relocation_section_accessor_template
//------------------------------------------------------------------------------
template <class T>
void generic_get_entry_rel( Elf_Xword index,
Elf64_Addr& offset,
Elf_Word& symbol,
unsigned char& type,
Elf_Sxword& addend ) const
void generic_get_entry_rel( Elf_Xword index,
Elf64_Addr& offset,
Elf_Word& symbol,
unsigned& type,
Elf_Sxword& addend ) const
{
const endianess_convertor& convertor = elf_file.get_convertor();
@ -338,11 +338,11 @@ template <class S> class relocation_section_accessor_template
//------------------------------------------------------------------------------
template <class T>
void generic_get_entry_rela( Elf_Xword index,
Elf64_Addr& offset,
Elf_Word& symbol,
unsigned char& type,
Elf_Sxword& addend ) const
void generic_get_entry_rela( Elf_Xword index,
Elf64_Addr& offset,
Elf_Word& symbol,
unsigned& type,
Elf_Sxword& addend ) const
{
const endianess_convertor& convertor = elf_file.get_convertor();
@ -358,10 +358,10 @@ template <class S> class relocation_section_accessor_template
//------------------------------------------------------------------------------
template <class T>
void generic_set_entry_rel( Elf_Xword index,
Elf64_Addr offset,
Elf_Word symbol,
unsigned char type,
void generic_set_entry_rel( Elf_Xword index,
Elf64_Addr offset,
Elf_Word symbol,
unsigned type,
Elf_Sxword )
{
const endianess_convertor& convertor = elf_file.get_convertor();
@ -383,11 +383,11 @@ template <class S> class relocation_section_accessor_template
//------------------------------------------------------------------------------
template <class T>
void generic_set_entry_rela( Elf_Xword index,
Elf64_Addr offset,
Elf_Word symbol,
unsigned char type,
Elf_Sxword addend )
void generic_set_entry_rela( Elf_Xword index,
Elf64_Addr offset,
Elf_Word symbol,
unsigned type,
Elf_Sxword addend )
{
const endianess_convertor& convertor = elf_file.get_convertor();

View File

@ -160,12 +160,12 @@ void checkRelocation( const relocation_section_accessor* pRT,
Elf_Sxword addend_,
Elf_Sxword calcValue_ )
{
Elf64_Addr offset;
Elf64_Addr symbolValue;
std::string symbolName;
unsigned char type;
Elf_Sxword addend;
Elf_Sxword calcValue;
Elf64_Addr offset;
Elf64_Addr symbolValue;
std::string symbolName;
unsigned type;
Elf_Sxword addend;
Elf_Sxword calcValue;
ASSERT_EQ( pRT->get_entry( index, offset, symbolValue, symbolName, type,
addend, calcValue ),

View File

@ -91,7 +91,7 @@ bool write_obj_i386( bool is64bit )
symbol_section_accessor symbol_writer( writer, sym_sec );
Elf_Word nSymIndex = symbol_writer.add_symbol(
nStrIndex, 0, 0, STB_LOCAL, STT_NOTYPE, 0, data_sec->get_index() );
nStrIndex, 0, 0, STB_LOCAL, STT_NOTYPE, 0, data_sec->get_index() );
// Another way to add symbol
symbol_writer.add_symbol( str_writer, "_start", 0x00000000, 0, STB_WEAK,
@ -803,30 +803,30 @@ TEST( ELFIOTest, rearrange_local_symbols_with_reallocation )
relocation_section_accessor rela( writer, rel_sec );
// Add relocation entry (adjust address at offset 11)
rela.add_entry( 1, sym1, (unsigned char)R_386_RELATIVE );
rela.add_entry( 8, sym8, (unsigned char)R_386_RELATIVE );
rela.add_entry( 6, sym6, (unsigned char)R_386_RELATIVE );
rela.add_entry( 2, sym2, (unsigned char)R_386_RELATIVE );
rela.add_entry( 3, sym3, (unsigned char)R_386_RELATIVE );
rela.add_entry( 8, sym8, (unsigned char)R_386_RELATIVE );
rela.add_entry( 7, sym7, (unsigned char)R_386_RELATIVE );
rela.add_entry( 2, sym2, (unsigned char)R_386_RELATIVE );
rela.add_entry( 11, sym1, (unsigned char)R_386_RELATIVE );
rela.add_entry( 18, sym8, (unsigned char)R_386_RELATIVE );
rela.add_entry( 16, sym6, (unsigned char)R_386_RELATIVE );
rela.add_entry( 12, sym2, (unsigned char)R_386_RELATIVE );
rela.add_entry( 13, sym3, (unsigned char)R_386_RELATIVE );
rela.add_entry( 17, sym7, (unsigned char)R_386_RELATIVE );
rela.add_entry( 14, sym4, (unsigned char)R_386_RELATIVE );
rela.add_entry( 15, sym5, (unsigned char)R_386_RELATIVE );
rela.add_entry( 1, sym1, R_386_RELATIVE );
rela.add_entry( 8, sym8, R_386_RELATIVE );
rela.add_entry( 6, sym6, R_386_RELATIVE );
rela.add_entry( 2, sym2, R_386_RELATIVE );
rela.add_entry( 3, sym3, R_386_RELATIVE );
rela.add_entry( 8, sym8, R_386_RELATIVE );
rela.add_entry( 7, sym7, R_386_RELATIVE );
rela.add_entry( 2, sym2, R_386_RELATIVE );
rela.add_entry( 11, sym1, R_386_RELATIVE );
rela.add_entry( 18, sym8, R_386_RELATIVE );
rela.add_entry( 16, sym6, R_386_RELATIVE );
rela.add_entry( 12, sym2, R_386_RELATIVE );
rela.add_entry( 13, sym3, R_386_RELATIVE );
rela.add_entry( 17, sym7, R_386_RELATIVE );
rela.add_entry( 14, sym4, R_386_RELATIVE );
rela.add_entry( 15, sym5, R_386_RELATIVE );
std::vector<std::string> before;
for ( Elf_Word i = 0; i < rela.get_entries_num(); i++ ) {
Elf64_Addr offset;
Elf_Word symbol;
unsigned char rtype;
Elf_Sxword addend;
Elf64_Addr offset;
Elf_Word symbol;
unsigned rtype;
Elf_Sxword addend;
rela.get_entry( i, offset, symbol, rtype, addend );
symbols.get_symbol( symbol, name, value, size, bind, type,
@ -857,10 +857,10 @@ TEST( ELFIOTest, rearrange_local_symbols_with_reallocation )
std::vector<std::string> after;
for ( Elf_Word i = 0; i < rel.get_entries_num(); i++ ) {
Elf64_Addr offset;
Elf_Word symbol;
unsigned char rtype;
Elf_Sxword addend;
Elf64_Addr offset;
Elf_Word symbol;
unsigned rtype;
Elf_Sxword addend;
rel.get_entry( i, offset, symbol, rtype, addend );
syms.get_symbol( symbol, name, value, size, bind, type, section_index,