From patchwork Thu Jul 28 01:01:20 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 14065 Received: (qmail 108757 invoked by alias); 28 Jul 2016 01:01:39 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 108692 invoked by uid 89); 28 Jul 2016 01:01:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=364, 7, 3647, 2186, 218, 6 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Thu, 28 Jul 2016 01:01:29 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1C49812B7 for ; Thu, 28 Jul 2016 01:01:28 +0000 (UTC) Received: from cascais.lan (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u6S11Qsg027476 for ; Wed, 27 Jul 2016 21:01:27 -0400 From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 1/6] x32 Fast tracepoints: IPA target descriptions Date: Thu, 28 Jul 2016 02:01:20 +0100 Message-Id: <1469667685-10848-2-git-send-email-palves@redhat.com> In-Reply-To: <1469667685-10848-1-git-send-email-palves@redhat.com> References: <1469667685-10848-1-git-send-email-palves@redhat.com> MIME-Version: 1.0 Building GDB for x32 fails building the IPA, with: .../src/gdb/gdbserver/linux-amd64-ipa.c: In function ‘const target_desc* get_ipa_tdesc(int)’: .../src/gdb/gdbserver/linux-amd64-ipa.c:182:14: error: ‘tdesc_amd64_avx_linux’ was not declared in this scope return tdesc_amd64_avx_linux; ^ .../src/gdb/gdbserver/linux-amd64-ipa.c:184:14: error: ‘tdesc_amd64_mpx_linux’ was not declared in this scope return tdesc_amd64_mpx_linux; ^ .../src/gdb/gdbserver/linux-amd64-ipa.c:186:14: error: ‘tdesc_amd64_avx_mpx_linux’ was not declared in this scope return tdesc_amd64_avx_mpx_linux; ^ [...] The problem is that the IPA is trying to use the 64-bit descriptions, when it should be using the x32 ones. gdb/gdbserver/ChangeLog: yyyy-mm-dd Pedro Alves * Makefile.in (x32-linux-ipa.o, x32-avx-linux-ipa.o) (x32-avx512-linux-ipa.o): New rules. * configure.ac (x86_64-*-linux*): New x32 check. * configure.srv (ipa_x32_linux_regobj): New. (x86_64-*-linux*): Use $ipa_x32_linux_regobj if building for x32. * linux-amd64-ipa.c (get_ipa_tdesc) [__ILP32__]: Return x32 descriptions. (initialize_low_tracepoint) [__ILP32__]: Initialize x32 descriptions. * configure: Regenerate. --- gdb/gdbserver/Makefile.in | 9 +++++++++ gdb/gdbserver/configure | 31 +++++++++++++++++++++++++++++++ gdb/gdbserver/configure.ac | 14 ++++++++++++++ gdb/gdbserver/configure.srv | 8 +++++++- gdb/gdbserver/linux-amd64-ipa.c | 27 +++++++++++++++++++++++---- 5 files changed, 84 insertions(+), 5 deletions(-) diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 2be61ef..dd96213 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -647,6 +647,15 @@ rsp-low-ipa.o: ../common/rsp-low.c errors-ipa.o: ../common/errors.c $(IPAGENT_COMPILE) $< $(POSTCOMPILE) +x32-linux-ipa.o: x32-linux.c + $(IPAGENT_COMPILE) $< + $(POSTCOMPILE) +x32-avx-linux-ipa.o: x32-avx-linux.c + $(IPAGENT_COMPILE) $< + $(POSTCOMPILE) +x32-avx512-linux-ipa.o: x32-avx512-linux.c + $(IPAGENT_COMPILE) $< + $(POSTCOMPILE) ax.o: ax.c $(COMPILE) $(WARN_CFLAGS_NO_FORMAT) $< diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure index 2926deb..3dd5a32 100755 --- a/gdb/gdbserver/configure +++ b/gdb/gdbserver/configure @@ -6795,6 +6795,37 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_i386_is_x86_64" >&5 $as_echo "$gdb_cv_i386_is_x86_64" >&6; } ;; + + x86_64-*-linux*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if building for x32" >&5 +$as_echo_n "checking if building for x32... " >&6; } +if test "${gdb_cv_x86_is_x32+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $CFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if __x86_64__ && __ILP32__ +got it +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "got it" >/dev/null 2>&1; then : + gdb_cv_x86_is_x32=yes +else + gdb_cv_x86_is_x32=no +fi +rm -f conftest* + + CPPFLAGS="$save_CPPFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_x86_is_x32" >&5 +$as_echo "$gdb_cv_x86_is_x32" >&6; } + ;; + m68k-*-*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if building for Coldfire" >&5 $as_echo_n "checking if building for Coldfire... " >&6; } diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac index 627c590..01ec634 100644 --- a/gdb/gdbserver/configure.ac +++ b/gdb/gdbserver/configure.ac @@ -218,6 +218,20 @@ got it [gdb_cv_i386_is_x86_64=no]) CPPFLAGS="$save_CPPFLAGS"]) ;; + + x86_64-*-linux*) + AC_CACHE_CHECK([if building for x32], [gdb_cv_x86_is_x32], + [save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $CFLAGS" + AC_EGREP_CPP([got it], [ +#if __x86_64__ && __ILP32__ +got it +#endif + ], [gdb_cv_x86_is_x32=yes], + [gdb_cv_x86_is_x32=no]) + CPPFLAGS="$save_CPPFLAGS"]) + ;; + m68k-*-*) AC_CACHE_CHECK([if building for Coldfire], [gdb_cv_m68k_is_coldfire], [save_CPPFLAGS="$CPPFLAGS" diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv index fe53e03..39e8392 100644 --- a/gdb/gdbserver/configure.srv +++ b/gdb/gdbserver/configure.srv @@ -31,6 +31,7 @@ srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o amd64-avx512-linux.o amd ipa_i386_linux_regobj="i386-linux-ipa.o i386-avx-linux-ipa.o i386-avx-mpx-linux-ipa.o i386-avx512-linux-ipa.o i386-mpx-linux-ipa.o i386-mmx-linux-ipa.o" ipa_amd64_linux_regobj="amd64-linux-ipa.o amd64-avx-linux-ipa.o amd64-avx-mpx-linux-ipa.o amd64-avx512-linux-ipa.o amd64-mpx-linux-ipa.o" +ipa_x32_linux_regobj="x32-linux-ipa.o x32-avx-linux-ipa.o x32-avx512-linux-ipa.o" ipa_ppc_linux_regobj="powerpc-32l-ipa.o powerpc-altivec32l-ipa.o powerpc-cell32l-ipa.o powerpc-vsx32l-ipa.o powerpc-isa205-32l-ipa.o powerpc-isa205-altivec32l-ipa.o powerpc-isa205-vsx32l-ipa.o powerpc-e500l-ipa.o powerpc-64l-ipa.o powerpc-altivec64l-ipa.o powerpc-cell64l-ipa.o powerpc-vsx64l-ipa.o powerpc-isa205-64l-ipa.o powerpc-isa205-altivec64l-ipa.o powerpc-isa205-vsx64l-ipa.o" srv_i386_32bit_xmlfiles="i386/32bit-core.xml i386/32bit-sse.xml i386/32bit-avx.xml i386/32bit-avx512.xml i386/32bit-mpx.xml" @@ -364,7 +365,12 @@ case "${target}" in srv_linux_regsets=yes srv_linux_thread_db=yes srv_linux_btrace=yes - ipa_obj="${ipa_amd64_linux_regobj} linux-amd64-ipa.o" + if test "$gdb_cv_x86_is_x32" = yes ; then + ipa_obj="${ipa_x32_linux_regobj}" + else + ipa_obj="${ipa_amd64_linux_regobj}" + fi + ipa_obj="${ipa_obj} linux-amd64-ipa.o" ;; x86_64-*-mingw*) srv_regobj="$srv_amd64_regobj" srv_tgtobj="x86-low.o x86-dregs.o i387-fp.o win32-low.o win32-i386-low.o" diff --git a/gdb/gdbserver/linux-amd64-ipa.c b/gdb/gdbserver/linux-amd64-ipa.c index 4997d0e..15d08ff 100644 --- a/gdb/gdbserver/linux-amd64-ipa.c +++ b/gdb/gdbserver/linux-amd64-ipa.c @@ -174,6 +174,19 @@ supply_static_tracepoint_registers (struct regcache *regcache, const struct target_desc * get_ipa_tdesc (int idx) { +#if defined __ILP32__ + switch (idx) + { + case X86_TDESC_SSE: + return tdesc_x32_linux; + case X86_TDESC_AVX: + return tdesc_x32_avx_linux; + case X86_TDESC_AVX512: + return tdesc_x32_avx512_linux; + default: + break; + } +#else switch (idx) { case X86_TDESC_SSE: @@ -186,11 +199,11 @@ get_ipa_tdesc (int idx) return tdesc_amd64_avx_mpx_linux; case X86_TDESC_AVX512: return tdesc_amd64_avx512_linux; - default: - internal_error (__FILE__, __LINE__, - "unknown ipa tdesc index: %d", idx); - return tdesc_amd64_linux; } +#endif + + internal_error (__FILE__, __LINE__, + "unknown ipa tdesc index: %d", idx); } /* Allocate buffer for the jump pads. Since we're using 32-bit jumps @@ -213,9 +226,15 @@ alloc_jump_pad_buffer (size_t size) void initialize_low_tracepoint (void) { +#if defined __ILP32__ + init_registers_x32_linux (); + init_registers_x32_avx_linux (); + init_registers_x32_avx512_linux (); +#else init_registers_amd64_linux (); init_registers_amd64_avx_linux (); init_registers_amd64_avx_mpx_linux (); init_registers_amd64_mpx_linux (); init_registers_amd64_avx512_linux (); +#endif }