How to handle different sizes of pointers in GDB?

Iru Cai via Gdb <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CANL=iQTqr=W3Q+nHLtqt26onquKqV6_0tsmcbgBJM4Tt_DBM-w@mail.gmail.com>
Hi,

I'm porting GDB to a new architecture. Now the application for this
architecture has two kinds of pointers in different sizes, one is 32-bit
and one is 64-bit. I have done the following things:

1. I use set_gdbarch_addr_bit(gdbarch,64) and
set_gdbarch_ptr_bit(gdbarch,64) to set both the addresses and the pointers
64-bit.
2. I tried to add a DW_AT_byte_size and DW_AT_address_class information
under each of the pointer type with DW_TAG_pointer_type in the compiler for
my new architecture.

My program can be like this:

int strlen32(const char *s) { /* s is 32-bit ... */ }
int strlen64(const _PTR64 char *s) { /* s is 64-bit ... */ }

However, GDB doesn't seem to get the correct type when printing the frame
arguments in read_frame_arg(), when I debug into strlen32, GDB can make the
GDB server crash because GDB is trying to read from a 64-bit address, which
it thinks is the value of s. And when I debug this GDB read_frame_arg(), I
see the type length of s in strlen32 is still 8 bytes.

So is there anything missing to make GDB use the type length information
from the DWARF debugging info?

Regards,
Iru
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.