This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Clear *VAL in regcache_raw_read_unsigned
- From: Pedro Alves <palves at redhat dot com>
- To: Yao Qi <qiyaoltc at gmail dot com>
- Cc: gdb-patches at sourceware dot org
- Date: Thu, 11 Feb 2016 15:51:30 +0000
- Subject: Re: [PATCH] Clear *VAL in regcache_raw_read_unsigned
- Authentication-results: sourceware.org; auth=none
- References: <1455029644-6197-1-git-send-email-yao dot qi at linaro dot org> <86egckqztq dot fsf at gmail dot com> <56BB6ADB dot 6070909 at redhat dot com> <86a8n8qxyp dot fsf at gmail dot com> <56BB7512 dot 2030507 at redhat dot com> <8660xvr1wr dot fsf at gmail dot com> <56BC829B dot 8060102 at redhat dot com> <864mdfp9b3 dot fsf at gmail dot com>
On 02/11/2016 03:15 PM, Yao Qi wrote:
> I think this is better than 'make gdbserver use extract_unsigned_integer',
> which looks overkill to me.
I think it's only going to bite us back in the future.
>From the perspective of potentially making it easier to share more
code between gdb and gdbserver, I'd prefer that. Would you object it?
>
>>
>> Or maybe better, just byte the bullet and make gdbserver use
>> extract_unsigned_integer, like gdb.
>>
>> The problem with that is that gdbserver can't currently use 'enum bfd_endian',
>> which IIRC, was already an issue in the get-next-pcs stuff. I've attached a
>
> get-next-pcs stuff needs endianness in GDB side. In GDBserver,
> endianness is not needed.
The get-next-pcs stuff does have endianness bits, but it works
around the lack of 'enum bfd_endian' by hacking it through an int instead:
void
arm_get_next_pcs_ctor (struct arm_get_next_pcs *self,
struct arm_get_next_pcs_ops *ops,
int byte_order,
int byte_order_for_code,
int has_thumb2_breakpoint,
struct regcache *regcache)
{
$ grep byte_order *
arm-get-next-pcs.c: int byte_order,
arm-get-next-pcs.c: int byte_order_for_code,
arm-get-next-pcs.c: self->byte_order = byte_order;
arm-get-next-pcs.c: self->byte_order_for_code = byte_order_for_code;
arm-get-next-pcs.c: int byte_order_for_code = self->byte_order_for_code;
arm-get-next-pcs.c: insn1 = self->ops->read_mem_uint (loc, 2, byte_order_for_code);
arm-get-next-pcs.c: insn2 = self->ops->read_mem_uint (loc, 2, byte_order_for_code);
arm-get-next-pcs.c: insn1 = self->ops->read_mem_uint (loc, 2,byte_order_for_code);
arm-get-next-pcs.c: insn2 = self->ops->read_mem_uint (loc, 2, byte_order_for_code);
arm-get-next-pcs.c: int byte_order_for_code = self->byte_order_for_code;
arm-get-next-pcs.c: insn = self->ops->read_mem_uint (loc, 4, byte_order_for_code);
arm-get-next-pcs.c: insn = self->ops->read_mem_uint (loc, 4, byte_order_for_code);
arm-get-next-pcs.c: int byte_order = self->byte_order;
arm-get-next-pcs.c: int byte_order_for_code = self->byte_order_for_code;
arm-get-next-pcs.c: inst1 = self->ops->read_mem_uint (pc, 2, byte_order_for_code);
arm-get-next-pcs.c: inst1 = self->ops->read_mem_uint (pc, 2,byte_order_for_code);
arm-get-next-pcs.c: inst1 = self->ops->read_mem_uint (pc, 2, byte_order_for_code);
arm-get-next-pcs.c: inst1 = self->ops->read_mem_uint (pc, 2, byte_order_for_code);
arm-get-next-pcs.c: nextpc = self->ops->read_mem_uint (sp + offset, 4, byte_order);
arm-get-next-pcs.c: inst2 = self->ops->read_mem_uint (pc + 2, 2, byte_order_for_code);
arm-get-next-pcs.c: nextpc = self->ops->read_mem_uint (addr + offset, 4, byte_order);
arm-get-next-pcs.c: = self->ops->read_mem_uint (base, 4, byte_order);
arm-get-next-pcs.c: length = 2 * self->ops->read_mem_uint (table + offset, 1, byte_order);
arm-get-next-pcs.c: length = 2 * self->ops->read_mem_uint (table + offset, 2, byte_order);
arm-get-next-pcs.c: int byte_order = self->byte_order;
arm-get-next-pcs.c: int byte_order_for_code = self->byte_order_for_code;
arm-get-next-pcs.c: this_instr = self->ops->read_mem_uint (pc, 4, byte_order_for_code);
arm-get-next-pcs.c: 4, byte_order);
arm-get-next-pcs.c: 4, byte_order);
arm-get-next-pcs.h: ULONGEST (*read_mem_uint) (CORE_ADDR memaddr, int len, int byte_order);
arm-get-next-pcs.h: int byte_order;
arm-get-next-pcs.h: int byte_order_for_code;
arm-get-next-pcs.h: int byte_order,
arm-get-next-pcs.h: int byte_order_for_code,
>
>> patch series that handles that by moving bfd_endian to a separate header.
>> I've pushed it to the users/palves/gdbserver-extract-unsigned-integer branch
>> as well.
>>
>> If you agree with this, I'll run the bfd_endian patch by the binutils folks.
>
> Since the endianness of GDBserver is always identical to the endianness
> of the program, I am not sure sharing extract_unsigned_integer between
> GDB and GDBserver is necessary.
Thanks,
Pedro Alves