CC=gcc CXX=g++ cmake $LLVM_DIR -G "Ninja" -DCMAKE_BUILD_TYPE=Debug -DLLVM_TARGETS_TO_BUILD="X86" -DCMAKE_INSTALL_PREFIX=$PREFIX
Built using the MINGW-packages repo: https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-binutils, with additional CFLAGS options to enable profiling (CFLAGS=-pg
), --with-libiconv=/mingw64
, --with-sysroot=/mingw64
, and --prefix=/opt/bindebug
- The linker without these patches, and the only configure option being
--prefix=/opt/bindebug
is nonfunctional, bombing with obscure errors such as:
$ gcc -Wl,-v -B /opt/bindebug/bin/ add.c
collect2 version 5.3.0
C:/msys64/opt/bindebug/bin/ld.exe -plugin C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/liblto_plugin-0.dll -plugin-opt=C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\msys64\tmp\ccI21h9j.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -m i386pep -Bdynamic C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/crtbegin.o -LC:/msys64/opt/bindebug/bin -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0 -LC:/msys64/mingw64/bin/../lib/gcc -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../lib -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../.. -v C:\msys64\tmp\ccY3IKUb.o -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib/../lib/default-manifest.o C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/crtend.o
GNU ld (GNU Binutils) 2.27C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o: error adding symbols: File truncated
collect2.exe: error: ld returned 1 exit status
$ gcc -nostdlib -Wl,-v -B /opt/bindebug/bin/ add.c
collect2 version 5.3.0
C:/msys64/opt/bindebug/bin/ld.exe -plugin C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/liblto_plugin-0.dll -plugin-opt=C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\msys64\tmp\ccPhx7F0.res -m i386pep -Bdynamic -LC:/msys64/opt/bindebug/bin -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0 -LC:/msys64/mingw64/bin/../lib/gcc -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../lib -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../.. -v C:\msys64\tmp\ccGFmL2k.o
GNU ld (GNU Binutils) 2.27C:/msys64/opt/bindebug/bin/ld.exe: C:\msys64\tmp\ccGFmL2k.o (text): Section flag IMAGE_SCN_MEM_NOT_CACHED (0x4000000) ignored
C:/msys64/opt/bindebug/bin/ld.exe: C:\msys64\tmp\ccGFmL2k.o: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section text
C:/msys64/opt/bindebug/bin/ld.exe: error: C:\msys64\tmp\ccGFmL2k.o: file too short
collect2.exe: error: ld returned 1 exit status
ninja -v
g++ -B/opt/bindebug/bin -v -Wl,-v -Wa,-mbig-obj -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -Werror=date-time -std=gnu++11 -g F:/build-llvm-or1k/tools/lto/LTO.def -shared -o bin\LTO.dll -Wl,--out-implib,lib\libLTO.dll.a -Wl,--major-image-version,0,--minor-image-version,0 tools/lto/CMakeFiles/LTO.dir/LTODisassembler.cpp.obj tools/lto/CMakeFiles/LTO.dir/lto.cpp.obj lib/libLLVMX86CodeGen.a lib/libLLVMX86AsmPrinter.a lib/libLLVMX86AsmParser.a lib/libLLVMX86Desc.a lib/libLLVMX86Info.a lib/libLLVMX86Disassembler.a lib/libLLVMOR1KCodeGen.a lib/libLLVMOR1KAsmPrinter.a lib/libLLVMOR1KAsmParser.a lib/libLLVMOR1KDesc.a lib/libLLVMOR1KInfo.a lib/libLLVMOR1KDisassembler.a lib/libLLVMBitReader.a lib/libLLVMCore.a lib/libLLVMLTO.a lib/libLLVMMC.a lib/libLLVMMCDisassembler.a lib/libLLVMSupport.a lib/libLLVMTarget.a lib/libLLVMX86AsmPrinter.a lib/libLLVMX86Utils.a lib/libLLVMX86Info.a lib/libLLVMAsmPrinter.a lib/libLLVMDebugInfoCodeView.a lib/libLLVMSelectionDAG.a lib/libLLVMOR1KAsmPrinter.a lib/libLLVMOR1KInfo.a lib/libLLVMCodeGen.a lib/libLLVMTarget.a lib/libLLVMBitWriter.a lib/libLLVMObjCARCOpts.a lib/libLLVMipo.a lib/libLLVMObject.a lib/libLLVMMCParser.a lib/libLLVMLinker.a lib/libLLVMScalarOpts.a lib/libLLVMInstCombine.a lib/libLLVMInstrumentation.a lib/libLLVMMC.a lib/libLLVMIRReader.a lib/libLLVMBitReader.a lib/libLLVMAsmParser.a lib/libLLVMVectorize.a lib/libLLVMTransformUtils.a lib/libLLVMAnalysis.a lib/libLLVMProfileData.a lib/libLLVMCore.a lib/libLLVMSupport.a -lpsapi -lshell32 -lole32 -luuid -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
gprof /opt/bindebug/bin/ld.bfd.exe gmon.out > gprof.log
- Ninja should be run with the normal linker until
bin/LTO.dll
is linked, at which point I took theg++
command line and prepended-B/opt/bindebug/bin -v -Wl,-v
. The command line input tocollect2
andld
itself is:
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/collect2.exe -plugin C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/liblto_plugin-0.dll -plugin-opt=C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\msys64\tmp\ccZVDYdr.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -m i386pep --shared -Bdynamic -e DllMainCRTStartup --enable-auto-image-base -o binLTO.dll C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib/../lib/dllcrt2.o C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/crtbegin.o -LC:/msys64/opt/bindebug/bin -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0 -LC:/msys64/mingw64/bin/../lib/gcc -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../lib -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../.. -v F:/build-llvm-or1k/tools/lto/LTO.def --out-implib liblibLTO.dll.a --major-image-version 0 --minor-image-version 0 tools/lto/CMakeFiles/LTO.dir/LTODisassembler.cpp.obj tools/lto/CMakeFiles/LTO.dir/lto.cpp.obj lib/libLLVMX86CodeGen.a lib/libLLVMX86AsmPrinter.a lib/libLLVMX86AsmParser.a lib/libLLVMX86Desc.a lib/libLLVMX86Info.a lib/libLLVMX86Disassembler.a lib/libLLVMOR1KCodeGen.a lib/libLLVMOR1KAsmPrinter.a lib/libLLVMOR1KAsmParser.a lib/libLLVMOR1KDesc.a lib/libLLVMOR1KInfo.a lib/libLLVMOR1KDisassembler.a lib/libLLVMBitReader.a lib/libLLVMCore.a lib/libLLVMLTO.a lib/libLLVMMC.a lib/libLLVMMCDisassembler.a lib/libLLVMSupport.a lib/libLLVMTarget.a lib/libLLVMX86AsmPrinter.a lib/libLLVMX86Utils.a lib/libLLVMX86Info.a lib/libLLVMAsmPrinter.a lib/libLLVMDebugInfoCodeView.a lib/libLLVMSelectionDAG.a lib/libLLVMOR1KAsmPrinter.a lib/libLLVMOR1KInfo.a lib/libLLVMCodeGen.a lib/libLLVMTarget.a lib/libLLVMBitWriter.a lib/libLLVMObjCARCOpts.a lib/libLLVMipo.a lib/libLLVMObject.a lib/libLLVMMCParser.a lib/libLLVMLinker.a lib/libLLVMScalarOpts.a lib/libLLVMInstCombine.a lib/libLLVMInstrumentation.a lib/libLLVMMC.a lib/libLLVMIRReader.a lib/libLLVMBitReader.a lib/libLLVMAsmParser.a lib/libLLVMVectorize.a lib/libLLVMTransformUtils.a lib/libLLVMAnalysis.a lib/libLLVMProfileData.a lib/libLLVMCore.a lib/libLLVMSupport.a -lpsapi -lshell32 -lole32 -luuid -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -lstdc++ -lmingw32 -lgcc_s --undefined=___deregister_frame_info --undefined=___register_frame_info -lgcc -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s --undefined=___deregister_frame_info --undefined=___register_frame_info -lgcc -lmoldname -lmingwex -lmsvcrt C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/crtend.o
collect2 version 5.3.0
C:/msys64/opt/bindebug/bin/ld.exe -plugin C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/liblto_plugin-0.dll -plugin-opt=C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\msys64\tmp\ccZVDYdr.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -m i386pep --shared -Bdynamic -e DllMainCRTStartup --enable-auto-image-base -o binLTO.dll C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib/../lib/dllcrt2.o C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/crtbegin.o -LC:/msys64/opt/bindebug/bin -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0 -LC:/msys64/mingw64/bin/../lib/gcc -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../lib -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../../../x86_64-w64-mingw32/lib -LC:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/../../.. -v F:/build-llvm-or1k/tools/lto/LTO.def --out-implib liblibLTO.dll.a --major-image-version 0 --minor-image-version 0 tools/lto/CMakeFiles/LTO.dir/LTODisassembler.cpp.obj tools/lto/CMakeFiles/LTO.dir/lto.cpp.obj lib/libLLVMX86CodeGen.a lib/libLLVMX86AsmPrinter.a lib/libLLVMX86AsmParser.a lib/libLLVMX86Desc.a lib/libLLVMX86Info.a lib/libLLVMX86Disassembler.a lib/libLLVMOR1KCodeGen.a lib/libLLVMOR1KAsmPrinter.a lib/libLLVMOR1KAsmParser.a lib/libLLVMOR1KDesc.a lib/libLLVMOR1KInfo.a lib/libLLVMOR1KDisassembler.a lib/libLLVMBitReader.a lib/libLLVMCore.a lib/libLLVMLTO.a lib/libLLVMMC.a lib/libLLVMMCDisassembler.a lib/libLLVMSupport.a lib/libLLVMTarget.a lib/libLLVMX86AsmPrinter.a lib/libLLVMX86Utils.a lib/libLLVMX86Info.a lib/libLLVMAsmPrinter.a lib/libLLVMDebugInfoCodeView.a lib/libLLVMSelectionDAG.a lib/libLLVMOR1KAsmPrinter.a lib/libLLVMOR1KInfo.a lib/libLLVMCodeGen.a lib/libLLVMTarget.a lib/libLLVMBitWriter.a lib/libLLVMObjCARCOpts.a lib/libLLVMipo.a lib/libLLVMObject.a lib/libLLVMMCParser.a lib/libLLVMLinker.a lib/libLLVMScalarOpts.a lib/libLLVMInstCombine.a lib/libLLVMInstrumentation.a lib/libLLVMMC.a lib/libLLVMIRReader.a lib/libLLVMBitReader.a lib/libLLVMAsmParser.a lib/libLLVMVectorize.a lib/libLLVMTransformUtils.a lib/libLLVMAnalysis.a lib/libLLVMProfileData.a lib/libLLVMCore.a lib/libLLVMSupport.a -lpsapi -lshell32 -lole32 -luuid -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -lstdc++ -lmingw32 -lgcc_s --undefined=___deregister_frame_info --undefined=___register_frame_info -lgcc -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s --undefined=___deregister_frame_info --undefined=___register_frame_info -lgcc -lmoldname -lmingwex -lmsvcrt C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/5.3.0/crtend.o
GNU ld (GNU Binutils) 2.27
- The
gprof.log
analysis on Bugzilla is the output of the aboveld
command.