[COMMITTED PATCH] gdb: LoongArch: Implement the iterate_over_regset_sections gdbarch method

John Baldwin jhb@FreeBSD.org
Mon May 23 17:09:14 GMT 2022


On 5/23/22 7:37 AM, Tiezhu Yang wrote:
> When execute the following command on LoongArch:
> 
>    make check-gdb TESTS="gdb.base/auxv.exp"
> 
> there exist the following unsupported and failed testcases:
> 
>    UNSUPPORTED: gdb.base/auxv.exp: gcore
>    FAIL: gdb.base/auxv.exp: load core file for info auxv on native core dump
>    FAIL: gdb.base/auxv.exp: info auxv on native core dump
>    FAIL: gdb.base/auxv.exp: matching auxv data from live and core
>    UNSUPPORTED: gdb.base/auxv.exp: info auxv on gcore-created dump
>    UNSUPPORTED: gdb.base/auxv.exp: matching auxv data from live and gcore
> 
> we can see the following messages in gdb/testsuite/gdb.log:
> 
>    gcore /home/loongson/build.git/gdb/testsuite/outputs/gdb.base/auxv/auxv.gcore
>    Target does not support core file generation.
>    (gdb) UNSUPPORTED: gdb.base/auxv.exp: gcore
> 
> In order to fix the above issues, implement the iterate_over_regset_sections
> gdbarch method to iterate over core file register note sections on LoongArch.
> 
> By the way, with this patch, the failed testcases in gdb.base/corefile.exp
> and gdb.base/gcore.exp can also be fixed.
> 
> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> ---
>   gdb/loongarch-linux-tdep.c | 16 ++++++++++++++++
>   1 file changed, 16 insertions(+)
> 
> diff --git a/gdb/loongarch-linux-tdep.c b/gdb/loongarch-linux-tdep.c
> index 7e219c4b9a0..f13756dd003 100644
> --- a/gdb/loongarch-linux-tdep.c
> +++ b/gdb/loongarch-linux-tdep.c
> @@ -20,6 +20,7 @@
>   
>   #include "defs.h"
>   #include "glibc-tdep.h"
> +#include "gregset.h"
>   #include "inferior.h"
>   #include "linux-tdep.h"
>   #include "loongarch-tdep.h"
> @@ -163,6 +164,18 @@ static const struct tramp_frame loongarch_linux_rt_sigframe =
>     NULL
>   };
>   
> +/* Implement the "iterate_over_regset_sections" gdbarch method.  */
> +
> +static void
> +loongarch_iterate_over_regset_sections (struct gdbarch *gdbarch,
> +					iterate_over_regset_sections_cb *cb,
> +					void *cb_data,
> +					const struct regcache *regcache)
> +{
> +  cb (".reg", sizeof (elf_gregset_t), sizeof (elf_gregset_t),
> +      &loongarch_gregset, NULL, cb_data);
> +}

This is wrong.  elf_gregset_t is arch-specific and is a native type, but this is a tdep.c
file.  Other architectures instead use a #define based on the number of registers and the
native register size, etc.

-- 
John Baldwin


More information about the Gdb-patches mailing list