From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by sourceware.org (Postfix) with ESMTPS id 0CF50385E82C for ; Mon, 16 Mar 2020 18:18:12 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1584382678; bh=MB9hf6WwexbspDnHNQkk1iHIyf4/uDC2QsS6rntOWiE=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=l4eJ/ZvXxccpm6W3hIAKl9BSkdsrSBbApdPT5CY2dp9dj2k6X1uS7vFgMY1PwurMM kaxqsh/dSkX+Ji0KxFk0Gvx5eIeOwABbeWTlx1w9nFdyBp4c3LJLjC6RFFJvFp2+5W x6XCwN9j7+EcaRRfOCsADuhYiRIBsS6ER8y3lAgU= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([89.79.191.25]) by mail.gmx.com (mrgmx104 [212.227.17.174]) with ESMTPSA (Nemesis) id 1N0oG5-1jYLXH1V5h-00wi0z; Mon, 16 Mar 2020 19:17:58 +0100 From: Kamil Rytarowski To: gdb-patches@sourceware.org Cc: tom@tromey.com, Kamil Rytarowski Subject: [PATCH v2] Add support for "info auxv" on NetBSD Date: Mon, 16 Mar 2020 19:17:10 +0100 Message-Id: <20200316181710.7542-1-n54@gmx.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200314182258.4277-1-n54@gmx.com> References: <20200314182258.4277-1-n54@gmx.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:yFJrXATNzAHmQbfnduPA47FkhAajw4ml+ABOZ4gNQSgL65iB/F3 WcgI4c2g4ZTeB+p16pFlSIyyCxyLPRRSAYe3LPIzbH1+XQOwwF47+HTgaZa6YYNrwIREo+R SUJnjKc+Xkvswk6QtfoEqLLy3coWRX26coy1Qecxb9JcLO/OZ76tWdQYG3K1/Q9HbOV4/G5 PAm+vfkpKvUJzOw4ZcI2A== X-UI-Out-Filterresults: notjunk:1;V03:K0:Y60koKso59g=:YOQa9WlhRSo1dHbwyGbb4+ f3+N9y+CT9Z7MrhEy8XcM2vRS8i3wlfjeRjc+wgUFpKeDFIO3bchNX20h/fwgNrjCiAgvYIIQ ouhwB8mLz1awkY79rxT2IUMrB6lEt9MAqtZbtYupFybjQcRuf9pu0pgxtD/gPvuJ9rUiuo+MS X4fcZ81fzDQ5wHgMIT/K+IWnqmb9KvVNrdTR6tCaZbgVb34I5uJKjj9bqG5IdGYuQIyxq6ppN WNpXHkpRMClM57scFdwIzLT5pxkOtP2AKMBFLJtu/p9dDUJc+nXPzzeunnOP3HNoamF5GuVF4 +dj392HJhdbWbgrmTBIlMmKbaCsGZ1QFmpPWRSdhrlnxgyqH/+4rkgk9z4VHvKKfXlWl6yT0q BtXNDDNXG+5dQ7/RqyU9CBGc8Hjpn9APxHEHntZZHwDNRA2JoF3FwjCj51RgmyUZe/UinMbP3 TceBhJH7BiAsVNC8iHgrro1dVL7ULXiXBWKmXARhV8mHqKdFWURHBakQc1dDRyX7vcxucwPZ/ nqXOL9Uy5WigWj7JianNjsPorZwecjpNqh1b0zPXBsXedwfHjxF3NiZcg7I/RhGlTiZOiaufA 8cG6R3oIElYN171ldX3ZNJe+cXyfvuItwH/J5oGoXlWqSRyCovAlKVYFELX86z9cdMWTimuxF 78yQHZcdVjHhikRw3qk8tOSJG+1p9KkwqfUDL3jNGnoceSyZKTmL1W5wJvUvH/Tf4QuR/PutG HCsdQWbNavSq1CHDiLvSj00wXQm8AjkGppP5/IXxWa3Rb68UjLR8Mho6t2dVhsOptkb53shIe uZZ6J+gcqZcTn73nUqz0XgYglFI3tyYdwPk7y/Tt302V1ZtD+mitsUHJwIuxHuy4osOqKi87e 22fc1pFH+IcKFL4azA391uWQkRQ+5FGA0G77RPJHfToVM+r98D8vLTKMCV2GN4jF/F9T25UoH i6ZJYqpZmeby5UwrD2zfefu4DRWJdLxh70uObzEARTsA4monjrP8RChlaWvtz7mEjoodeaCVY 3QNKXP8W9EfIZBt9m3d1rFxL3qUzvI9L/Ciay0XPdRIhrgN85dPGjKGjSl0Jz27lyyfo7oCrs H6C+JKNS45I49kle16LLfNNuhs1/VdQ00KHHrM1yErd2OakcrM1a9+Lb2ot9tZjnBwDtVJ5ed ndHWHbFD21SwlwAWeyLPMbJCxEQvEE4Pw57rZFPJYJegSXYMVCtlu6567LmR49OvwCEZc= X-Spam-Status: No, score=-25.4 required=5.0 tests=DKIM_SIGNED, DKIM_VALID, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 Mar 2020 18:18:14 -0000 Register nbsd_auxv_parse() that overloads the default (Linux-style) AUXV parsing. On NetBSD the type parameter is defined as int32_t for all architectures. Register nbsd_init_abi() that sets set_gdbarch_auxv_parse(). Call nbsd_init_abi() from all CPU-specific NetBSD tdep files. gdb/ChangeLog: * nbsd-tdep.c: Include "gdbarch.h". * nbsd-tdep.c (nbsd_auxv_parse, nbsd_init_abi): New. * alpha-nbsd-tdep.c (alphanbsd_init_abi): Call nbsd_init_abi(). * amd64-nbsd-tdep.c (amd64nbsd_init_abi): Likewise. * arm-nbsd-tdep.c (arm_netbsd_elf_init_abi): Likewise. * hppa-nbsd-tdep.c (hppanbsd_init_abi): Likewise. * i386-nbsd-tdep.c (i386nbsd_init_abi): Likewise. * mips-nbsd-tdep.c (nbsd_init_abi): Likewise. * ppc-nbsd-tdep.c (ppcnbsd_init_abi): Likewise. * sh-nbsd-tdep.c (shnbsd_init_abi): Likewise. * sparc-nbsd-tdep.c (sparc32nbsd_init_abi): Likewise. * sparc64-nbsd-tdep.c (sparc64nbsd_init_abi): Likewise. * vax-nbsd-tdep.c (vaxnbsd_elf_init_abi): Likewise. =2D-- gdb/ChangeLog | 16 ++++++++++++++++ gdb/alpha-nbsd-tdep.c | 2 ++ gdb/amd64-nbsd-tdep.c | 1 + gdb/arm-nbsd-tdep.c | 3 +++ gdb/hppa-nbsd-tdep.c | 2 ++ gdb/i386-nbsd-tdep.c | 2 ++ gdb/mips-nbsd-tdep.c | 2 ++ gdb/nbsd-tdep.c | 33 +++++++++++++++++++++++++++++++++ gdb/nbsd-tdep.h | 2 ++ gdb/ppc-nbsd-tdep.c | 2 ++ gdb/sh-nbsd-tdep.c | 1 + gdb/sparc-nbsd-tdep.c | 2 ++ gdb/sparc64-nbsd-tdep.c | 2 ++ gdb/vax-nbsd-tdep.c | 2 ++ 14 files changed, 72 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a0d97584189..42b2129d104 100644 =2D-- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,19 @@ +2020-03-16 Kamil Rytarowski + + * nbsd-tdep.c: Include "gdbarch.h". + * nbsd-tdep.c (nbsd_auxv_parse, nbsd_init_abi): New. + * alpha-nbsd-tdep.c (alphanbsd_init_abi): Call nbsd_init_abi(). + * amd64-nbsd-tdep.c (amd64nbsd_init_abi): Likewise. + * arm-nbsd-tdep.c (arm_netbsd_elf_init_abi): Likewise. + * hppa-nbsd-tdep.c (hppanbsd_init_abi): Likewise. + * i386-nbsd-tdep.c (i386nbsd_init_abi): Likewise. + * mips-nbsd-tdep.c (nbsd_init_abi): Likewise. + * ppc-nbsd-tdep.c (ppcnbsd_init_abi): Likewise. + * sh-nbsd-tdep.c (shnbsd_init_abi): Likewise. + * sparc-nbsd-tdep.c (sparc32nbsd_init_abi): Likewise. + * sparc64-nbsd-tdep.c (sparc64nbsd_init_abi): Likewise. + * vax-nbsd-tdep.c (vaxnbsd_elf_init_abi): Likewise. + 2020-03-14 Tom Tromey * c-typeprint.c (cp_type_print_method_args): Print "__restrict__" diff --git a/gdb/alpha-nbsd-tdep.c b/gdb/alpha-nbsd-tdep.c index ab9240e35da..58294edb3f6 100644 =2D-- a/gdb/alpha-nbsd-tdep.c +++ b/gdb/alpha-nbsd-tdep.c @@ -258,6 +258,8 @@ alphanbsd_init_abi (struct gdbarch_info info, /* Hook into the MDEBUG frame unwinder. */ alpha_mdebug_init_abi (info, gdbarch); + nbsd_init_abi (info, gdbarch); + /* NetBSD/alpha does not provide single step support via ptrace(2); we must use software single-stepping. */ set_gdbarch_software_single_step (gdbarch, alpha_software_single_step); diff --git a/gdb/amd64-nbsd-tdep.c b/gdb/amd64-nbsd-tdep.c index 89d07236b85..59071488ed7 100644 =2D-- a/gdb/amd64-nbsd-tdep.c +++ b/gdb/amd64-nbsd-tdep.c @@ -106,6 +106,7 @@ amd64nbsd_init_abi (struct gdbarch_info info, struct g= dbarch *gdbarch) amd64_init_abi (info, gdbarch, amd64_target_description (X86_XSTATE_SSE_MASK, true)); + nbsd_init_abi (info, gdbarch); tdep->jb_pc_offset =3D 7 * 8; diff --git a/gdb/arm-nbsd-tdep.c b/gdb/arm-nbsd-tdep.c index e01df50bc25..a6104f760b3 100644 =2D-- a/gdb/arm-nbsd-tdep.c +++ b/gdb/arm-nbsd-tdep.c @@ -150,6 +150,9 @@ arm_netbsd_elf_init_abi (struct gdbarch_info info, struct gdbarch_tdep *tdep =3D gdbarch_tdep (gdbarch); arm_netbsd_init_abi_common (info, gdbarch); + + nbsd_init_abi (info, gdbarch); + if (tdep->fp_model =3D=3D ARM_FLOAT_AUTO) tdep->fp_model =3D ARM_FLOAT_SOFT_VFP; diff --git a/gdb/hppa-nbsd-tdep.c b/gdb/hppa-nbsd-tdep.c index b532ab1d5cc..d601aa96f3f 100644 =2D-- a/gdb/hppa-nbsd-tdep.c +++ b/gdb/hppa-nbsd-tdep.c @@ -201,6 +201,8 @@ hppanbsd_init_abi (struct gdbarch_info info, struct gd= barch *gdbarch) /* Obviously NetBSD is BSD-based. */ hppabsd_init_abi (info, gdbarch); + nbsd_init_abi (info, gdbarch); + /* Core file support. */ set_gdbarch_iterate_over_regset_sections (gdbarch, hppanbsd_iterate_over_regset_sections); diff --git a/gdb/i386-nbsd-tdep.c b/gdb/i386-nbsd-tdep.c index 3157451e08f..f350412d9bd 100644 =2D-- a/gdb/i386-nbsd-tdep.c +++ b/gdb/i386-nbsd-tdep.c @@ -377,6 +377,8 @@ i386nbsd_init_abi (struct gdbarch_info info, struct gd= barch *gdbarch) /* Obviously NetBSD is BSD-based. */ i386bsd_init_abi (info, gdbarch); + nbsd_init_abi (info, gdbarch); + /* NetBSD has a different `struct reg'. */ tdep->gregset_reg_offset =3D i386nbsd_r_reg_offset; tdep->gregset_num_regs =3D ARRAY_SIZE (i386nbsd_r_reg_offset); diff --git a/gdb/mips-nbsd-tdep.c b/gdb/mips-nbsd-tdep.c index 38bc7ce636b..6f4d22b24fb 100644 =2D-- a/gdb/mips-nbsd-tdep.c +++ b/gdb/mips-nbsd-tdep.c @@ -354,6 +354,8 @@ static void mipsnbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { + nbsd_init_abi (info, gdbarch) + set_gdbarch_iterate_over_regset_sections (gdbarch, mipsnbsd_iterate_over_regset_sections); diff --git a/gdb/nbsd-tdep.c b/gdb/nbsd-tdep.c index 49bb2b706bd..a9207e16625 100644 =2D-- a/gdb/nbsd-tdep.c +++ b/gdb/nbsd-tdep.c @@ -22,6 +22,7 @@ #include "defs.h" #include "solib-svr4.h" #include "nbsd-tdep.h" +#include "gdbarch.h" /* FIXME: kettenis/20060115: We should really eliminate the next two functions completely. */ @@ -47,3 +48,35 @@ nbsd_pc_in_sigtramp (CORE_ADDR pc, const char *func_nam= e) return (func_name !=3D NULL && startswith (func_name, "__sigtramp")); } + +static int +nbsd_auxv_parse (struct gdbarch *gdbarch, gdb_byte **readptr, + gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) +{ + struct type *int_type =3D builtin_type (gdbarch)->builtin_int; + struct type *ptr_type =3D builtin_type (gdbarch)->builtin_data_ptr; + const int sizeof_auxv_type =3D TYPE_LENGTH (int_type); + const int sizeof_auxv_val =3D TYPE_LENGTH (ptr_type); + enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); + gdb_byte *ptr =3D *readptr; + + if (endptr =3D=3D ptr) + return 0; + + if (endptr - ptr < 2 * sizeof_auxv_val) + return -1; + + *typep =3D extract_unsigned_integer (ptr, sizeof_auxv_type, byte_order)= ; + ptr +=3D sizeof_auxv_val; /* Alignment. */ + *valp =3D extract_unsigned_integer (ptr, sizeof_auxv_val, byte_order); + ptr +=3D sizeof_auxv_val; + + *readptr =3D ptr; + return 1; +} + +void +nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + set_gdbarch_auxv_parse (gdbarch, nbsd_auxv_parse); +} diff --git a/gdb/nbsd-tdep.h b/gdb/nbsd-tdep.h index c99a8b537b6..9301ff7a69a 100644 =2D-- a/gdb/nbsd-tdep.h +++ b/gdb/nbsd-tdep.h @@ -25,4 +25,6 @@ struct link_map_offsets *nbsd_lp64_solib_svr4_fetch_link= _map_offsets (void); int nbsd_pc_in_sigtramp (CORE_ADDR, const char *); +void nbsd_init_abi (struct gdbarch_info, struct gdbarch *); + #endif /* NBSD_TDEP_H */ diff --git a/gdb/ppc-nbsd-tdep.c b/gdb/ppc-nbsd-tdep.c index d75930c9f8d..81492deaccd 100644 =2D-- a/gdb/ppc-nbsd-tdep.c +++ b/gdb/ppc-nbsd-tdep.c @@ -173,6 +173,8 @@ static void ppcnbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { + nbsd_init_abi (info, gdbarch); + /* For NetBSD, this is an on again, off again thing. Some systems do use the broken struct convention, and some don't. */ set_gdbarch_return_value (gdbarch, ppcnbsd_return_value); diff --git a/gdb/sh-nbsd-tdep.c b/gdb/sh-nbsd-tdep.c index aa319261684..2b2a7e3fd4a 100644 =2D-- a/gdb/sh-nbsd-tdep.c +++ b/gdb/sh-nbsd-tdep.c @@ -63,6 +63,7 @@ shnbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep =3D gdbarch_tdep (gdbarch); + nbsd_init_abi (info, gdbarch); tdep->core_gregmap =3D (struct sh_corefile_regmap *)regmap; tdep->sizeof_gregset =3D 84; diff --git a/gdb/sparc-nbsd-tdep.c b/gdb/sparc-nbsd-tdep.c index 7aba6020d27..ab1b557c57c 100644 =2D-- a/gdb/sparc-nbsd-tdep.c +++ b/gdb/sparc-nbsd-tdep.c @@ -296,6 +296,8 @@ sparc32nbsd_init_abi (struct gdbarch_info info, struct= gdbarch *gdbarch) { struct gdbarch_tdep *tdep =3D gdbarch_tdep (gdbarch); + nbsd_init_abi (info, gdbarch); + /* NetBSD doesn't support the 128-bit `long double' from the psABI. */ set_gdbarch_long_double_bit (gdbarch, 64); set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double); diff --git a/gdb/sparc64-nbsd-tdep.c b/gdb/sparc64-nbsd-tdep.c index cd5bfe89410..dac7fa78b9b 100644 =2D-- a/gdb/sparc64-nbsd-tdep.c +++ b/gdb/sparc64-nbsd-tdep.c @@ -249,6 +249,8 @@ sparc64nbsd_init_abi (struct gdbarch_info info, struct= gdbarch *gdbarch) { struct gdbarch_tdep *tdep =3D gdbarch_tdep (gdbarch); + nbsd_init_abi (info, gdbarch); + tdep->gregset =3D &sparc64nbsd_gregset; tdep->sizeof_gregset =3D 160; diff --git a/gdb/vax-nbsd-tdep.c b/gdb/vax-nbsd-tdep.c index c2c08cc1603..7630ac5ab94 100644 =2D-- a/gdb/vax-nbsd-tdep.c +++ b/gdb/vax-nbsd-tdep.c @@ -29,6 +29,8 @@ static void vaxnbsd_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { + nbsd_init_abi (info, gdbarch); + /* NetBSD ELF uses SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_ilp32_fetch_link_map_offsets); =2D- 2.25.0