[llvm] d76e01a - [MachO] Allow the LC_IDENT load command

Vedant Kumar via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 11 10:16:14 PST 2020


Author: Vedant Kumar
Date: 2020-11-11T10:15:54-08:00
New Revision: d76e01a6a7c26051146fa65776cf63eb17f46fa3

URL: https://github.com/llvm/llvm-project/commit/d76e01a6a7c26051146fa65776cf63eb17f46fa3
DIFF: https://github.com/llvm/llvm-project/commit/d76e01a6a7c26051146fa65776cf63eb17f46fa3.diff

LOG: [MachO] Allow the LC_IDENT load command

xnu coredumps include an LC_IDENT load command. It's helpful to be able
to just ignore these. IIUC an interested client can grab the identifier
using the MachOObjectFile::load_commands() API.

The status quo is that llvm bails out when it finds an LC_IDENT because
the command is obsolete (see isLoadCommandObsolete).

Differential Revision: https://reviews.llvm.org/D91221

Added: 
    llvm/test/ObjectYAML/MachO/lc-ident.yaml

Modified: 
    llvm/lib/Object/MachOObjectFile.cpp
    llvm/test/Object/macho-invalid.test

Removed: 
    llvm/test/Object/Inputs/macho-invalid-ident-obsolete


################################################################################
diff  --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp
index 9d3c30608895..a10b85c9db6a 100644
--- a/llvm/lib/Object/MachOObjectFile.cpp
+++ b/llvm/lib/Object/MachOObjectFile.cpp
@@ -1596,6 +1596,9 @@ MachOObjectFile::MachOObjectFile(MemoryBufferRef Object, bool IsLittleEndian,
        if ((Err = checkTwoLevelHintsCommand(*this, Load, I,
                                             &TwoLevelHintsLoadCmd, Elements)))
          return;
+    } else if (Load.C.cmd == MachO::LC_IDENT) {
+      // Note: LC_IDENT is ignored.
+      continue;
     } else if (isLoadCommandObsolete(Load.C.cmd)) {
       Err = malformedError("load command " + Twine(I) + " for cmd value of: " +
                            Twine(Load.C.cmd) + " is obsolete and not "

diff  --git a/llvm/test/Object/Inputs/macho-invalid-ident-obsolete b/llvm/test/Object/Inputs/macho-invalid-ident-obsolete
deleted file mode 100644
index 74d61677d685..000000000000
Binary files a/llvm/test/Object/Inputs/macho-invalid-ident-obsolete and /dev/null 
diff er

diff  --git a/llvm/test/Object/macho-invalid.test b/llvm/test/Object/macho-invalid.test
index c47e4d286ed1..f928b7edc686 100644
--- a/llvm/test/Object/macho-invalid.test
+++ b/llvm/test/Object/macho-invalid.test
@@ -428,9 +428,6 @@ INVALID-LOADFVMLIB-OBSOLETE: macho-invalid-loadfvmlib-obsolete': truncated or ma
 RUN: not llvm-objdump --macho --private-headers %p/Inputs/macho-invalid-prebound_dylib-obsolete 2>&1 | FileCheck --check-prefix=INVALID-PREBOUND_DYLIB-OBSOLETE %s
 INVALID-PREBOUND_DYLIB-OBSOLETE: macho-invalid-prebound_dylib-obsolete': truncated or malformed object (load command 0 for cmd value of: 16 is obsolete and not supported)
 
-RUN: not llvm-objdump --macho --private-headers %p/Inputs/macho-invalid-ident-obsolete 2>&1 | FileCheck --check-prefix=INVALID-IDENT-OBSOLETE %s
-INVALID-IDENT-OBSOLETE: macho-invalid-ident-obsolete': truncated or malformed object (load command 0 for cmd value of: 8 is obsolete and not supported)
-
 RUN: not llvm-objdump --macho --private-headers %p/Inputs/macho-invalid-fvmfile-obsolete 2>&1 | FileCheck --check-prefix=INVALID-FVMFILE-OBSOLETE %s
 INVALID-FVMFILE-OBSOLETE: macho-invalid-fvmfile-obsolete': truncated or malformed object (load command 0 for cmd value of: 9 is obsolete and not supported)
 

diff  --git a/llvm/test/ObjectYAML/MachO/lc-ident.yaml b/llvm/test/ObjectYAML/MachO/lc-ident.yaml
new file mode 100644
index 000000000000..0bafea99e4b8
--- /dev/null
+++ b/llvm/test/ObjectYAML/MachO/lc-ident.yaml
@@ -0,0 +1,22 @@
+# RUN: yaml2obj %s | obj2yaml | FileCheck %s
+
+--- !mach-o
+FileHeader:
+  magic:           0xFEEDFACF
+  cputype:         0x01000007
+  cpusubtype:      0x80000003
+  filetype:        0x00000002
+  ncmds:           1
+  sizeofcmds:      16
+  flags:           0x00218085
+  reserved:        0x00000000
+LoadCommands:
+  - cmd:             LC_IDENT
+    cmdsize:         16
+    PayloadBytes:    [ 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 ]
+...
+
+# CHECK: LoadCommands:
+# CHECK-NEXT:   - cmd:             LC_IDENT
+# CHECK-NEXT:     cmdsize:         16
+# CHECK-NEXT:     PayloadBytes:    [ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 ]


        


More information about the llvm-commits mailing list