[Lldb-commits] [lldb] [lldb] Set default object format to `MachO` in `ObjectFileMachO` (PR #142704)

Jason Molenda via lldb-commits lldb-commits at lists.llvm.org
Thu Jun 5 15:46:24 PDT 2025


jasonmolenda wrote:

In `ObjectFileMachO::GetAllArchSpecs()`, we call `ArchSpec::SetArchitecture()`,
```
base_arch.SetArchitecture(eArchTypeMachO, header.cputype, header.cpusubtype);
```

given a `mach_header`.  This does 
```
   890 	        m_triple.setArchName(llvm::StringRef(core_def->name));
```

Then in llvm's `Triple::Triple()`, 

```
   1068	  ObjectFormat = getDefaultFormat(*this);
```

And that's where the object file format is being set to ELF,

```
   923 	static Triple::ObjectFormatType getDefaultFormat(const Triple &T) {
-> 924 	  switch (T.getArch()) {
   925 	  case Triple::UnknownArch:
   926 	  case Triple::aarch64:

   936 	    default:
   937 	      return T.isOSDarwin() ? Triple::MachO : Triple::ELF;
```

The triple being passed in here is just "arm64" at this point, so the T.isOSDarwin() fails, ObjectFile is set to ELF and it is never reset.

But I don't see why the ModuleArchSpec being set to ObjectFileELF (which I'd never noticed before, ever) was not showing up in the triples, but -macho is, when it's set in ObjectFileMachO.  Maybe it's an ordering thing, where now that the object file is being set in `ObjectFileMachO::GetAllArchSpecs` it is constructing a triple string based on that, and it enters the picture.

It seems like it would be better to set the ObjectFile format in `ArchSpec::SetArchitecture` when we know we're building a triple for a mach-o file, to fix the erroneous ObjectFileELF setting from llvm when we only gave it a cpu name.  but let me look a little more.

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


More information about the lldb-commits mailing list