Wind River Support Network


LIN6-8575 : Cannot attach to an existing process when connecting through GDB server running on Freescale e6500

Created: Oct 16, 2014    Updated: Dec 3, 2018
Resolved Date: Dec 23, 2014
Found In Version:
Fix Version:
Severity: Standard
Applicable for: Wind River Linux 6
Component/s: Toolchain


*Steps to reproduce:*

On target:
$gdbserver --multi :12345

On host (or target):
(gdb) target extended-remote <target-ip>:12345

(gdb) attach <pid>

Make sure that the binaries of the process that is being attached to and gdbserver  are targeting 64-bit.


warning: Selected architecture powerpc:common64 is not compatible with reported target architecture powerpc:common
warning: Architecture rejected target-supplied description
Reply contains invalid hex digit 59

After which the program counter appears to go off stack and the debugged process exits due to a segmentation fault.

Using GDB directly on target without GDB server and attaching to existing process works fine.

*Additional info:*

*File* gdb/gdbserver/linux-ppc-low.c
*Function* ppc_arch_setup (void)

    /* Only if the high bit of the MSR is set, we actually have
       a 64-bit inferior.  */
    if (msr < 0)***<--this check fails!*

But e6500 seems to be a "Book E" power architecture which has a
different Machine Status Register (MSR) layout:

- Power ISA has MSR_SF in bit 63 which is used to detect if running in
32 or 64-bit.
- Book E has MSR_CM in bit 32 (first half of long is zero) which is used
to detect if running in 32 or 64-bit.

Making the attached process appear as 32-bit in the eyes of GDB on e6500
even if it is 64-bit. If the above check is removed, for testing
purpose, attaching works as expected.

Similar problem appears to be in:

*File* gdb/ppc-linux-nat.c
*Function* ppc_linux_target_wordsize

    msr = (long) ptrace (PTRACE_PEEKUSER, tid, PT_MSR * 8, 0);
    if (errno == 0 && msr < 0)***<--this check fails!*

which seems to report 4 instead of 8 but this is not related to the
original problem.

I made some further investigation and as far as I can tell the problem
actually always exists with the difference being that a processes
launched by GDB get an MSR that looks like this:

While the MSR looks like this when GDB attaches to an already existing

Meaning that in the first case the MSR will always be seen as negative
while in the second case the opposite is true.

I also looked at the Freescale gdb.git:
but I could not find anything interesting from that.


replace gdbserver with the one in attached tarball named gdbserver-ppc64e6500-4.8-40.tar.gz

Other Downloads

Live chat