Login
Username:

Password:

Remember me



Lost Password?

Register now!

Sections

Who's Online
80 user(s) are online (66 user(s) are browsing Forums)

Members: 0
Guests: 80

more...

Support us!

Headlines

Report message:*
 

Re: GDB

Subject: Re: GDB
by kas1e on 2021/2/26 4:07:39

@All

So, while we think if it better or not to attach/close the file via hooks inside of exec.c as it was done in our old gdb 6.3a, I made it the same, together with enabling debug output and with enabling debug gdb/target.c in both, our old gdb 6.3a and new 7.5.1 to compare what we should have and what we have. So, there results:

GDB 6.3.a

That our current SDK version, and when we run this gdb over test binary, doing a list, then set a breakpoint and type "run", that what we have in the console with enabled debug in a target.c:

3/0.Work:aagdb_6_3a_clib2 test_dwarf2 
GNU gdb 6.3 
(AmigaOS build 20050719)
Copyright 2004 Free Software FoundationInc.
GDB is free softwarecovered by the GNU General Public License, and you are
welcome to change it 
and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "ppc-amigaos"...
(
gdb) list
list
target_xfer_memory (0x7fd4944cxxx4readxxx) = 0
1    
#include <stdio.h>
2    int main()
3    {
4    printf("asdfn");
5    }
(
gdb) break 1
break 1
Breakpoint 1 at 0x7fd4944c
file test.cline 1.
(gdbr
r
Starting program
Work:aa/test_dwarf2 
target_xfer_memory 
(0x7fd4944cxxx4readxxx) = 4bytes 94 21 ff f0
target_xfer_memory 
(0x7fd4944cxxx4writexxx) = 4bytes 7d 82 10 08
target_insert_breakpoint 
(0x7fd4944cxxx) = 0
target_fetch_registers 
(pc) = 00000000 0x0 0
target_terminal_inferior 
()
target_resume (-1, continue, 0)
target_wait (-1status) = 1653873664,   status->kind stoppedsignal SIGBUS
target_fetch_registers 
(pc) = 023aecf0 0x23aecf0 37416176
target_terminal_ours_for_output 
()

Program received signal SIGBUSBus error.
target_xfer_memory (0x7fd4944cxxx4writexxx) = 4bytes 94 21 ff f0
target_remove_breakpoint 
(0x7fd4944cxxx) = 0
target_terminal_ours 
()
target_fetch_registers (r1) = 02249f90 0x2249f90 35954576
0x023aecf0 in 
?? ()
target_create_inferior (Work:aa/test_dwarf2, , xxx1)
(
gdb)


That Sigbus error with 0x023aecf0 in ?? () there mean not a deal for us (that x5000 issue we had to deal with).


GDB 7.5.1

Now, that what we have when we doing the same (enable debug in gdb/target.c, add attaching a file via a hook in exec.c, etc). There is the console output:

10/0.Work:aagdb_751 test
GNU gdb 
(GDB7.5.1
Copyright 
(C2012 Free Software FoundationInc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free softwareyou are free to change and redistribute it.
There is NO WARRANTYto the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "ppc-amigaos".
For 
bug reporting instructionsplease see:
<
http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /Work/aa/test...done.
(
gdb) list
list
target_memory_map ()
target_get_section_table ()
exec:target_xfer_partial (2, (null), 0x626624880x00x10004d44) = 4bytes 3d 20 01 00
target_get_section_table 
()
exec:target_xfer_partial (2, (null), 0x626625580x00x10004d44) = 4bytes 3d 20 01 00
1    
#include <stdio.h>
2    int main()
3    {
4    printf("asdfn");
5    }
(
gdb) break 1
break 1
target_get_section_table 
()
exec:target_xfer_partial (2, (null), 0x626624580x00x10004d44) = 4bytes 3d 20 01 00
target_get_section_table 
()
exec:target_xfer_partial (2, (null), 0x626626d00x00x10004d44) = 4bytes =
 
3d 20 01 00
Breakpoint 1 at 0x10004d4
file test.cline 1.
(gdbr
r
Starting program
: /Work/aa/test 
[New process 1755977616]
target_thread_architecture (process 1755977616) = 0x61eb0018 [powerpc:common]
target_terminal_ours ()
../../
gdb/target.c:3242internal-errorCan't determine the current address space of thread process 1755977616

A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) [answered Y; input not from terminal]
../../gdb/target.c:3242: internal-error: Can'
t determine the current address space of thread process 1755977616

A problem internal to GDB has been detected
,
further debugging may prove unreliable.
Create a core file of GDB? (or n) [answered Yinput not from terminal]
***
Command 'gdb_751' returned with unfreed signals 80000000!

10/1.Work:aa>


See, output and calling function pretty differently. I do check both GDB sources, and for example, target_memory_map() and target_get_section_table() are new things not present in the old gdb, so that expected that they are called. But next, we fail in target_thread_architecture() with "Can't determine the current address space of thread process 1755977616"

The same happens if I test the new version on pegasos2 too, so it's not x5000 related.

I see that in old amigaos-nat we have implemented "amigaos_xfer_memory", which is then used. Through see what we have at end of amigaos-nat:

Quote:

/* FIXME use to_xfer_partial instead of deprecated_xfer_memory */
/**/amigaos_ops.deprecated_xfer_memory = amigaos_xfer_memory;


So it was already deprecated in 6.3a, and probably now (and in our in 7.5.1 too) "amigaos_xfer_partial()" is should be used instead.

At the moment i tried to just add into amigaos-nat that:


static LONGEST
amigaos_xfer_partial 
(struct target_ops *opsenum target_object object,
              const 
char *annexgdb_byte *readbuf,
              const 
gdb_byte *writebuf,
              
ULONGEST offsetLONGEST len)
{

    
dprintf("we in ?n");

  switch (object)
    {
    case 
TARGET_OBJECT_MEMORY:
      
dprintf("TARGET_OBJECT_MEMORYn");
      return -
1;
      
//amigaos_xfer_memory (offset, len, readbuf, writebuf);

    
default:
      return -
1;
    }

}


And add this:

Quote:

amigaos_ops.to_xfer_partial = amigaos_xfer_partial;


But this one never called, instead still pure exec:target_xfer_partial is called still.

EDIT:

I then build exactly the same 7.5.1 version of GDB on my linux/x64 , enabled debug in gdb/target.c, and that how it looks like there:

kas1e@kas1e-laptop:~/work/gdb-7.5.1/gdb-build/gdb$ ./gdb test
GNU gdb 
(GDB7.5.1
Copyright 
(C2012 Free Software FoundationInc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free softwareyou are free to change and redistribute it.
There is NO WARRANTYto 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 instructionsplease see:
<
http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/kas1e/work/gdb-7.5.1/gdb-build/gdb/test...done.
(
gdb) list 
target_memory_map ()
target_get_section_table ()
exec:target_xfer_partial (2, (null), 0x7fff9fd1f2800x00x63a18) = 18bytes =
 
55 48 89 e5 48 8d 3d 9f 00 00 00 e8 c6 fe ff ff ...
target_get_section_table ()
exec:target_xfer_partial (2, (null), 0x7fff9fd1f2400x00x63a1) = 1bytes =
 
55
target_get_section_table 
()
exec:target_xfer_partial (2, (null), 0x7fff9fd1f2800x00x63b3) = 3bytes =
 
48 89 e5
target_get_section_table 
()
exec:target_xfer_partial (2, (null), 0x7fff9fd1f3a00x00x63a18) = 18bytes =
 
55 48 89 e5 48 8d 3d 9f 00 00 00 e8 c6 fe ff ff ...
target_get_section_table ()
exec:target_xfer_partial (2, (null), 0x7fff9fd1f3600x00x63a1) = 1bytes =
 
55
target_get_section_table 
()
exec:target_xfer_partial (2, (null), 0x7fff9fd1f3a00x00x63b3) = 3bytes =
 
48 89 e5
1    
#include <stdio.h>
2    int main()
3    {
4    printf("asdfasdfn");
5    }
(
gdb) break 1
target_get_section_table 
()
exec:target_xfer_partial (2, (null), 0x7fff9fd1f2800x00x63a18) = 18bytes =
 
55 48 89 e5 48 8d 3d 9f 00 00 00 e8 c6 fe ff ff ...
target_get_section_table ()
exec:target_xfer_partial (2, (null), 0x7fff9fd1f2400x00x63a1) = 1bytes =
 
55
target_get_section_table 
()
exec:target_xfer_partial (2, (null), 0x7fff9fd1f2800x00x63b3) = 3bytes =
 
48 89 e5
target_get_section_table 
()
exec:target_xfer_partial (2, (null), 0x7fff9fd1f9500x00x63e1) = 1bytes =
 
48
Breakpoint 1 at 0x63e
file test.cline 1.
(gdbr
Starting program
: /home/kas1e/work/gdb-7.5.1/gdb-build/gdb/test 
target_wait 
(17726status) = 17726,   status->kind stoppedsignal SIGTRAP
target_terminal_init 
()
target_terminal_inferior ()
target_resume (17726, continue, 0)
target_wait (17726status) = 17726,   status->kind stoppedsignal SIGTRAP
target_post_startup_inferior 
(17726)
target_create_inferior (/home/kas1e/work/gdb-7.5.1/gdb-build/gdb/test, , xxx1)
target_terminal_ours ()
child:target_xfer_partial (10target.xml0x5652742ee4000x00x04095) = -1
target_thread_architecture 
(process 17726) = 0x5652742ef420 [i386:x86-64]
target_thread_address_space (process 17726) = 1
target_fetch_registers 
(rip) = 9040ddf7ff7f0000 0x7ffff7dd4090 140737351860368
child
:target_xfer_partial (6, (null), 0x5652742f98800x00x04096) = 320bytes =
 
21 00 00 00 00 00 00 00 00 a0 ff f7 ff 7f 00 00 ...
child:target_xfer_partial (6, (null), 0x5652742f99c00x00x1403776) = 0
target_memory_map 
()
child:target_xfer_partial (2, (null), 0x5652742fa8900x00x555555554040504) = 504bytes =
 
06 00 00 00 04 00 00 00 40 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1ef100x00x55555555463a18) = 6bytes =
 
55 48 89 e5 48 8d
child
:target_xfer_partial (2, (null), 0x7fff9fd1ef160x00x55555555464012) = 8bytes 3d 9f 00 00 00 e8 c6 fe
child
:target_xfer_partial (2, (null), 0x7fff9fd1ef1e0x00x5555555546484) = 4bytes ff ff ...
child:target_xfer_partial (2, (null), 0x7fff9fd1eed00x00x55555555463a1) = 1bytes =
 
55
child
:target_xfer_partial (2, (null), 0x7fff9fd1ef100x00x55555555463b3) = 3bytes =
 
48 89 e5
child
:target_xfer_partial (2, (null), 0x7fff9fd1fa100x00x55555555404056) = 56bytes =
 
06 00 00 00 04 00 00 00 40 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1fa100x00x55555555407856) = 56bytes =
 
03 00 00 00 04 00 00 00 38 02 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1fa100x00x5555555540b056) = 56bytes =
 
01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1fa100x00x5555555540e856) = 56bytes =
 
01 00 00 00 06 00 00 00 b8 0d 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1fa100x00x55555555412056) = 56bytes =
 
02 00 00 00 06 00 00 00 c8 0d 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x5652742faa900x00x555555754dc8496) = 496bytes =
 
