[llvm] Allow "[[FLAGS=<none>]]" value in the ELF Fileheader Flags field (PR #143845)
James Henderson via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 17 00:51:26 PDT 2025
================
@@ -0,0 +1,31 @@
+## Check how obj2yaml dumps e_flags field.
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2MSB
+ Type: ET_EXEC
+ Machine: EM_ARM
+ Flags: [ [[FLAGS]] ]
+
+# RUN: yaml2obj -DFLAGS="EF_ARM_EABI_VER3" %s -o %t2
+# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=FLAG
+
+# FLAG: --- !ELF
+# FLAG-NEXT: FileHeader:
+# FLAG-NEXT: Class: ELFCLASS64
+# FLAG-NEXT: Data: ELFDATA2MSB
+# FLAG-NEXT: Type: ET_EXEC
+# FLAG-NEXT: Machine: EM_ARM
+# FLAG-NEXT: Flags: [ EF_ARM_EABI_VER3 ]
+
+# RUN: yaml2obj -DFLAGS="EF_ARM_SOFT_FLOAT" %s -o %t3
+# RUN: obj2yaml %t3 | FileCheck %s --check-prefix=FLAG2
+
+# FLAG2: --- !ELF
+# FLAG2-NEXT: FileHeader:
+# FLAG2-NEXT: Class: ELFCLASS64
+# FLAG2-NEXT: Data: ELFDATA2MSB
+# FLAG2-NEXT: Type: ET_EXEC
+# FLAG2-NEXT: Machine: EM_ARM
+# FLAG2-NEXT: Flags: [ EF_ARM_SOFT_FLOAT, EF_ARM_EABI_UNKNOWN ]
----------------
jh7370 wrote:
So it turns out that using ARM was a bad idea (sorry), due to its mixing of EABI values and flags. I suggest you switch to using something without additional complexities, like extra values appearing that you might not immediately expect. Having looked at things, I _think_ you could use the machine type `EM_SPARC32PLUS` and the flags defined here and in the following lines https://github.com/llvm/llvm-project/blob/72c61a6a255cd07c449f213bef9439ab0ee85c08/llvm/include/llvm/BinaryFormat/ELF.h#L739.
https://github.com/llvm/llvm-project/pull/143845
More information about the llvm-commits
mailing list