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 <[email protected]>
---
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