01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1faa00x00x555555754e908) = 8bytes =
 
00 00 00 00 00 00 00 00
child
:target_xfer_partial (2, (null), 0x7fff9fd1fa100x00x55555555404056) = 56bytes =
 
06 00 00 00 04 00 00 00 40 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1fa100x00x55555555407856) = 56bytes =
 
03 00 00 00 04 00 00 00 38 02 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1fa100x00x5555555540b056) = 56bytes =
 
01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1fa100x00x5555555540e856) = 56bytes =
 
01 00 00 00 06 00 00 00 b8 0d 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1fa100x00x55555555412056) = 56bytes =
 
02 00 00 00 06 00 00 00 c8 0d 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x5652742faa900x00x555555754dc8496) = 496bytes =
 
01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1faa00x00x555555754e908) = 8bytes =
 
00 00 00 00 00 00 00 00
child
:target_xfer_partial (2, (null), 0x7fff9fd1eff00x00x55555555463a18) = 6bytes =
 
55 48 89 e5 48 8d
child
:target_xfer_partial (2, (null), 0x7fff9fd1eff60x00x55555555464012) = 8bytes 3d 9f 00 00 00 e8 c6 fe
child
:target_xfer_partial (2, (null), 0x7fff9fd1effe0x00x5555555546484) = 4bytes ff ff ...
child:target_xfer_partial (2, (null), 0x7fff9fd1efb00x00x55555555463a1) = 1bytes =
 
