[Lldb-commits] [lldb] [lldb][AIX] Extract CPU type and set up process architecture accordingly (PR #189910)

Hemang Gadhavi via lldb-commits lldb-commits at lists.llvm.org
Wed Apr 1 05:42:34 PDT 2026


================
@@ -133,44 +133,35 @@ ModuleSpecList ObjectFileXCOFF::GetModuleSpecifications(
     return {};
 
   ModuleSpecList specs;
-  if (ObjectFileXCOFF::MagicBytesMatch(extractor_sp, 0,
-                                       extractor_sp->GetByteSize())) {
+  uint16_t magic = 0;
+  if ((magic = ObjectFileXCOFF::GetMagicBytes(
+           extractor_sp, 0, extractor_sp->GetByteSize())) != 0) {
+    const uint32_t cpu_type =
+        (magic == XCOFF::XCOFF64) ? XCOFF::TCPU_PPC64 : XCOFF::TCPU_PPC;
     ArchSpec arch_spec =
-        ArchSpec(eArchTypeXCOFF, XCOFF::TCPU_PPC64, LLDB_INVALID_CPUTYPE);
+        ArchSpec(eArchTypeXCOFF, cpu_type, LLDB_INVALID_CPUTYPE);
     ModuleSpec spec(file, arch_spec);
-    spec.GetArchitecture().SetArchitecture(eArchTypeXCOFF, XCOFF::TCPU_PPC64,
-                                           LLDB_INVALID_CPUTYPE,
-                                           llvm::Triple::AIX);
+    spec.GetArchitecture().SetArchitecture(
+        eArchTypeXCOFF, cpu_type, LLDB_INVALID_CPUTYPE, llvm::Triple::AIX);
     specs.Append(spec);
   }
   return specs;
 }
 
-static uint32_t XCOFFHeaderSizeFromMagic(uint32_t magic) {
-  switch (magic) {
-  case XCOFF::XCOFF32:
-    return sizeof(struct llvm::object::XCOFFFileHeader32);
-    break;
-  case XCOFF::XCOFF64:
-    return sizeof(struct llvm::object::XCOFFFileHeader64);
-    break;
-
-  default:
-    break;
-  }
-  return 0;
-}
-
-bool ObjectFileXCOFF::MagicBytesMatch(DataExtractorSP &extractor_sp,
-                                      lldb::addr_t data_offset,
-                                      lldb::addr_t data_length) {
+uint16_t ObjectFileXCOFF::GetMagicBytes(DataExtractorSP &extractor_sp,
+                                        lldb::addr_t data_offset,
+                                        lldb::addr_t data_length) {
   DataExtractorSP magic_extractor_sp =
       extractor_sp->GetSubsetExtractorSP(data_offset);
   // Need to set this as XCOFF is only compatible with Big Endian
   magic_extractor_sp->SetByteOrder(eByteOrderBig);
   lldb::offset_t offset = 0;
   uint16_t magic = magic_extractor_sp->GetU16(&offset);
-  return XCOFFHeaderSizeFromMagic(magic) != 0;
+  // Validating magic
+  if (magic == XCOFF::XCOFF64 || magic == XCOFF::XCOFF32)
+    return magic;
+  else
+    return 0;
----------------
HemangGadhavi wrote:

Done.

https://github.com/llvm/llvm-project/pull/189910


More information about the lldb-commits mailing list