This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH,HURD] Fix reading core
- From: Joel Brobecker <brobecker at adacore dot com>
- To: gdb-patches at sourceware dot org, thomas at schwinge dot name, bug-hurd at gnu dot org
- Date: Tue, 9 Apr 2013 16:41:17 -0700
- Subject: Re: [PATCH,HURD] Fix reading core
- References: <20130211020109 dot GK5926 at type dot youpi dot perso dot aquilenet dot fr>
> The i386 GNU/Hurd ELF core format actually follows the uaccess gregset_t
> array format, not the Mach thread state format. This fixes gdb reading
> it.
>
> * gdb/i386gnu-nat.c (CREG_OFFSET): New macro.
> (creg_offset): New array.
> (CREG_ADDR): Use creg_offset instead of reg_offset.
Did anyone review this? I don't know GNU/Hurd, but the patch looks
very plausible.
Do you have write access to the GDB repository? If not, do you have
copyright assignment papers on file? This patch is small enough that
we can take it as a tiny patch, but if you think you're going to
send more patches, we should probably get you started on those.
The ChangeLog entry above needs to be indented properly (just to be
sure). Another tiny style nitpick below...
> --- a/gdb/i386gnu-nat.c.original 2013-02-11 00:46:02.000000000 +0000
> +++ b/gdb/i386gnu-nat.c 2013-02-11 00:48:09.000000000 +0000
> @@ -56,8 +56,21 @@
> REG_OFFSET (ds), REG_OFFSET (es), REG_OFFSET (fs), REG_OFFSET (gs)
> };
>
> +/* Offset to the greg_t location where REG is stored. */
> +#define CREG_OFFSET(reg) (REG_##reg * 4)
> +
> +/* At CREG_OFFSET[N] is the offset to the greg_t location where
> + the GDB register N is stored. */
> +static int creg_offset[] =
> +{
> + CREG_OFFSET (EAX), CREG_OFFSET (ECX), CREG_OFFSET (EDX), CREG_OFFSET (EBX),
> + CREG_OFFSET (UESP), CREG_OFFSET (EBP), CREG_OFFSET (ESI), CREG_OFFSET (EDI),
> + CREG_OFFSET (EIP), CREG_OFFSET (EFL), CREG_OFFSET (CS), CREG_OFFSET (SS),
> + CREG_OFFSET (DS), CREG_OFFSET (ES), CREG_OFFSET (FS), CREG_OFFSET (GS)
> +};
Unless it was done on purpose, we try to limit the size of lines
to 70 characters, only extending it to up to 80 when it makes
a difference....
> +
> #define REG_ADDR(state, regnum) ((char *)(state) + reg_offset[regnum])
> -#define CREG_ADDR(state, regnum) ((const char *)(state) + reg_offset[regnum])
> +#define CREG_ADDR(state, regnum) ((const char *)(state) + creg_offset[regnum])
>
>
> /* Get the whole floating-point state of THREAD and record the values
--
Joel