Debugging with GDB (February 2008)

Table Of Contents
176 Debugging with GDB
14.20.4 Privately mapping shared libraries
In cases where you attach to a running program and you try to set a breakpoint in a
shared library, GDB may generate the following message:
The shared libraries were not privately mapped; setting a breakpoint
in a shared library will not work until you rerun the program.
GDB generates this message because the debugger sets breakpoints by replacing an
instruction with a BREAK instruction. The debugger cannot set a breakpoint in a shared
library because doing so can affect other processes on the system in addition to the
process being debugged.
To set the breakpoint you must kill the program and then rerun it so that the dynamic
linker maps a copy of the shared library privately. There are two ways to run the
program:
Rerun the program under GDB to have the debugger cause dld to map all shared
libraries as private, enabling breakpoint debugging.
On PA-RISC systems, use the following command on an executable:
/opt/langtools/bin/pxdb -s on executable-name
The pxdb -s on command marks the executable so that dld maps shared libraries
as private when the program starts up.
You can verify the status of the shared library with this command:
/opt/langtools/bin/pxdb -s status executable-name
On both PA-RISC and IA64 systems, use the following command on an executable:
chatr +dbg enable executable-name
This is similar to the pxdb command described above wherein it directs the dld
to load the shared libraries as private when the program starts up.
14.20.5 Selectively Mapping Shared Libraries As Private
The -mapshared option suppresses mapping all shared libraries in a process private.
This option enables new functions in the dynamic loader (patch PHSSS_33110 or later)
to designate individual shared libraries for debugging. By default, HP WDB instructs
the shared library dynamic loader, dld.sl(5), to map shared libraries in a process
private, regardless of whether the chatr command is run for a particular shlib with
+dbg or not.
The -mapshared option is used to save virtual memory for debugging applications
with large amounts of code in shared libraries on machines with simultaneous debug
sessions. The chatr +dbg option, and the _HP_DLDOPTS environment variable are used
to identify shared libraries for debugging. The -mapshared option ensures that the text
segments of all other shared libraries is shared across the system. The shared libraries
are not mapped private and cannot have breakpoints set in them.
The set mapshared on command can be used to change modes from the (gdb) prompt.
(gdb) set mapshared on
The set mapshared off command can be used to load shared libraries after the current
point is mapped private.