[llvm] a2bf43d - [ORC] Add MachOBuilder support for LC_UUID load commands. (#191807)

via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 13 06:54:51 PDT 2026


Author: Lang Hames
Date: 2026-04-13T14:54:46+01:00
New Revision: a2bf43d6b18d6a0614b685c8c72432fc90f6dc1c

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

LOG: [ORC] Add MachOBuilder support for LC_UUID load commands. (#191807)

Enables LC_UUID load commands to be added with the addLoadCommand
method.

This will be used in future MachOPlatform changes to add support for
adding UUIDs to MachO JITDylibs.

Added: 
    llvm/unittests/ExecutionEngine/Orc/MachOBuilderTest.cpp

Modified: 
    llvm/include/llvm/ExecutionEngine/Orc/MachOBuilder.h
    llvm/unittests/ExecutionEngine/Orc/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/MachOBuilder.h b/llvm/include/llvm/ExecutionEngine/Orc/MachOBuilder.h
index 1296e24fa4162..3d833348b9b2d 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/MachOBuilder.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/MachOBuilder.h
@@ -81,6 +81,15 @@ struct MachOBuilderLoadCommand
       : MachOBuilderLoadCommandImplBase<LCType>(std::forward<ArgTs>(Args)...) {}
 };
 
+template <>
+struct MachOBuilderLoadCommand<MachO::LC_UUID>
+    : public MachOBuilderLoadCommandImplBase<MachO::LC_UUID> {
+  MachOBuilderLoadCommand(const uint8_t (&UUID)[16])
+      : MachOBuilderLoadCommandImplBase<MachO::LC_UUID>() {
+    memcpy(uuid, UUID, sizeof(uuid));
+  }
+};
+
 template <MachO::LoadCommandType LCType>
 struct MachOBuilderDylibLoadCommand
     : public MachOBuilderLoadCommandImplBase<LCType> {

diff  --git a/llvm/unittests/ExecutionEngine/Orc/CMakeLists.txt b/llvm/unittests/ExecutionEngine/Orc/CMakeLists.txt
index 03df3d66f78e1..0d7baef3a0d93 100644
--- a/llvm/unittests/ExecutionEngine/Orc/CMakeLists.txt
+++ b/llvm/unittests/ExecutionEngine/Orc/CMakeLists.txt
@@ -31,6 +31,7 @@ add_llvm_unittest(OrcJITTests
   LibraryResolverTest.cpp
   LinkGraphLinkingLayerTest.cpp
   LookupAndRecordAddrsTest.cpp
+  MachOBuilderTest.cpp
   MachOPlatformTest.cpp
   MapperJITLinkMemoryManagerTest.cpp
   MemoryFlagsTest.cpp

diff  --git a/llvm/unittests/ExecutionEngine/Orc/MachOBuilderTest.cpp b/llvm/unittests/ExecutionEngine/Orc/MachOBuilderTest.cpp
new file mode 100644
index 0000000000000..55445cd1875d7
--- /dev/null
+++ b/llvm/unittests/ExecutionEngine/Orc/MachOBuilderTest.cpp
@@ -0,0 +1,43 @@
+//===---------- MachOBuilderTest.cpp - MachOBuilder Tests -----------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/ExecutionEngine/Orc/MachOBuilder.h"
+#include "llvm/BinaryFormat/MachO.h"
+#include "llvm/Object/MachO.h"
+#include "llvm/Testing/Support/Error.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+using namespace llvm::orc;
+
+static Expected<std::unique_ptr<object::MachOObjectFile>>
+parseMachO(ArrayRef<char> Buffer) {
+  return object::ObjectFile::createMachOObjectFile(
+      MemoryBufferRef(StringRef(Buffer.data(), Buffer.size()), "test"));
+}
+
+TEST(MachOBuilderTest, AddLCUUID) {
+  MachOBuilder<MachO64LE> B(4096);
+  B.Header.filetype = MachO::MH_OBJECT;
+
+  uint8_t UUID[16] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
+                      0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF};
+
+  B.addLoadCommand<MachO::LC_UUID>(UUID);
+
+  size_t Size = B.layout();
+  std::vector<char> Buffer(Size, 0);
+  B.write({Buffer.data(), Buffer.size()});
+
+  auto Obj = parseMachO(Buffer);
+  ASSERT_THAT_EXPECTED(Obj, Succeeded());
+
+  ArrayRef<uint8_t> ParsedUUID = (*Obj)->getUuid();
+  ASSERT_EQ(ParsedUUID.size(), 16u);
+  EXPECT_EQ(ArrayRef<uint8_t>(UUID), ParsedUUID);
+}


        


More information about the llvm-commits mailing list