55
child
:target_xfer_partial (2, (null), 0x7fff9fd1eff00x00x55555555463b3) = 3bytes =
 
48 89 e5
target_close 
(0)
child:target_xfer_partial (2, (null), 0x7fff9fd1f0c00x00x55555555463a18) = 6bytes =
 
55 48 89 e5 48 8d
child
:target_xfer_partial (2, (null), 0x7fff9fd1f0c60x00x55555555464012) = 8bytes 3d 9f 00 00 00 e8 c6 fe
child
:target_xfer_partial (2, (null), 0x7fff9fd1f0ce0x00x5555555546484) = 4bytes ff ff ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f0800x00x55555555463a1) = 1bytes =
 
55
child
:target_xfer_partial (2, (null), 0x7fff9fd1f0c00x00x55555555463b3) = 3bytes =
 
48 89 e5
target_can_run 
() = 1
child
:target_xfer_partial (2, (null), 0x7fff9fd1fab00x00x7ffff7ffa00064) = 64bytes =
 
7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x5652742ede500x00x7ffff7ffa040224) = 224bytes =
 
01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x5652742fb3300x00x7ffff7ffa0005408) = 5408bytes =
 
7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1ef000x00x55555555463a18) = 6bytes =
 
55 48 89 e5 48 8d
child
:target_xfer_partial (2, (null), 0x7fff9fd1ef060x00x55555555464012) = 8bytes 3d 9f 00 00 00 e8 c6 fe
child
:target_xfer_partial (2, (null), 0x7fff9fd1ef0e0x00x5555555546484) = 4bytes ff ff ...
child:target_xfer_partial (2, (null), 0x7fff9fd1eec00x00x55555555463a1) = 1bytes =
 
