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: Antoine Tremblay <antoine dot tremblay at ericsson dot com>
- Cc: Pedro Alves <palves at redhat dot com>, <gdb-patches at sourceware dot org>
- Date: Thu, 25 Feb 2016 09:37:11 -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> <wwoka8mo982e dot fsf at ericsson dot com>
Antoine Tremblay writes:
> 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.
>
Pushed.