From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by sourceware.org (Postfix) with ESMTPS id A3A64387703A for ; Fri, 20 Mar 2020 17:28:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A3A64387703A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gmx.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=n54@gmx.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1584725306; bh=475VY/44w162JIg1W1kxOmJo5dfRRqEXZk0oiO9CjI8=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=g52LSSWC5RABQfxcpv7SJWBfPxhAVApMAbivTIDxRuh8tr086zN+5l2dgZzOkDdvW EqYgQ3i4x68LXwzJm9bwBkZ4RnFdTrEHmzKcoljsV64DoReWJY4DmDhlZw+p2OXqJq /uLMSOxY6d3y8Cgkgjmoae9GpHCcTzhA7P0sDC20= 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 1Mof9F-1jdcUi3onh-00p7w0; Fri, 20 Mar 2020 18:28:26 +0100 From: Kamil Rytarowski To: gdb-patches@sourceware.org Cc: tom@tromey.com, Kamil Rytarowski Subject: [PATCH v3] Add support for "info auxv" on NetBSD Date: Fri, 20 Mar 2020 18:27:39 +0100 Message-Id: <20200320172739.26705-1-n54@gmx.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200316181710.7542-1-n54@gmx.com> References: <20200316181710.7542-1-n54@gmx.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:2jh0cKGQFH3HcToWW5PsvPlrk7JMK0bpKuSsRzLX5VDHHGiRLja Iy6CkFkFmiEeSJSuE1i9kUIo29Up+LtxtuqcbEh+kWaY8Zk9JQtL7C3xY/7OMVqBzV6fJxM YC/mDogLD4AAbdPdR1lqEC48o4rzgOyLzJHqdtgyEmFdOaKHciwznpYHl3uz0O7tt89zKyJ MQCXuIh0SR/DXAtw04q0A== X-UI-Out-Filterresults: notjunk:1;V03:K0:fO47NM2z3WQ=:Szn2uBQtRIQAjt9pkuI9PP QmTDKXWt8krMf6BsBJ+OjCpoKYtv2TNKs7h9wiOMIvgyqQAlr7dEyQAh2ppix+jd9+i/D7qwc BVP+QpmcCzUgZlDAwajaDu2QbUio3UE15+Ew5qUWfybGvXRiraOZUMlolk7dP2KNy4EeElSE5 jH6n7A8ZtD4DZt4kxF7zNMlvI0w/o7tQYDuXouqTHxRTeqoHXShAHM9+IAdhF7QEvh12qh+nI mPVzphbLh95cTyUqBt04Iy8sYZFk+qfHJh9PKXMv/hp9SVi4VyU56mguzo4381DIcZLp/rmos CPEoI0oL/cgNEFb1hxoejRFLl9cl/3HI6oQYREggxLBcGBG06SVD5x8lvvJpvItVrKHg6Etlg bIsprn0AtSmUUzUKOjEATo8r/c107Vvd3HMC/YATZ4sSK+lojJoS9HvwCN+dQdnzJDls082Mk BIbJTvXEFyiGJGyu9vzx3BnloSsgtkTGhbkbq34gWzG8CzccTvS2agYFK7YvcCFZJV9dJq1mM pCqqePAVA/kmRDQb/Bh6qbV074OASOoO7xUZ2kZ8DSNhg0IVa64zp8ey85dHZY1JL2lE1makt tZf0RbcbYxd3ucv7uhVAYEE/IUOI+s20qzfshGa6/pOaADlctlvTEeUDE0VZJsPyuDLqpVXNJ vNoie9UwoGq2lK2W7Vro1wc1P2YZ7CtqzaIgVBxDLhhzw+z7uMbMXQXrmVpQJFTwjge+Ov4dj XncHv03YhWUqOTCgk+gCnadkb6BA2pSxCL+/b6XfxEXFIbbzLTeC6ho1xN8ooVgIGwLSQwXti 7xCMl9eAOmQztbwcbCnpfFpJIobW1auaqxuPrRpCJD1yFpsT5ZQoUKdHdPwVJkwBAOUbDVO47 nfd/v37kg9/QsB/2+gR5gR+OS/va4wp/qWXOWds3xp+DUieGjEor4OJO23jKRCktI89imivU4 yz7erXo5MFVeI2KBglYGBRbVrghLzHXSbKfiT/+zgzVeJDsX6zbcRA6BICr7J75FSnGhlG9nY ZqvXPYlpznFn1xyi3sTQIyLxmKiRMR3HQo8gdSu5Kl6WItT1wFXeYwE8+7xLWW3/kRwLt+8eH 8LaBM+QghNkVx4i73L01s/ZCaI4lMlc24fln2Kgbjl3Bdfo/AnnhoQkRLiGT+nCWz0rYLynT+ NCioPTsQn9nlyThwKR2w8nJyhghaVZQf6ikeKuAUvnjkkaBlDJsGmSXnOSLDwYTQpiges= X-Spam-Status: No, score=-24.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_BARRACUDACENTRAL, 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: Fri, 20 Mar 2020 17:28:43 -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 | 38 ++++++++++++++++++++++++++++++++++++++ gdb/nbsd-tdep.h | 4 ++++ 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, 79 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 650b74bae4a..572403001ce 100644 =2D-- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,19 @@ +2020-03-20 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-20 Kamil Rytarowski * amd64-bsd-nat.c (gdb_ptrace): Change return type from `int' to 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..5d5ea26622e 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,40 @@ nbsd_pc_in_sigtramp (CORE_ADDR pc, const char *func_nam= e) return (func_name !=3D NULL && startswith (func_name, "__sigtramp")); } + +/* NetBSD-specific parser for AUXV data with. NetBSD follows the ELF + specification, contrary to some other ELF Operating Systems. */ + +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; +} + +/* See nbsd-tdep.h. */ + +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..4b06c13f87b 100644 =2D-- a/gdb/nbsd-tdep.h +++ b/gdb/nbsd-tdep.h @@ -25,4 +25,8 @@ struct link_map_offsets *nbsd_lp64_solib_svr4_fetch_link= _map_offsets (void); int nbsd_pc_in_sigtramp (CORE_ADDR, const char *); +/* NetBSD specific set of ABI-related routines. */ + +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