[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