55
child
:target_xfer_partial (2, (null), 0x7fff9fd1ef000x00x55555555463b3) = 3bytes =
 
48 89 e5
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_prepare_to_store 
()
target_store_registers (orig_rax) = ffffffffffffffff 0xffffffffffffffff -1
child
:target_xfer_partial (2, (null), 0x7fff9fd1fb700x00x55555555463e1) = 1bytes =
 
48
child
:target_xfer_partial (3, (null), 0x00x565272cbd4a00x55555555463e1) = 1bytes =
 
cc
target_insert_breakpoint 
(0x000055555555463exxx) = 0
child
:target_xfer_partial (2, (null), 0x7fff9fd1fb700x00x7ffff7de3f601) = 1bytes =
 
f3
child
:target_xfer_partial (3, (null), 0x00x565272cbd4a00x7ffff7de3f601) = 1bytes =
 
cc
target_insert_breakpoint 
(0x00007ffff7de3f60xxx) = 0
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_terminal_inferior 
()
target_pass_signals (151, { SIGALRM SIGURG SIGCHLD SIGIO SIGVTALRM SIGPROF SIGWINCH SIGPOLL SIGWAITING SIGLWP SIGPRIO SIGCANCEL })
target_resume (17726, continue, 0)
target_wait (-1status) = 17726,   status->kind stoppedsignal SIGTRAP
target_thread_architecture 
(process 17726) = 0x5652742ef420 [i386:x86-64]
target_thread_address_space (process 17726) = 1
target_fetch_registers 
(rip) = 613fdef7ff7f0000 0x7ffff7de3f61 140737351925601
target_prepare_to_store 
()
target_store_registers (rip) = 603fdef7ff7f0000 0x7ffff7de3f60 140737351925600
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_stopped_by_watchpoint 
() = 0
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_terminal_ours_for_output 
()
child:target_xfer_partial (2, (null), 0x7fff9fd1f4100x00x55555555404056) = 56bytes =
 
