mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 09:08:59 +00:00
* sparc-stub.c: New file. Mix it with your SPARClite
application, and it will speak GDB remote protocol! * remote.c (remote_wait): Change 'T' (expedited reply) message to deal with arbitrary registers. Needed for sparc-stub,
This commit is contained in:
27
gdb/remote.c
27
gdb/remote.c
@@ -416,7 +416,8 @@ remote_wait (status)
|
||||
void (*ofunc)();
|
||||
unsigned char *p;
|
||||
int i;
|
||||
char regs[REGISTER_RAW_SIZE (PC_REGNUM) + REGISTER_RAW_SIZE (FP_REGNUM)];
|
||||
int regno;
|
||||
unsigned char regs[8]; /* Better be big enough for largest reg */
|
||||
|
||||
WSETEXIT ((*status), 0);
|
||||
|
||||
@@ -428,17 +429,27 @@ remote_wait (status)
|
||||
error ("Remote failure reply: %s", buf);
|
||||
if (buf[0] == 'T')
|
||||
{
|
||||
/* Expedited reply, containing Signal, PC, and FP. */
|
||||
/* Expedited reply, containing Signal, {regno, reg} repeat */
|
||||
p = &buf[3]; /* after Txx */
|
||||
for (i = 0; i < sizeof (regs); i++)
|
||||
|
||||
while (*p)
|
||||
{
|
||||
if (p[0] == 0 || p[1] == 0)
|
||||
error ("Remote reply is too short: %s", buf);
|
||||
regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
|
||||
regno = fromhex (p[0]) * 16 + fromhex (p[1]);
|
||||
p += 2;
|
||||
if (regno >= NUM_REGS)
|
||||
error ("Remote sent illegal register number %d (0x%x)", regno,
|
||||
regno);
|
||||
|
||||
for (i = 0; i < REGISTER_RAW_SIZE (regno); i++)
|
||||
{
|
||||
if (p[0] == 0 || p[1] == 0)
|
||||
error ("Remote reply is too short: %s", buf);
|
||||
regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
|
||||
p += 2;
|
||||
}
|
||||
|
||||
supply_register (regno, regs);
|
||||
}
|
||||
supply_register (PC_REGNUM, ®s[0]);
|
||||
supply_register (FP_REGNUM, ®s[REGISTER_RAW_SIZE (PC_REGNUM)]);
|
||||
}
|
||||
else if (buf[0] != 'S')
|
||||
error ("Invalid remote reply: %s", buf);
|
||||
|
||||
Reference in New Issue
Block a user