Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

solib-absolute-prefix vs. solib-search-path in GDB

Tags:

gdb

kgdb

I read the description of both but I don't yet understand the difference. Can anyone help me understand the differences?

set solib-absolute-prefix -
Specifies the local directory that contains copies of target libraries in the 
corresponding subdirectories. This option is useful when debugging with gdbserver.

.

set solib-search-path command - 
Specifies directories where GDB will search for shared libraries with symbols. This option        
is useful when debugging with gdbserver.

Thanks.

like image 827
ransh Avatar asked Jul 22 '14 19:07

ransh


People also ask

What is Solib search path?

Specifies directories where GDB will search for shared libraries with symbols. This option is useful when debugging with gdbserver.

Do you need set Solib search path or set Sysroot GDB?

If you want to use ' solib-search-path ' instead of ' sysroot ', be sure to set ' sysroot ' to a nonexistent directory to prevent GDB from finding your host's libraries. ' sysroot ' is preferred; setting it to a nonexistent directory may interfere with automatic loading of shared library symbols.


1 Answers

The wording is quite unclear :-(

Assume that your target loaded /usr/lib/libfoo.so, and that on the host (where GDB is running), you have a copy of the entire target tree in /tmp/host. That is, a copy of target's /usr/lib/libfoo.so is found on host in /tmp/host/usr/lib/libfoo.so.

Then, the following commands are almost equivalent:

set solib-absolute-prefix /tmp/host
set solib-search-path /tmp/host/usr/lib

Now consider what happens if you also have /usr/local/lib/libbar.so on target, and a copy of it in /tmp/host/usr/local/lib/libbar.so.

The solib-absolute-prefix as set above is still good to locate libbar.so, but solib-search-path would have to be modified like so:

set solib-search-path /tmp/host/usr/lib:/tmp/host/usr/local/lib

To summarize, if you have entire target tree under a single host $ROOT, then just set solib-absolute-prefix to $ROOT and you should be good.

But if you have to "assemble" target paths from multiple disjoint trees, then solib-search-path with multiple paths will allow GDB to still find correct libraries.

like image 123
Employed Russian Avatar answered Oct 06 '22 23:10

Employed Russian