06 00 00 00 04 00 00 00 40 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4100x00x55555555407856) = 56bytes =
 
03 00 00 00 04 00 00 00 38 02 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4100x00x5555555540b056) = 56bytes =
 
01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4100x00x5555555540e856) = 56bytes =
 
01 00 00 00 06 00 00 00 b8 0d 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4100x00x55555555412056) = 56bytes =
 
02 00 00 00 06 00 00 00 c8 0d 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x5652742faa900x00x555555754dc8496) = 496bytes =
 
01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4a00x00x555555754e908) = 8bytes =
 
40 e1 ff f7 ff 7f 00 00
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4900x00x7ffff7ffe1488) = 8bytes =
 
70 e1 ff f7 ff 7f 00 00
child
:target_xfer_partial (2, (null), 0x5652742fb0700x00x7ffff7ffe17040) = 40bytes =
 
00 40 55 55 55 55 00 00 00 e7 ff f7 ff 7f 00 00 ...
child:target_xfer_partial (2, (null), 0x5652742fadd00x00x7ffff7ffd9f040) = 40bytes =
 
00 30 dd f7 ff 7f 00 00 38 42 55 55 55 55 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x5555555542384) = 4bytes 2f 6c 69 62
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x55555555423c4) = 4bytes 36 34 2f 6c
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x5555555542404) = 4bytes 64 2d 6c 69
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x5555555542444) = 4bytes 6e 75 78 2d
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x5555555542484) = 4bytes 78 38 36 2d
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x55555555424c4) = 4bytes 36 34 2e 73
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x5555555542504) = 4bytes 6f 2e 32 00
child
:target_xfer_partial (2, (null), 0x5652742f28e00x00x7ffff7ffe71040) = 40bytes =
 
00 a0 ff f7 ff 7f 00 00 b0 eb ff f7 ff 7f 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffebb04) = 4bytes 6c 69 6e 75
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffebb44) = 4bytes 78 2d 76 64
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffebb84) = 4bytes 73 6f 2e 73
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffebbc4) = 4bytes 6f 2e 31 00
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4e00x00x7ffff7ffe1404) = 4bytes =
 
