This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Map registers to remote numbers when encoding an ax_reg or ax_reg_mask operation
- From: Antoine Tremblay <antoine dot tremblay at ericsson dot com>
- To: Pedro Alves <palves at redhat dot com>
- Cc: Antoine Tremblay <antoine dot tremblay at ericsson dot com>, <gdb-patches at sourceware dot org>
- Date: Thu, 25 Feb 2016 09:30:01 -0500
- Subject: Re: [PATCH] Map registers to remote numbers when encoding an ax_reg or ax_reg_mask operation
- Authentication-results: sourceware.org; auth=none
- References: <1456406745-27854-1-git-send-email-antoine dot tremblay at ericsson dot com> <56CF0EF9 dot 70807 at redhat dot com>
Pedro Alves writes:
> On 02/25/2016 01:25 PM, Antoine Tremblay wrote:
>> When encoding the agent expression operation ax_reg or ax_reg_mask, the
>> register number used is internal to GDB. However GDBServer expects a tdesc
>> based number.
>>
>> This usually does not cause a problem since at the moment, for raw
>> registers GDBServer R trace action ignores the register mask and just
>> collects all registers.
>>
>> It can be a problem, however with pseudo registers on some platforms if the
>> tdesc number doesn't match the GDB internal register number.
>>
>> This is the case with ARM, the upcoming ARM tracepoint support, fails
>> these test cases without this patch:
>>
>> gdb.trace/collection.exp: collect register locals collectively:*
>>
>> GDBSever would exit with: unhandled register size
>> Since the register number is not mapped.
>>
>> This patch fixes these issues by calling gdbarch_remote_register_number
>> before encoding the register number in the ax_reg or ax_reg_mask operation.
>>
>> Tested on x86 native-gdbserver no regressions observed.
>
>> else
>> {
>> - int byte = reg / 8;
>> + int byte = 0;
>
> No need to zero initialize.
OK.
>
>> +
>> + /* Get the remote register number. */
>> + reg = gdbarch_remote_register_number (ax->gdbarch, reg);
>> + byte = reg / 8;
>>
>> /* Grow the bit mask if necessary. */
>> if (byte >= ax->reg_mask_len)
>>
>
> OK with ChangeLog entry.
Oops, yes I'll add a ChangeLog sorry about that.
Thanks,
Antoine