Add GNU specific types

This commit is contained in:
Serge Lamikhov-Center 2021-08-13 09:37:52 +03:00
parent ef262285dc
commit 91c8c7770a
2 changed files with 134 additions and 93 deletions

View File

@ -410,20 +410,20 @@ typedef uint64_t Elf64_Off;
// enabled for all code contained in the ELF.
#define EF_AMDGPU_XNACK 0x100
#define EF_AMDGPU_FEATURE_XNACK_V2 0x01
#define EF_AMDGPU_FEATURE_TRAP_HANDLER_V2 0x02
#define EF_AMDGPU_FEATURE_XNACK_V3 0x100
#define EF_AMDGPU_FEATURE_SRAMECC_V3 0x200
#define EF_AMDGPU_FEATURE_XNACK_V4 0x300
#define EF_AMDGPU_FEATURE_XNACK_UNSUPPORTED_V4 0x000
#define EF_AMDGPU_FEATURE_XNACK_ANY_V4 0x100
#define EF_AMDGPU_FEATURE_XNACK_OFF_V4 0x200
#define EF_AMDGPU_FEATURE_XNACK_ON_V4 0x300
#define EF_AMDGPU_FEATURE_SRAMECC_V4 0xc00
#define EF_AMDGPU_FEATURE_XNACK_V2 0x01
#define EF_AMDGPU_FEATURE_TRAP_HANDLER_V2 0x02
#define EF_AMDGPU_FEATURE_XNACK_V3 0x100
#define EF_AMDGPU_FEATURE_SRAMECC_V3 0x200
#define EF_AMDGPU_FEATURE_XNACK_V4 0x300
#define EF_AMDGPU_FEATURE_XNACK_UNSUPPORTED_V4 0x000
#define EF_AMDGPU_FEATURE_XNACK_ANY_V4 0x100
#define EF_AMDGPU_FEATURE_XNACK_OFF_V4 0x200
#define EF_AMDGPU_FEATURE_XNACK_ON_V4 0x300
#define EF_AMDGPU_FEATURE_SRAMECC_V4 0xc00
#define EF_AMDGPU_FEATURE_SRAMECC_UNSUPPORTED_V4 0x000
#define EF_AMDGPU_FEATURE_SRAMECC_ANY_V4 0x400
#define EF_AMDGPU_FEATURE_SRAMECC_OFF_V4 0x800
#define EF_AMDGPU_FEATURE_SRAMECC_ON_V4 0xc00
#define EF_AMDGPU_FEATURE_SRAMECC_ANY_V4 0x400
#define EF_AMDGPU_FEATURE_SRAMECC_OFF_V4 0x800
#define EF_AMDGPU_FEATURE_SRAMECC_ON_V4 0xc00
// AMDGPU processors
#define EF_AMDGPU_MACH_NONE 0x000 // Unspecified processor.
@ -448,45 +448,45 @@ typedef uint64_t Elf64_Off;
#define EF_AMDGPU_MACH_R600_FIRST EF_AMDGPU_MACH_R600_R600
#define EF_AMDGPU_MACH_R600_LAST EF_AMDGPU_MACH_R600_TURKS
// AMDGCN-based processors.
#define EF_AMDGPU_MACH_AMDGCN_GFX600 0x020
#define EF_AMDGPU_MACH_AMDGCN_GFX601 0x021
#define EF_AMDGPU_MACH_AMDGCN_GFX700 0x022
#define EF_AMDGPU_MACH_AMDGCN_GFX701 0x023
#define EF_AMDGPU_MACH_AMDGCN_GFX702 0x024
#define EF_AMDGPU_MACH_AMDGCN_GFX703 0x025
#define EF_AMDGPU_MACH_AMDGCN_GFX704 0x026
#define EF_AMDGPU_MACH_AMDGCN_RESERVED_0X27 0x027
#define EF_AMDGPU_MACH_AMDGCN_GFX801 0x028
#define EF_AMDGPU_MACH_AMDGCN_GFX802 0x029
#define EF_AMDGPU_MACH_AMDGCN_GFX803 0x02a
#define EF_AMDGPU_MACH_AMDGCN_GFX810 0x02b
#define EF_AMDGPU_MACH_AMDGCN_GFX900 0x02c
#define EF_AMDGPU_MACH_AMDGCN_GFX902 0x02d
#define EF_AMDGPU_MACH_AMDGCN_GFX904 0x02e
#define EF_AMDGPU_MACH_AMDGCN_GFX906 0x02f
#define EF_AMDGPU_MACH_AMDGCN_GFX908 0x030
#define EF_AMDGPU_MACH_AMDGCN_GFX909 0x031
#define EF_AMDGPU_MACH_AMDGCN_GFX90C 0x032
#define EF_AMDGPU_MACH_AMDGCN_GFX1010 0x033
#define EF_AMDGPU_MACH_AMDGCN_GFX1011 0x034
#define EF_AMDGPU_MACH_AMDGCN_GFX1012 0x035
#define EF_AMDGPU_MACH_AMDGCN_GFX1030 0x036
#define EF_AMDGPU_MACH_AMDGCN_GFX1031 0x037
#define EF_AMDGPU_MACH_AMDGCN_GFX1032 0x038
#define EF_AMDGPU_MACH_AMDGCN_GFX1033 0x039
#define EF_AMDGPU_MACH_AMDGCN_GFX602 0x03a
#define EF_AMDGPU_MACH_AMDGCN_GFX705 0x03b
#define EF_AMDGPU_MACH_AMDGCN_GFX805 0x03c
#define EF_AMDGPU_MACH_AMDGCN_RESERVED_0X3D 0x03d
#define EF_AMDGPU_MACH_AMDGCN_GFX1034 0x03e
#define EF_AMDGPU_MACH_AMDGCN_GFX90A 0x03f
#define EF_AMDGPU_MACH_AMDGCN_RESERVED_0X40 0x040
#define EF_AMDGPU_MACH_AMDGCN_RESERVED_0X41 0x041
#define EF_AMDGPU_MACH_AMDGCN_GFX1013 0x042
// AMDGCN-based processors.
#define EF_AMDGPU_MACH_AMDGCN_GFX600 0x020
#define EF_AMDGPU_MACH_AMDGCN_GFX601 0x021
#define EF_AMDGPU_MACH_AMDGCN_GFX700 0x022
#define EF_AMDGPU_MACH_AMDGCN_GFX701 0x023
#define EF_AMDGPU_MACH_AMDGCN_GFX702 0x024
#define EF_AMDGPU_MACH_AMDGCN_GFX703 0x025
#define EF_AMDGPU_MACH_AMDGCN_GFX704 0x026
#define EF_AMDGPU_MACH_AMDGCN_RESERVED_0X27 0x027
#define EF_AMDGPU_MACH_AMDGCN_GFX801 0x028
#define EF_AMDGPU_MACH_AMDGCN_GFX802 0x029
#define EF_AMDGPU_MACH_AMDGCN_GFX803 0x02a
#define EF_AMDGPU_MACH_AMDGCN_GFX810 0x02b
#define EF_AMDGPU_MACH_AMDGCN_GFX900 0x02c
#define EF_AMDGPU_MACH_AMDGCN_GFX902 0x02d
#define EF_AMDGPU_MACH_AMDGCN_GFX904 0x02e
#define EF_AMDGPU_MACH_AMDGCN_GFX906 0x02f
#define EF_AMDGPU_MACH_AMDGCN_GFX908 0x030
#define EF_AMDGPU_MACH_AMDGCN_GFX909 0x031
#define EF_AMDGPU_MACH_AMDGCN_GFX90C 0x032
#define EF_AMDGPU_MACH_AMDGCN_GFX1010 0x033
#define EF_AMDGPU_MACH_AMDGCN_GFX1011 0x034
#define EF_AMDGPU_MACH_AMDGCN_GFX1012 0x035
#define EF_AMDGPU_MACH_AMDGCN_GFX1030 0x036
#define EF_AMDGPU_MACH_AMDGCN_GFX1031 0x037
#define EF_AMDGPU_MACH_AMDGCN_GFX1032 0x038
#define EF_AMDGPU_MACH_AMDGCN_GFX1033 0x039
#define EF_AMDGPU_MACH_AMDGCN_GFX602 0x03a
#define EF_AMDGPU_MACH_AMDGCN_GFX705 0x03b
#define EF_AMDGPU_MACH_AMDGCN_GFX805 0x03c
#define EF_AMDGPU_MACH_AMDGCN_RESERVED_0X3D 0x03d
#define EF_AMDGPU_MACH_AMDGCN_GFX1034 0x03e
#define EF_AMDGPU_MACH_AMDGCN_GFX90A 0x03f
#define EF_AMDGPU_MACH_AMDGCN_RESERVED_0X40 0x040
#define EF_AMDGPU_MACH_AMDGCN_RESERVED_0X41 0x041
#define EF_AMDGPU_MACH_AMDGCN_GFX1013 0x042
// First/last AMDGCN-based processors.
#define EF_AMDGPU_MACH_AMDGCN_FIRST EF_AMDGPU_MACH_AMDGCN_GFX600
#define EF_AMDGPU_MACH_AMDGCN_LAST EF_AMDGPU_MACH_AMDGCN_GFX1013
#define EF_AMDGPU_MACH_AMDGCN_FIRST EF_AMDGPU_MACH_AMDGCN_GFX600
#define EF_AMDGPU_MACH_AMDGCN_LAST EF_AMDGPU_MACH_AMDGCN_GFX1013
/////////////////////
// Sections constants
@ -504,30 +504,40 @@ typedef uint64_t Elf64_Off;
#define SHN_HIRESERVE 0xFFFF
// Section types
#define SHT_NULL 0
#define SHT_PROGBITS 1
#define SHT_SYMTAB 2
#define SHT_STRTAB 3
#define SHT_RELA 4
#define SHT_HASH 5
#define SHT_DYNAMIC 6
#define SHT_NOTE 7
#define SHT_NOBITS 8
#define SHT_REL 9
#define SHT_SHLIB 10
#define SHT_DYNSYM 11
#define SHT_INIT_ARRAY 14
#define SHT_FINI_ARRAY 15
#define SHT_PREINIT_ARRAY 16
#define SHT_GROUP 17
#define SHT_SYMTAB_SHNDX 18
#define SHT_GNU_HASH 0x6FFFFFF6
#define SHT_LOOS 0x60000000
#define SHT_HIOS 0x6fffffff
#define SHT_LOPROC 0x70000000
#define SHT_HIPROC 0x7FFFFFFF
#define SHT_LOUSER 0x80000000
#define SHT_HIUSER 0xFFFFFFFF
#define SHT_NULL 0
#define SHT_PROGBITS 1
#define SHT_SYMTAB 2
#define SHT_STRTAB 3
#define SHT_RELA 4
#define SHT_HASH 5
#define SHT_DYNAMIC 6
#define SHT_NOTE 7
#define SHT_NOBITS 8
#define SHT_REL 9
#define SHT_SHLIB 10
#define SHT_DYNSYM 11
#define SHT_INIT_ARRAY 14
#define SHT_FINI_ARRAY 15
#define SHT_PREINIT_ARRAY 16
#define SHT_GROUP 17
#define SHT_SYMTAB_SHNDX 18
#define SHT_GNU_ATTRIBUTES 0x6ffffff5
#define SHT_GNU_HASH 0x6ffffff6
#define SHT_GNU_LIBLIST 0x6ffffff7
#define SHT_CHECKSUM 0x6ffffff8
#define SHT_LOSUNW 0x6ffffffa
#define SHT_SUNW_move 0x6ffffffa
#define SHT_SUNW_COMDAT 0x6ffffffb
#define SHT_SUNW_syminfo 0x6ffffffc
#define SHT_GNU_verdef 0x6ffffffd
#define SHT_GNU_verneed 0x6ffffffe
#define SHT_GNU_versym 0x6fffffff
#define SHT_LOOS 0x60000000
#define SHT_HIOS 0x6fffffff
#define SHT_LOPROC 0x70000000
#define SHT_HIPROC 0x7FFFFFFF
#define SHT_LOUSER 0x80000000
#define SHT_HIUSER 0xFFFFFFFF
// Section attribute flags
#define SHF_WRITE 0x1
@ -683,18 +693,20 @@ typedef uint64_t Elf64_Off;
#define R_X86_64_GNU_VTENTRY 251
// Segment types
#define PT_NULL 0
#define PT_LOAD 1
#define PT_DYNAMIC 2
#define PT_INTERP 3
#define PT_NOTE 4
#define PT_SHLIB 5
#define PT_PHDR 6
#define PT_TLS 7
#define PT_LOOS 0x60000000
#define PT_HIOS 0x6fffffff
#define PT_LOPROC 0x70000000
#define PT_HIPROC 0x7FFFFFFF
#define PT_NULL 0
#define PT_LOAD 1
#define PT_DYNAMIC 2
#define PT_INTERP 3
#define PT_NOTE 4
#define PT_SHLIB 5
#define PT_PHDR 6
#define PT_TLS 7
#define PT_GNU_EH_FRAME 0x6474e550
#define PT_GNU_STACK 0x6474e551
#define PT_LOOS 0x60000000
#define PT_HIOS 0x6fffffff
#define PT_LOPROC 0x70000000
#define PT_HIPROC 0x7FFFFFFF
// Segment flags
#define PF_X 1 // Execute
@ -740,6 +752,10 @@ typedef uint64_t Elf64_Off;
#define DT_PREINIT_ARRAYSZ 33
#define DT_MAXPOSTAGS 34
#define DT_GNU_HASH 0x6ffffef5
#define DT_VERSYM 0x6ffffff0
#define DT_FLAGS_1 0x6ffffffb
#define DT_VERNEED 0x6ffffffe
#define DT_VERNEEDNUM 0x6fffffff
#define DT_LOOS 0x6000000D
#define DT_HIOS 0x6ffff000
#define DT_LOPROC 0x70000000
@ -904,7 +920,7 @@ struct Elf64_Rela
#define ELF64_R_SYM( i ) ( ( i ) >> 32 )
#define ELF64_R_TYPE( i ) ( (i)&0xffffffffL )
#define ELF64_R_INFO( s, t ) \
( ( ( ( int64_t )( s ) ) << 32 ) + ( (t)&0xffffffffL ) )
( ( ( (int64_t)( s ) ) << 32 ) + ( (t)&0xffffffffL ) )
// Dynamic structure
struct Elf32_Dyn