01 00 00 00
target_terminal_ours 
()
warningCould not load shared library symbols for linux-vdso.so.1.
Do 
you need "set solib-search-path" or "set sysroot"?
target_terminal_inferior ()
target_thread_address_space (process 17726) = 1
target_thread_address_space 
(process 17726) = 1
child
:target_xfer_partial (3, (null), 0x00x5652742b0ad40x55555555463e1) = 1bytes 48
target_remove_breakpoint 
(0x000055555555463exxx) = 0
child
:target_xfer_partial (3, (null), 0x00x5652742fb2940x7ffff7de3f601) = 1bytes f3
target_remove_breakpoint 
(0x00007ffff7de3f60xxx) = 0
target_thread_address_space 
(process 17726) = 1
target_terminal_inferior 
()
target_pass_signals (0, { })
target_resume (17726step0)
target_wait (-1status) = 17726,   status->kind stoppedsignal SIGTRAP
target_thread_architecture 
(process 17726) = 0x5652742ef420 [i386:x86-64]
target_thread_address_space (process 17726) = 1
target_fetch_registers 
(rip) = 126eddf7ff7f0000 0x7ffff7dd6e12 140737351872018
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_stopped_by_watchpoint 
() = 0
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
child
:target_xfer_partial (2, (null), 0x7fff9fd1f5d00x00x55555555463e1) = 1bytes =
 
48
child
:target_xfer_partial (3, (null), 0x00x565272cbd4a00x55555555463e1) = 1bytes =
 
cc
target_insert_breakpoint 
(0x000055555555463exxx) = 0
child
:target_xfer_partial (2, (null), 0x7fff9fd1f5d00x00x7ffff7de3f601) = 1bytes =
 
f3
child
:target_xfer_partial (3, (null), 0x00x565272cbd4a00x7ffff7de3f601) = 1bytes =
 
cc
target_insert_breakpoint 
(0x00007ffff7de3f60xxx) = 0
target_thread_address_space 
(process 17726) = 1
target_terminal_inferior 
()
target_pass_signals (151, { SIGALRM SIGURG SIGCHLD SIGIO SIGVTALRM SIGPROF SIGWINCH SIGPOLL SIGWAITING SIGLWP SIGPRIO SIGCANCEL })
target_resume (17726, continue, 0)
target_wait (-1status) = 17726,   status->kind stoppedsignal SIGTRAP
target_thread_architecture 
(process 17726) = 0x5652742ef420 [i386:x86-64]
target_thread_address_space (process 17726) = 1
target_fetch_registers 
(rip) = 613fdef7ff7f0000 0x7ffff7de3f61 140737351925601
target_prepare_to_store 
()
target_store_registers (rip) = 603fdef7ff7f0000 0x7ffff7de3f60 140737351925600
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_stopped_by_watchpoint 
() = 0
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_terminal_ours_for_output 
()
child:target_xfer_partial (2, (null), 0x7fff9fd1f4100x00x55555555404056) = 56bytes =
 
06 00 00 00 04 00 00 00 40 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4100x00x55555555407856) = 56bytes =
 
03 00 00 00 04 00 00 00 38 02 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4100x00x5555555540b056) = 56bytes =
 
01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4100x00x5555555540e856) = 56bytes =
 
01 00 00 00 06 00 00 00 b8 0d 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4100x00x55555555412056) = 56bytes =
 
02 00 00 00 06 00 00 00 c8 0d 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x5652742faa900x00x555555754dc8496) = 496bytes =
 
01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4a00x00x555555754e908) = 8bytes =
 
40 e1 ff f7 ff 7f 00 00
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4900x00x7ffff7ffe1488) = 8bytes =
 
70 e1 ff f7 ff 7f 00 00
child
:target_xfer_partial (2, (null), 0x5652742f7c500x00x7ffff7ffe17040) = 40bytes =
 
00 40 55 55 55 55 00 00 00 e7 ff f7 ff 7f 00 00 ...
child:target_xfer_partial (2, (null), 0x5652742f28e00x00x7ffff7ffe71040) = 40bytes =
 
00 a0 ff f7 ff 7f 00 00 b0 eb ff f7 ff 7f 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffebb04) = 4bytes 6c 69 6e 75
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffebb44) = 4bytes 78 2d 76 64
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffebb84) = 4bytes 73 6f 2e 73
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffebbc4) = 4bytes 6f 2e 31 00
child
:target_xfer_partial (2, (null), 0x5652742f7c500x00x7ffff7fd500040) = 40bytes =
 
