> On Feb 15, 2018, at 3:56 AM, Dmitry Antipov via lldb-dev > <lldb-dev@lists.llvm.org> wrote: > > On 02/15/2018 02:21 PM, Pavel Labath wrote: > >> I've tried your sample, and I was indeed able to reproduce the >> problem. What makes your case special is that "sin" and "cos" are >> indirect functions (STT_GNU_IFUNC), so we have to do some extra work >> (call the resolver function) to resolve them. > > I've changed my sample to dlsym() a regular function instead of an indirect > stub, and got a breakpoint hit, but: > > (lldb) attach 16196 > Process 16196 stopped > * thread #1, name = 'main', stop reason = signal SIGSTOP > frame #0: 0x0000000000400798 main`main(argc=1, argv=0x00007ffd6f662668) at > main.c:16 > 13 for (a = 0; a < DELAY + argc; a++) > 14 for (b = 0; b < DELAY + argc; b++) > 15 for (c = 0; c < DELAY + argc; c++) > -> 16 z += a + b + c; > 17 while (1) > 18 { > 19 void *handle = dlopen ("libfoo.so", RTLD_LAZY); > > Executable module set to "/home/dantipov/tmp/t-dl2/main". > Architecture set to: x86_64--linux. > (lldb) breakpoint set -n foo > Breakpoint 1: no locations (pending). > WARNING: Unable to resolve breakpoint to any actual locations. > (lldb) process continue > Process 16196 resuming > 1 location added to breakpoint 1 > (lldb) error: ld-linux-x86-64.so.2 0x0005d207: adding range [0x14eea-0x14f5a) > which has a base that is less than the function's low PC 0x15730. Please file > a bug and attach the file at the start of this error message > error: ld-linux-x86-64.so.2 0x0005d207: adding range [0x14f70-0x14f76) which > has a base that is less than the function's low PC 0x15730. Please file a bug > and attach the file at the start of this error message > error: ld-linux-x86-64.so.2 0x0005d268: adding range [0x14eea-0x14f5a) which > has a base that is less than the function's low PC 0x15730. Please file a bug > and attach the file at the start of this error message > error: ld-linux-x86-64.so.2 0x0005d268: adding range [0x14f70-0x14f76) which > has a base that is less than the function's low PC 0x15730. Please file a bug > and attach the file at the start of this error message > Process 16196 stopped > * thread #1, name = 'main', stop reason = breakpoint 1.1 > frame #0: 0x00007f3b1a8536f7 > libfoo.so`foo(v=0.00000000000003907985046680551) at libfoo.c:6 > 3 double > 4 foo (double v) > 5 { > -> 6 return sin (v) + cos (v); > 7 } > > This seems to be an another bug, isn't it? >
Yes, the compiler or linker is producing bad DWARF. It is creating DWARF that has a function that has a top level address range of something like [0x1000-0x2000) and it has a child lexical block with a range like [0x900-0x910). All address ranges must be contained in their parent ranges within a DW_TAG_subprogram in the DWARF. If you have llvm-dwarfdump, you can run "llvm-dwarfdump --verify" to see a list of the errors in the DWARF that you can use to file a compiler bug. Try running "llvm-dwarfdump --verify" on the .o file before it is linked. If there are DWARF problems with the .o file, then file a bug on the compiler. If the problem only exists on the final executable, then file a bug against your linker. Greg > Dmitry > > ----------------------------------------------------------------------------------- > This email message is for the sole use of the intended recipient(s) and may > contain > confidential information. Any unauthorized review, use, disclosure or > distribution > is prohibited. If you are not the intended recipient, please contact the > sender by > reply email and destroy all copies of the original message. > ----------------------------------------------------------------------------------- > <libfoo.c><main.c><Makefile.txt>_______________________________________________ > lldb-dev mailing list > lldb-dev@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev