This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Fix target architecture address size inside gdbarch structure
- From: Simon Marchi <simon dot marchi at polymtl dot ca>
- To: Denis Dmitriev <zealot351 at gmail dot com>
- Cc: gdb-patches at sourceware dot org, Павел Михаилович Довгалюк <pavel dot dovgaluk at ispras dot ru>
- Date: Wed, 17 Oct 2018 09:02:26 -0400
- Subject: Re: [PATCH] Fix target architecture address size inside gdbarch structure
- References: <CAF3nGXdMOH5ynBPRNQ0XxrrFYZz7ujGqCVrp3=h+MSsTByNBUw@mail.gmail.com> <63523264fb0856e46a4846517945b6e4@polymtl.ca> <CAF3nGXcexeqnq=B7LzK6M5+HiaVdodM4eXVwqLYz1f-o0VUAdQ@mail.gmail.com>
On 2018-10-17 07:33, Denis Dmitriev wrote:
hi!
gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
uname -a
Linux heroboecPC 4.15.0-34-generic #37~16.04.1-Ubuntu SMP Tue Aug 28
10:44:06 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
I took gdb 8.2.50.20180906-git (hash:
739ab2e92e1840c9285f3cfce1f1236c0fa68730).
./configure --host=x86_64-linux --target=mips64-linux-uclibc
make
After that, I start the debugger, install the architecture for
debugging.
set arch mips:octeon2
tar rem :1234 (i have qemu with mips to connect)
disas $pc, $pc+20
0xbfc00000 in ?? ()
(gdb) disas $pc, $pc+20
Dump of assembler code from 0xbfc00000 to 0xbfc00014:
=> 0xbfc00000: Cannot access memory at address 0xbfc00000
Address size is 32 bit instead of 64.
Looking at the code, there is the mips ABI setting that comes into play,
that's where the ptr size (and consequently the addr size):
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/mips-tdep.c;h=bf44c52f5d2ad73605cdfaabe1ac1d2bde822ef9;hb=HEAD#l8541
When loading a binary in GDB, it auto detects the ABI:
$ ./gdb -q --data-directory=data-directory test
Reading symbols from test...
(No debugging symbols found in test)
(gdb) show architecture
The target architecture is set automatically (currently mips:isa64r2)
(gdb) show mips abi
The MIPS ABI is set automatically (currently "n64").
If you don't provide a binary to gdb, then you should probably set this
to the right value:
(gdb) set architecture mips:octeon2
The target architecture is assumed to be mips:octeon2
(gdb) show mips abi
The MIPS ABI is set automatically (currently "o32").
(gdb) p sizeof(void*)
$1 = 4
(gdb) set mips abi n64
(gdb) p sizeof(void*)
$2 = 8
I don't know if it makes sense to have the architecture "mips:octeon2"
along with a 32-bits ABI, I don't really know much about MIPS. If it
doesn't, perhaps it would be possible to select a more sensible ABI by
default when selecting that architecture. But for now, you have to
select it by hand. Or if you can provide the binary to gdb, that's the
ideal.
Simon