View File

@ -338,7 +338,7 @@ static struct machine_table_t
static struct section_type_table_t
{
const Elf64_Half key;
const Elf64_Word key;
const char* str;
} section_type_table[] = {
{ SHT_NULL, "NULL" },
@ -357,7 +357,19 @@ static struct section_type_table_t
{ SHT_FINI_ARRAY, "FINI_ARRAY" },
{ SHT_PREINIT_ARRAY, "PREINIT_ARRAY" },
{ SHT_GROUP, "GROUP" },
{ SHT_SYMTAB_SHNDX, "SYMTAB_SHNDX " },
{ SHT_SYMTAB_SHNDX, "SYMTAB_SHNDX" },
{ SHT_GNU_ATTRIBUTES, "GNU_ATTRIBUTES" },
{ SHT_GNU_HASH, "GNU_HASH" },
{ SHT_GNU_LIBLIST, "GNU_LIBLIST" },
{ SHT_CHECKSUM, "CHECKSUM" },
{ SHT_LOSUNW, "LOSUNW" },
{ SHT_SUNW_move, "SUNW_move" },
{ SHT_SUNW_COMDAT, "SUNW_COMDAT" },
{ SHT_SUNW_syminfo, "SUNW_syminfo" },
{ SHT_GNU_verdef, "GNU_verdef" },
{ SHT_GNU_verneed, "GNU_verneed" },
{ SHT_GNU_versym, "GNU_versym" },
};
static struct segment_type_table_t
@ -365,9 +377,16 @@ static struct segment_type_table_t
const Elf_Word key;
const char* str;
} segment_type_table[] = {
{ PT_NULL, "NULL" }, { PT_LOAD, "LOAD" }, { PT_DYNAMIC, "DYNAMIC" },
{ PT_INTERP, "INTERP" }, { PT_NOTE, "NOTE" }, { PT_SHLIB, "SHLIB" },
{ PT_PHDR, "PHDR" }, { PT_TLS, "TLS" },
{ PT_NULL, "NULL" },
{ PT_LOAD, "LOAD" },
{ PT_DYNAMIC, "DYNAMIC" },
{ PT_INTERP, "INTERP" },
{ PT_NOTE, "NOTE" },
{ PT_SHLIB, "SHLIB" },
{ PT_PHDR, "PHDR" },
{ PT_TLS, "TLS" },
{ PT_GNU_EH_FRAME, "GNU_EH_FRAME" },
{ PT_GNU_STACK, "GNU_STACK" },
};
static struct segment_flag_table_t
@ -443,6 +462,12 @@ static struct dynamic_tag_t
{ DT_PREINIT_ARRAY, "PREINIT_ARRAY" },
{ DT_PREINIT_ARRAYSZ, "PREINIT_ARRAYSZ" },
{ DT_MAXPOSTAGS, "MAXPOSTAGS" },
{ DT_GNU_HASH, "GNU_HASH" },
{ DT_VERSYM, "VERSYM" },
{ DT_FLAGS_1, "FLAGS_1" },
{ DT_VERNEED, "VERNEED" },
{ DT_VERNEEDNUM, "VERNEEDNUM" },
};
static const ELFIO::Elf_Xword MAX_DATA_ENTRIES = 64;