Okay, let's try this again. I've taken all the source and header files needed to build libstdc++ and libsupc++, and put together a small and very simple Makefile that automates the process. Anyone interested can grab the whole thing from here: http://goanna.cs.rmit.edu.au/~emil/dietstdcxx.1.tar.bz2 (101KB) Usage instructions: 1) Run GNU make: $ gmake This will produce dietstdcxx.bc - a bytecode / object file containing all of stdc++ and supc++ llvm-link'd together. 2) Run: $ gmake test This will build and run the test program. Example: $ gmake test llvm-g++ -emit-llvm -c -o test.o test.cpp llvm-link -f -o linked.o test.o dietstdcxx.bc llvmc -o=reduced linked.o llc -f -o=out.c -march=c reduced.bc WARNING: this target does not support the llvm.stacksave intrinsic. gcc out.c ./a.out hello world $ Things I'm doing differently compared to last time: - almost sane build infrastructure - building dietstdcxx with -fno-exceptions (!) Without the llvmc step to reduce the bytecode, I get three errors in the gcc stage: $ llc -f -o=out2.c -march=c linked.o WARNING: this target does not support the llvm.stacksave intrinsic. $ gcc out2.c /var/tmp//cc79lj1N.o(.text+0xd726d): In function `__cxxabiv1::__pbase_type_info::__do_catch(std::type_info const*, void**, unsigned int) const': : undefined reference to `l182___cxa_bad_typeid' /var/tmp//cc79lj1N.o(.data+0x19fc): undefined reference to `std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::seekpos(std::fpos<__mbstate_t>, std::_Ios_Openmode)' /var/tmp//cc79lj1N.o(.data+0x1a3c): undefined reference to `std::basic_filebuf<char, std::char_traits<char> >::seekpos(std::fpos<__mbstate_t>, std::_Ios_Openmode)' $ And again, using llvmc instead of llvm-link produces bad code: $ gmake dietstdcxx.bc $ llvm-g++ -emit-llvm -c -o test.o test.cpp $ llvmc -o=linked test.o dietstdcxx.bc $ lli linked.bc Segmentation fault (core dumped) $ Reid, you asked for a stack trace from a program generated by llvmc. I tried this: $ gmake clean $ gmake [with CCFLAGS=-g] $ llvm-g++ -g -emit-llvm -c -o test.o test.cpp $ llvmc -native -g -o=native test.o dietstdcxx.bc But there were no debug symbols. gdb says the problem is in main(), but doesn't even give a line number. It also complains about: DW_FORM_strp pointing outside of .debug_str section [in module /rest/dietstdcxx/native] Did you mean something else? --Emil (P.S. "diet" turned out to be something of a misnomer. In the end, I didn't really strip out any code)