00 20 9e f7 ff 7f 00 00 d0 ed ff f7 ff 7f 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffedd04) = 4bytes 2f 6c 69 62
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffedd44) = 4bytes 2f 78 38 36
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffedd84) = 4bytes 5f 36 34 2d
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffeddc4) = 4bytes 6c 69 6e 75
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffede04) = 4bytes 78 2d 67 6e
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffede44) = 4bytes 75 2f 6c 69
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffede84) = 4bytes 62 63 2e 73
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x7ffff7ffedec4) = 4bytes 6f 2e 36 00
child
:target_xfer_partial (2, (null), 0x5652742e73900x00x7ffff7ffd9f040) = 40bytes =
 
00 30 dd f7 ff 7f 00 00 38 42 55 55 55 55 00 00 ...
child:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x5555555542384) = 4bytes 2f 6c 69 62
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x55555555423c4) = 4bytes 36 34 2f 6c
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x5555555542404) = 4bytes 64 2d 6c 69
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x5555555542444) = 4bytes 6e 75 78 2d
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x5555555542484) = 4bytes 78 38 36 2d
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x55555555424c4) = 4bytes 36 34 2e 73
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4540x00x5555555542504) = 4bytes 6f 2e 32 00
child
:target_xfer_partial (2, (null), 0x7fff9fd1f4e00x00x7ffff7ffe1404) = 4bytes =
 
01 00 00 00
child
:target_xfer_partial (2, (null), 0x7fff9fd1e9f00x00x55555555463a18) = 6bytes =
 
55 48 89 e5 48 8d
child
:target_xfer_partial (2, (null), 0x7fff9fd1e9f60x00x55555555464012) = 8bytes 3d 9f 00 00 00 e8 c6 fe
child
:target_xfer_partial (2, (null), 0x7fff9fd1e9fe0x00x5555555546484) = 4bytes ff ff ...
child:target_xfer_partial (2, (null), 0x7fff9fd1e9b00x00x55555555463a1) = 1bytes =
 
55
child
:target_xfer_partial (2, (null), 0x7fff9fd1e9f00x00x55555555463b3) = 3bytes =
 
