I want to understand this better. The original RSP server in gem5 viewed the contents of G packet as an array of registers all of the same width. So, if an architecture defines some 64-bit registers and some 32-bit registers, this had lead to idiotic situations such as registers having a fractional index. So about a year ago, I re-wrote register representation in the G packet to use C structs instead. This new code has been working well for me using both GDB and another RSP client which we hope to present to the community (although that's quite another story, for now what's relevant is just that there are two RSP clients that I compared in how they talk to GEM5's RSP server). My main ISAs I was using at the time, were PPC and MIPS, but I do remember that I did test all other ISAs which has separate register layout definitions. You don't say what ISA you are working with, but from your patch I presume you are talking about x86_64, right?
What I am not quite getting is how it is only the newer GDB that breaks. If the fields in the struct are incorrectly packed, then offsets of where register values are in the G packet, will be wrong no matter which GDB version is on the client end. So this raises two interesting questions. First, what is the extent of this problem across versions of GDB -- have we always been affected? Second, what is the extent across ISAs -- does this also break ARM and others? I mean, these G packets have been used for some time, and at least *some* of it worked to useful ends -- both in my own work, and I hear that others have also used it for practical purposes. I would like to better understand where the limit of that "some" is. Maybe others can chime in saying things like "using remote GDB extensively and it works" or the opposite? to have at least some kind of picture of whether people even exercise that corner of the universe.
Boris
-----"gem5-users" <[email protected]> wrote: -----
From: Matthias Hille
Sent by: "gem5-users"
Date: 05/02/2017 11:49AM
Subject: [gem5-users] Newer gdb versions break remote debugging
Hi all,
I noticed that newer gdb versions break the ability to attach a
remote debugger to debug simulated code.
The good thing is, I already figured out why. Starting with commit
9dc193c3be gdb does bounds checking for every register you sent to it via the
remote debugging protocol. If a register is not sent complete it
will output "Truncated register xy in remote 'g' packet" and
that's what actually happens with the current gem5 version.
Gem5 transmits 23 registers (17 64bit regs and 7 32bit regs) that
should result in a total amount of 164 bytes. But it actually send
168 bytes, making gdb believe it will receive a 24th register. For
the 24th register gdb expects a size of 10 bytes and hence
complains about it and refuses to continue working.
The reason for the 4 byte overlap is that the structure used to
keep register contents is 8-bytes aligned.
So my current fix is packing that struct so gem5 won't send the
padding bytes. (Diff is attached)
I am not entirely sure if this breaks compilation for some of you. I used #pragma pack() to tell the compiler to pack the struct, and most of the compilers should support it.
Cheers,Matthias
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
[attachment "remoteDebugFix.diff" removed by Boris Shingarov/Employee/LW-US]
_______________________________________________ gem5-users mailing list [email protected] http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
