Debugging with GDB Manual The GNU Source-Level Debugger (769148-001, March 2014)
Following are known issues in mixed mode debugging:
• Listing of registers currently in use for PA-RISC 32-bit shared library frames causes the
unswizzled 32-bit values to be displayed.
• Clicking on the registers tab for a PA-RISC frame in the HP WDB-GUI results in incorrect register
information being displayed. Alternatively, execute the info reg command at the gdb
prompt in the Commands tab.
• For a signal handler invoked while executing in a PA-RISC routine, when the info frame
command is run on the signal handler called frame, the saved libaries32.so IP address
is displayed, rather than the PCOQH value of the PA-RISC routine.
• Printing the value of a floating point register using the print command does not work. The
info reg command must be used.
NOTE: If an application crashes in the aries signal handler, the debug-aries option is turned
on by default and only the libaries frames are displayed.
Support for mmapfile command
HP-UX does not include mmap-ed regions with MAP_SHARED mappings or MAP_PRIVATE with
Read-Only permission in core. Due to this, any references to this mmap-ed regions cannot be
debugged as the memory image of this region is unavailable to GDB. To solve this problem, GDB
version 6.2 onwards provides a mmapfile command. You can use this command to add mmap-ed
sections while debugging core files. You can do this during the debug session of the core file,
which will help you debug using the memory contents from the missing mmap-ed regions in core
file.
NOTE: The mmapfile command is currently supported only on HP Integrity systems.
The following example illustrates the usage of the mmapfile command:
$ cat mmap.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <assert.h>
#include <unistd.h>
#include <sys/fcntl.h>
#include <sys/mman.h>
int main()
{
int devzfd;
int fd, fd2;
char *p, *q, *r, *s, *t, *u;
devzfd = open("/dev/zero", O_RDONLY);
if ( devzfd == -1 )
{
perror("open");
return -1;
}
fd = open("testfile", O_RDWR);
if ( fd == -1 )
{
perror("open");
return -1;
}
p = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
assert( p != (void *)-1 );
q = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE, devzfd, 0);
assert( q != (void *)-1 );
r = mmap(NULL, 4096, PROT_READ, MAP_PRIVATE, fd, 0);
Debugging Core Files 151