This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: Extending GDB: Python: Wrong handling of 64-bit pointers
Andrew Pinski <pinskia@gmail.com> writes:
> On Tue, Oct 9, 2012 at 10:30 AM, chandan r <chandanrmail@gmail.com> wrote:
>> Hi all,
>>
>> As the following CLI interactions show, GDB's python support code seems to be
>> mishandling 64-bit pointers (GNU/Linux on x86-64):
>>
>> NOTE: "p" is a pointer of type "struct task_struct *"
>>
>> (gdb) python print gdb.parse_and_eval("p")
>> 0xffff88001f5f7600
>> (gdb) python print long(gdb.parse_and_eval("p"))
>> -131940868983296
>> (gdb) show version
>> show version
>> GNU gdb (GDB) 7.5
>> Copyright (C) 2012 Free Software Foundation, Inc.
>> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
>> This is free software: you are free to change and redistribute it.
>> There is NO WARRANTY, to the extent permitted by law. Type "show copying"
>> and "show warranty" for details.
>> This GDB was configured as "x86_64-unknown-linux-gnu".
>> For bug reporting instructions, please see:
>> <http://www.gnu.org/software/gdb/bugs/>.
>>
>> Is it GDB or am I messing up something here?
>
> Nothing looks wrong as -131940868983296 is the same as
> 0xffff88001f5f7600 in signed integer.
> (gdb) p/x -131940868983296
> $1 = 0xffff88001f5f7600
>
> Thanks,
> Andrew Pinski
>
>>
>> --
>> Chandan
But shouldn't pointer values be read/printed without interpretting the sign
bit?.
Right now I have to do 'long(str(gdb.parse_and_eval('p')), 16)' to obtain the
correct value.
--
chandan