Hi all, I'm having an issue with debug information and llc. A test program: #include <iostream> using namespace std; void foo() { cout << "My return address is " << __builtin_return_address(0) << endl << flush; } int main(int argc, char *argv[]) { foo(); return 0; } When I compile my test program to LLVM bytecode, and then use llc to take the bytecode to assembly, llc appears to strip the debugging information along the way:> llvm-g++ -g -c -emit-llvm test.cpp > llc test.o > g++ test.o.s > ./a.outMy return address is 0x400b92> addr2line 0x400b92??:0 My goal is to run a transformation pass on the bytecode to put in a few instrumentation hooks for a dynamic analysis I'm writing. Debug information, even if it's a little off, would be extremely useful to have in the final binary. This build chain worked with a 2.6svn version of llc (that is, the final binary would have debug information which corresponded reasonably well to the source. Also it seemed to work when this question was sent http://lists.cs.uiuc.edu/pipermail/llvmdev/2009-April/021697.html), but I recently upgraded to a 2.7svn version with the results above. Is this change intended? Is there a way tell llc to keep debug information in? Thanks! Nick -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090916/06872df2/attachment.html>
2009/9/16 Nick Jalbert <jalbert at eecs.berkeley.edu>:>> llvm-g++ -g -c -emit-llvm test.cppI always use -O0 together with -g because I had far too many problems of the like already to define on the fly if it's safe or not *not* to use it. Maybe that helps... cheers, --renato Reclaim your digital rights, eliminate DRM, learn more at http://www.defectivebydesign.org/what_is_drm
On Wed, Sep 16, 2009 at 1:34 PM, Nick Jalbert <jalbert at eecs.berkeley.edu> wrote:> Hi all, > I'm having an issue with debug information and llc. A test program: > #include <iostream> > using namespace std; > void foo() { > cout << "My return address is " << __builtin_return_address(0) << > endl << flush; > } > int main(int argc, char *argv[]) { > foo(); > return 0; > } > > When I compile my test program to LLVM bytecode, and then use llc to take > the bytecode to assembly, llc appears to strip the debugging information > along the way: >> llvm-g++ -g -c -emit-llvm test.cpp >> llc test.otry -O0 in llc command line. - Devang
Thanks for the quick responses, but unfortunately still no luck:> llvm-g++ -g -O0 -c -emit-llvm test.cpp > llc -O0 test.o > g++ test.o.s > ./a.outMy return address is 0x400bb2> addr2line 0x400bb2??:0 Also to further implicate llc, this works:> llvm-g++ -g -O0 -S test.cpp > g++ test.s > ./a.outMy return address is 0x400bf9> addr2line 0x400bf9/home/jalbert/llvmtest//test.cpp:13 Anymore thoughts? -Nick On Wed, Sep 16, 2009 at 2:29 PM, Devang Patel <devang.patel at gmail.com>wrote:> On Wed, Sep 16, 2009 at 1:34 PM, Nick Jalbert <jalbert at eecs.berkeley.edu> > wrote: > > Hi all, > > I'm having an issue with debug information and llc. A test program: > > #include <iostream> > > using namespace std; > > void foo() { > > cout << "My return address is " << __builtin_return_address(0) << > > endl << flush; > > } > > int main(int argc, char *argv[]) { > > foo(); > > return 0; > > } > > > > When I compile my test program to LLVM bytecode, and then use llc to take > > the bytecode to assembly, llc appears to strip the debugging information > > along the way: > >> llvm-g++ -g -c -emit-llvm test.cpp > >> llc test.o > > try -O0 in llc command line. > - > Devang >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090916/5c5d888f/attachment.html>