<div dir="ltr">I'm still missing some of the motivation as to 'why', here.<br><br>If there are significant uses of a library that don't use most of it - yeah, i think there's merit in separating things out (eg: if lld, lldb, etc, use, say, the DWARF constants but not the rest of Support/ADT - yeah, it'd be nice if they didn't have to rebuild whenever SmallString changed, for example). (though even then, Ninja's pretty efficient about only rebuilding what it has to, so I'm not sure that even the library granularity changes much about the build performance here - header dependency could be something to care about there, for sure (fewer long chains of dependent headers, breaking a header into two if there's functionality that is used broadly next to functionality that has a narrow use, etc).<br><br>What's the goal/metric/benefit?</div><br><div class="gmail_quote"><div dir="ltr">On Fri, Jun 2, 2017 at 11:01 AM Zachary Turner via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">zturner created this revision.<br>
Herald added subscribers: jgravelle-google, sbc100, javed.absar, aprantl, mgorny, nhaehnle, nemanjai, emaste, jyknight, dschuff, arsenm, jfb.<br>
<br>
Based on the list discussion from the other day, this does the following:<br>
<br>
1. Moves `Dwarf.h`, `ELF.h`, `COFF.h`, `Wasm.h`, `MachO.h`, all corresponding `.def` files, and all `xxxReloc` folders out of `Support` and into `ObjectLayout`.<br>
2. Moves the `file_magic` structure and `identify_magic` functions from `Support` to `ObjectLayout`.<br>
3. Moves corresponding unit tests from `SupportTests` to a new unit test target named `ObjectLayoutTests`.<br>
4. Updates all relevant `LLVMBuild.txt` files.<br>
5. Updates all code in llvm, clang, lld, and lldb to use the new header locations.<br>
<br>
Sorry this patch is so large, but there is really no good way around it.<br>
<br>
<br>
<a href="https://reviews.llvm.org/D33843" rel="noreferrer" target="_blank">https://reviews.llvm.org/D33843</a><br>
<br>
Files:<br>
lld/COFF/Chunks.cpp<br>
lld/COFF/Driver.cpp<br>
lld/COFF/InputFiles.cpp<br>
lld/ELF/Config.h<br>
lld/ELF/EhFrame.cpp<br>
lld/ELF/ICF.cpp<br>
lld/ELF/LTO.cpp<br>
lld/ELF/LinkerScript.cpp<br>
lld/ELF/Mips.cpp<br>
lld/ELF/OutputSections.cpp<br>
lld/ELF/ScriptParser.cpp<br>
lld/ELF/SyntheticSections.cpp<br>
lld/ELF/Target.cpp<br>
lld/ELF/Thunks.cpp<br>
lld/include/lld/Core/Reader.h<br>
lld/include/lld/ReaderWriter/MachOLinkingContext.h<br>
lld/lib/Core/Reader.cpp<br>
lld/lib/Driver/DarwinLdDriver.cpp<br>
lld/lib/ReaderWriter/FileArchive.cpp<br>
lld/lib/ReaderWriter/MachO/ExecutableAtoms.h<br>
lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp<br>
lld/lib/ReaderWriter/MachO/MachONormalizedFile.h<br>
lld/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp<br>
lld/lib/ReaderWriter/MachO/MachONormalizedFileBinaryUtils.h<br>
lld/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp<br>
lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp<br>
lld/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp<br>
lld/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp<br>
lld/lib/ReaderWriter/MachO/WriterMachO.cpp<br>
lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp<br>
lld/unittests/DriverTests/DarwinLdDriverTest.cpp<br>
lld/unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp<br>
lld/unittests/MachOTests/MachONormalizedFileBinaryWriterTests.cpp<br>
lld/unittests/MachOTests/MachONormalizedFileToAtomsTests.cpp<br>
lld/unittests/MachOTests/MachONormalizedFileYAMLTests.cpp<br>
lldb/include/lldb/Core/dwarf.h<br>
lldb/include/lldb/Utility/SafeMachO.h<br>
lldb/source/Core/ArchSpec.cpp<br>
lldb/source/Core/CMakeLists.txt<br>
lldb/source/Plugins/ObjectFile/ELF/CMakeLists.txt<br>
lldb/source/Plugins/ObjectFile/ELF/ELFHeader.h<br>
lldb/source/Plugins/ObjectFile/PECOFF/CMakeLists.txt<br>
lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp<br>
lldb/source/Plugins/Process/elf-core/CMakeLists.txt<br>
lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp<br>
lldb/source/Utility/CMakeLists.txt<br>
lldb/unittests/Core/ArchSpecTest.cpp<br>
lldb/unittests/Core/StructuredDataTest.cpp<br>
llvm/examples/ExceptionDemo/ExceptionDemo.cpp<br>
llvm/include/llvm/CodeGen/DIE.h<br>
llvm/include/llvm/CodeGen/MachineModuleInfoImpls.h<br>
llvm/include/llvm/DebugInfo/CodeView/EnumTables.h<br>
llvm/include/llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h<br>
llvm/include/llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h<br>
llvm/include/llvm/DebugInfo/DWARF/DWARFAttribute.h<br>
llvm/include/llvm/DebugInfo/DWARF/DWARFDebugInfoEntry.h<br>
llvm/include/llvm/DebugInfo/DWARF/DWARFDebugPubTable.h<br>
llvm/include/llvm/DebugInfo/DWARF/DWARFDie.h<br>
llvm/include/llvm/DebugInfo/DWARF/DWARFFormValue.h<br>
llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h<br>
llvm/include/llvm/IR/DebugInfoMetadata.h<br>
llvm/include/llvm/LinkAllIR.h<br>
llvm/include/llvm/MC/MCContext.h<br>
llvm/include/llvm/MC/MCELFObjectWriter.h<br>
llvm/include/llvm/MC/MCMachObjectWriter.h<br>
llvm/include/llvm/MC/MCSectionMachO.h<br>
llvm/include/llvm/MC/MCSymbolWasm.h<br>
llvm/include/llvm/Object/COFF.h<br>
llvm/include/llvm/Object/ELF.h<br>
llvm/include/llvm/Object/ELFObjectFile.h<br>
llvm/include/llvm/Object/ELFTypes.h<br>
llvm/include/llvm/Object/MachO.h<br>
llvm/include/llvm/Object/MachOUniversal.h<br>
llvm/include/llvm/Object/ObjectFile.h<br>
llvm/include/llvm/Object/RelocVisitor.h<br>
llvm/include/llvm/Object/SymbolicFile.h<br>
llvm/include/llvm/Object/Wasm.h<br>
llvm/include/llvm/Object/WindowsResource.h<br>
llvm/include/llvm/ObjectLayout/COFF.h<br>
llvm/include/llvm/ObjectLayout/Dwarf.def<br>
llvm/include/llvm/ObjectLayout/Dwarf.h<br>
llvm/include/llvm/ObjectLayout/ELF.h<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/AArch64.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/AMDGPU.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/ARM.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/AVR.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/BPF.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/Hexagon.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/Lanai.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/Mips.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/PowerPC.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/PowerPC64.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/RISCV.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/Sparc.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/SystemZ.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/WebAssembly.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/i386.def<br>
llvm/include/llvm/ObjectLayout/ELFRelocs/x86_64.def<br>
llvm/include/llvm/ObjectLayout/MachO.def<br>
llvm/include/llvm/ObjectLayout/MachO.h<br>
llvm/include/llvm/ObjectLayout/Magic.h<br>
llvm/include/llvm/ObjectLayout/Wasm.h<br>
llvm/include/llvm/ObjectLayout/WasmRelocs/WebAssembly.def<br>
llvm/include/llvm/ObjectYAML/COFFYAML.h<br>
llvm/include/llvm/ObjectYAML/DWARFYAML.h<br>
llvm/include/llvm/ObjectYAML/ELFYAML.h<br>
llvm/include/llvm/ObjectYAML/MachOYAML.h<br>
llvm/include/llvm/ObjectYAML/WasmYAML.h<br>
llvm/include/llvm/Support/COFF.h<br>
llvm/include/llvm/Support/Dwarf.def<br>
llvm/include/llvm/Support/Dwarf.h<br>
llvm/include/llvm/Support/ELF.h<br>
llvm/include/llvm/Support/ELFRelocs/AArch64.def<br>
llvm/include/llvm/Support/ELFRelocs/AMDGPU.def<br>
llvm/include/llvm/Support/ELFRelocs/ARM.def<br>
llvm/include/llvm/Support/ELFRelocs/AVR.def<br>
llvm/include/llvm/Support/ELFRelocs/BPF.def<br>
llvm/include/llvm/Support/ELFRelocs/Hexagon.def<br>
llvm/include/llvm/Support/ELFRelocs/Lanai.def<br>
llvm/include/llvm/Support/ELFRelocs/Mips.def<br>
llvm/include/llvm/Support/ELFRelocs/PowerPC.def<br>
llvm/include/llvm/Support/ELFRelocs/PowerPC64.def<br>
llvm/include/llvm/Support/ELFRelocs/RISCV.def<br>
llvm/include/llvm/Support/ELFRelocs/Sparc.def<br>
llvm/include/llvm/Support/ELFRelocs/SystemZ.def<br>
llvm/include/llvm/Support/ELFRelocs/WebAssembly.def<br>
llvm/include/llvm/Support/ELFRelocs/i386.def<br>
llvm/include/llvm/Support/ELFRelocs/x86_64.def<br>
llvm/include/llvm/Support/FileSystem.h<br>
llvm/include/llvm/Support/MachO.def<br>
llvm/include/llvm/Support/MachO.h<br>
llvm/include/llvm/Support/Wasm.h<br>
llvm/include/llvm/Support/WasmRelocs/WebAssembly.def<br>
llvm/lib/AsmParser/LLParser.cpp<br>
llvm/lib/CMakeLists.txt<br>
llvm/lib/CodeGen/AsmPrinter/ARMException.cpp<br>
llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br>
llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp<br>
llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp<br>
llvm/lib/CodeGen/AsmPrinter/DIEHash.cpp<br>
llvm/lib/CodeGen/AsmPrinter/DwarfAccelTable.h<br>
llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp<br>
llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h<br>
llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br>
llvm/lib/CodeGen/AsmPrinter/DwarfExpression.cpp<br>
llvm/lib/CodeGen/AsmPrinter/ErlangGCPrinter.cpp<br>
llvm/lib/CodeGen/AsmPrinter/WinException.cpp<br>
llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp<br>
llvm/lib/DebugInfo/DWARF/DWARFAbbreviationDeclaration.cpp<br>
llvm/lib/DebugInfo/DWARF/DWARFAcceleratorTable.cpp<br>
llvm/lib/DebugInfo/DWARF/DWARFDebugFrame.cpp<br>
llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp<br>
llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp<br>
llvm/lib/DebugInfo/DWARF/DWARFDebugMacro.cpp<br>
llvm/lib/DebugInfo/DWARF/DWARFDebugPubTable.cpp<br>
llvm/lib/DebugInfo/DWARF/DWARFDie.cpp<br>
llvm/lib/DebugInfo/DWARF/DWARFFormValue.cpp<br>
llvm/lib/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.cpp<br>
llvm/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp<br>
llvm/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp<br>
llvm/lib/DebugInfo/Symbolize/Symbolize.cpp<br>
llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp<br>
llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h<br>
llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFThumb.h<br>
llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFX86_64.h<br>
llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldELFMips.cpp<br>
llvm/lib/IR/AsmWriter.cpp<br>
llvm/lib/IR/DIBuilder.cpp<br>
llvm/lib/IR/LLVMBuild.txt<br>
llvm/lib/IR/LLVMContextImpl.h<br>
llvm/lib/IR/Verifier.cpp<br>
llvm/lib/LLVMBuild.txt<br>
llvm/lib/MC/ELFObjectWriter.cpp<br>
llvm/lib/MC/MCAsmInfo.cpp<br>
llvm/lib/MC/MCAsmInfoDarwin.cpp<br>
llvm/lib/MC/MCAsmInfoELF.cpp<br>
llvm/lib/MC/MCCodeView.cpp<br>
llvm/lib/MC/MCContext.cpp<br>
llvm/lib/MC/MCDwarf.cpp<br>
llvm/lib/MC/MCELFStreamer.cpp<br>
llvm/lib/MC/MCObjectFileInfo.cpp<br>
llvm/lib/MC/MCParser/AsmParser.cpp<br>
llvm/lib/MC/MCParser/COFFAsmParser.cpp<br>
llvm/lib/MC/MCParser/DarwinAsmParser.cpp<br>
llvm/lib/MC/MCParser/ELFAsmParser.cpp<br>
llvm/lib/MC/MCSectionCOFF.cpp<br>
llvm/lib/MC/MCSectionELF.cpp<br>
llvm/lib/MC/MCStreamer.cpp<br>
llvm/lib/MC/MCSymbolELF.cpp<br>
llvm/lib/MC/MCWinEH.cpp<br>
llvm/lib/MC/MachObjectWriter.cpp<br>
llvm/lib/MC/StringTableBuilder.cpp<br>
llvm/lib/MC/WasmObjectWriter.cpp<br>
llvm/lib/MC/WinCOFFObjectWriter.cpp<br>
llvm/lib/MC/WinCOFFStreamer.cpp<br>
llvm/lib/Object/ArchiveWriter.cpp<br>
llvm/lib/Object/Binary.cpp<br>
llvm/lib/Object/COFFObjectFile.cpp<br>
llvm/lib/Object/Decompressor.cpp<br>
llvm/lib/Object/ELF.cpp<br>
llvm/lib/Object/ELFObjectFile.cpp<br>
llvm/lib/Object/IRObjectFile.cpp<br>
llvm/lib/Object/LLVMBuild.txt<br>
llvm/lib/Object/MachOObjectFile.cpp<br>
llvm/lib/Object/ObjectFile.cpp<br>
llvm/lib/Object/SymbolicFile.cpp<br>
llvm/lib/Object/WasmObjectFile.cpp<br>
llvm/lib/Object/WindowsResource.cpp<br>
llvm/lib/ObjectLayout/CMakeLists.txt<br>
llvm/lib/ObjectLayout/Dwarf.cpp<br>
llvm/lib/ObjectLayout/LLVMBuild.txt<br>
llvm/lib/ObjectLayout/Magic.cpp<br>
llvm/lib/ObjectYAML/DWARFVisitor.h<br>
llvm/lib/ObjectYAML/ELFYAML.cpp<br>
llvm/lib/ObjectYAML/MachOYAML.cpp<br>
llvm/lib/ObjectYAML/WasmYAML.cpp<br>
llvm/lib/Support/CMakeLists.txt<br>
llvm/lib/Support/Dwarf.cpp<br>
llvm/lib/Support/Path.cpp<br>
llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp<br>
llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp<br>
llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFObjectWriter.cpp<br>
llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp<br>
llvm/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp<br>
llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp<br>
llvm/lib/Target/AMDGPU/AMDGPUTargetObjectFile.cpp<br>
llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp<br>
llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp<br>
llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp<br>
llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp<br>
llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp<br>
llvm/lib/Target/ARM/ARMAsmPrinter.cpp<br>
llvm/lib/Target/ARM/ARMTargetObjectFile.cpp<br>
llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp<br>
llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp<br>
llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackendDarwin.h<br>
llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp<br>
llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp<br>
llvm/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp<br>
llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp<br>
llvm/lib/Target/AVR/AVRSubtarget.cpp<br>
llvm/lib/Target/AVR/AVRTargetObjectFile.cpp<br>
llvm/lib/Target/AVR/MCTargetDesc/AVRELFStreamer.cpp<br>
llvm/lib/Target/BPF/MCTargetDesc/BPFELFObjectWriter.cpp<br>
llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp<br>
llvm/lib/Target/Hexagon/HexagonAsmPrinter.cpp<br>
llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp<br>
llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp<br>
llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp<br>
llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp<br>
(55 more files...)<br>
<br>
</blockquote></div>