This fixes the "invalid machine flag" error from eu-elflint when passing hexagon binaries.
* backends/hexagon_init.c (hexagon_init): Hook machine_flag_check * backends/hexagon_symbol.c (hexagon_machine_flag_check): new function * libelf/elf-knowledge.h: add EF_HEXAGON_TINY constant Signed-off-by: Matheus Tavares Bernardino <quic_mathb...@quicinc.com> --- v2: https://sourceware.org/pipermail/elfutils-devel/2024q2/006987.html Changes in v3: - Added ChangeLog to commit message. - Implemented better machine_flag_check operation, as suggested by bcain. - Extracted only patch 2/2 as 1/2 was already merged. backends/hexagon_init.c | 1 + backends/hexagon_symbol.c | 7 +++++++ libelf/elf-knowledge.h | 1 + 3 files changed, 9 insertions(+) diff --git a/backends/hexagon_init.c b/backends/hexagon_init.c index 9c8c6d8d..1cd27513 100644 --- a/backends/hexagon_init.c +++ b/backends/hexagon_init.c @@ -45,6 +45,7 @@ hexagon_init (Elf *elf __attribute__ ((unused)), { hexagon_init_reloc (eh); HOOK (eh, reloc_simple_type); + HOOK (eh, machine_flag_check); return eh; } diff --git a/backends/hexagon_symbol.c b/backends/hexagon_symbol.c index b341243e..5f6e0fe5 100644 --- a/backends/hexagon_symbol.c +++ b/backends/hexagon_symbol.c @@ -56,3 +56,10 @@ hexagon_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type, return ELF_T_NUM; } } + +bool +hexagon_machine_flag_check (GElf_Word flags) +{ + GElf_Word reserved_flags = ~(EF_HEXAGON_TINY | EF_HEXAGON_MACH); + return (flags & reserved_flags) == 0; +} diff --git a/libelf/elf-knowledge.h b/libelf/elf-knowledge.h index 71535934..23e34ca1 100644 --- a/libelf/elf-knowledge.h +++ b/libelf/elf-knowledge.h @@ -119,6 +119,7 @@ #define EF_HEXAGON_MACH_V71T 0x00008071 /* Hexagon V71T */ #define EF_HEXAGON_MACH_V73 0x00000073 /* Hexagon V73 */ #define EF_HEXAGON_MACH 0x000003ff /* Hexagon V.. */ +#define EF_HEXAGON_TINY 0x00008000 /* Hexagon V..T */ /* Special section indices. */ #define SHN_HEXAGON_SCOMMON 0xff00 /* Other access sizes */ -- 2.37.2