[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