48 89 e5
target_terminal_inferior 
()
target_thread_address_space (process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
child
:target_xfer_partial (3, (null), 0x00x5652742ee4a40x55555555463e1) = 1bytes 48
target_remove_breakpoint 
(0x000055555555463exxx) = 0
child
:target_xfer_partial (3, (null), 0x00x5652742fb2940x7ffff7de3f601) = 1bytes f3
target_remove_breakpoint 
(0x00007ffff7de3f60xxx) = 0
target_thread_address_space 
(process 17726) = 1
target_terminal_inferior 
()
target_pass_signals (0, { })
target_resume (17726step0)
target_wait (-1status) = 17726,   status->kind stoppedsignal SIGTRAP
target_thread_architecture 
(process 17726) = 0x5652742ef420 [i386:x86-64]
target_thread_address_space (process 17726) = 1
target_fetch_registers 
(rip) = f174ddf7ff7f0000 0x7ffff7dd74f1 140737351873777
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_stopped_by_watchpoint 
() = 0
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
child
:target_xfer_partial (2, (null), 0x7fff9fd1f5d00x00x55555555463e1) = 1bytes =
 
48
child
:target_xfer_partial (3, (null), 0x00x565272cbd4a00x55555555463e1) = 1bytes =
 
cc
target_insert_breakpoint 
(0x000055555555463exxx) = 0
child
:target_xfer_partial (2, (null), 0x7fff9fd1f5d00x00x7ffff7de3f601) = 1bytes =
 
f3
child
:target_xfer_partial (3, (null), 0x00x565272cbd4a00x7ffff7de3f601) = 1bytes =
 
cc
target_insert_breakpoint 
(0x00007ffff7de3f60xxx) = 0
target_thread_address_space 
(process 17726) = 1
target_terminal_inferior 
()
target_pass_signals (151, { SIGALRM SIGURG SIGCHLD SIGIO SIGVTALRM SIGPROF SIGWINCH SIGPOLL SIGWAITING SIGLWP SIGPRIO SIGCANCEL })
target_resume (17726, continue, 0)
target_wait (-1status) = 17726,   status->kind stoppedsignal SIGTRAP
target_thread_architecture 
(process 17726) = 0x5652742ef420 [i386:x86-64]
target_thread_address_space (process 17726) = 1
target_fetch_registers 
(rip) = 3f46555555550000 0x55555555463f 93824992233023
target_prepare_to_store 
()
target_store_registers (rip) = 3e46555555550000 0x55555555463e 93824992233022
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
target_stopped_by_watchpoint 
() = 0
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
child
:target_xfer_partial (3, (null), 0x00x5652742ee4a40x55555555463e1) = 1bytes 48
target_remove_breakpoint 
(0x000055555555463exxx) = 0
child
:target_xfer_partial (3, (null), 0x00x5652742fb2940x7ffff7de3f601) = 1bytes f3
target_remove_breakpoint 
(0x00007ffff7de3f60xxx) = 0
target_terminal_ours 
()
target_thread_address_space (process 17726) = 1

target_thread_address_space 
(process 17726) = 1
child
:target_xfer_partial (2, (null), 0x7fff9fd1faf70x00x55555555463e1) = 1bytes 48
child
:target_xfer_partial (2, (null), 0x7fff9fd1faf70x00x55555555463e1) = 1bytes 48
child
:target_xfer_partial (3, (null), 0x565274335d5c0x00x7fffffffde8064) = 64bytes 60 46 55 55 ...
child:target_xfer_partial (4, (null), 0x5652742f98200x00x7fffffffdea88) = 8bytes =
 
f7 3b a0 f7 ff 7f 00 00
target_thread_address_space 
(process 17726) = 1
target_thread_address_space 
(process 17726) = 1
Breakpoint 1
main () at test.c:4
4    printf
("asdfasdfn");
target_thread_address_space (process 17726) = 1
(gdb)


As can be seen those "nulls" in the exec:target_xfer_partial at the begining are fine, and then on x86 we have:

Quote:

target_thread_architecture (process 17726) = 0x5652742ef420 [i386:x86-64]
target_thread_address_space (process 17726) = 1


So on our side we didn't reach "target_thread_address_space" and fail right after "target_thread_architecture".

And our failing part in gdb/target.c are:

/* Determine the current address space of thread PTID.  */

struct address_space *
target_thread_address_space (ptid_t ptid)
{
  
struct address_space *aspace;
  
struct inferior *inf;
  
struct target_ops *t;

  for (
current_target.beneath!= NULLt->beneath)
    {
      if (
t->to_thread_address_space != NULL)
    {
      
aspace t->to_thread_address_space (tptid);
      
gdb_assert (aspace);

      if (
targetdebug)
        
fprintf_unfiltered (gdb_stdlog,
                
"target_thread_address_space (%s) = %dn",
                
target_pid_to_str (ptid),
                
address_space_num (aspace));
      return 
aspace;
    }
    }

  
/* Fall-back to the "main" address space of the inferior.  */
  
inf find_inferior_pid (ptid_get_pid (ptid));

  if (
inf == NULL || inf->aspace == NULL)
    
internal_error (__FILE____LINE__,
            
_("Can't determine the current "
              "address space of thread %sn"
),
            
target_pid_to_str (ptid));

  return 
inf->aspace;
}



Added few printfs, and:

1). for first we never go inside of the for (t = current_target.beneath; t != NULL; t = t->beneath) loop.
2). when we "fallback", inf is NULL too.

Powered by XOOPS 2.0 © 2001-2016 The XOOPS Project