From patchwork Thu Mar 22 12:57:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Burgess X-Patchwork-Id: 26428 Received: (qmail 115821 invoked by alias); 22 Mar 2018 12:57:19 -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 115690 invoked by uid 89); 22 Mar 2018 12:57:18 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-wr0-f175.google.com Received: from mail-wr0-f175.google.com (HELO mail-wr0-f175.google.com) (209.85.128.175) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 22 Mar 2018 12:57:16 +0000 Received: by mail-wr0-f175.google.com with SMTP id z73so8597364wrb.0 for ; Thu, 22 Mar 2018 05:57:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=kqge0xLOF5Y8Nuaz83z7Znk1JpXHIE49eCeOl72mjQQ=; b=Q8JT6NJhtG5NVAwzN425bVHU3TU0N0gc51cK0zWgFjrVPmuO1EZHRPHVUn/MNxTxwp Z75wsMGEyQsrN++VU+/XXG9HB5HWt5E+kGT4WkQSYkEBxcBKY2gFhQS5GnmbSrCaz+zS KJMbzkVDXs+TrFO0yTFy+XSS7Eg1HPWNq4UNpWkaN5slh49MCICOf8ohvCmlGzYMu6Rz cA+nEzXNus6ZfBpQYAYtoesqQ2XiWD+0oafXCuGmLj+R7XvdWs2sHjo1MtpyOFrOIyXp 9r8U7GaRgp4fLihbbnDjtws1xxaXMvpUt06o5q/j+HiNryv+VbDRXem/dKE4nKYi712w ogXA== X-Gm-Message-State: AElRT7Hbo6/wImLw6m2Q7kBZwwUrfA3ITG01ovNnnJVxXNeqvIeJmpJh BmeIRnLylbLzbPZo6KsAGhzuHa/o X-Google-Smtp-Source: AG47ELsDvpfOtK9v82OBG6jenI7lPp+UCf7BlhAPlCUgxzDiaxk8n6OQHSvivwJJyLrbTQspgYD8aA== X-Received: by 10.223.152.142 with SMTP id w14mr20972386wrb.210.1521723434163; Thu, 22 Mar 2018 05:57:14 -0700 (PDT) Received: from localhost (host86-177-103-167.range86-177.btcentralplus.com. [86.177.103.167]) by smtp.gmail.com with ESMTPSA id m7sm6463352wrb.86.2018.03.22.05.57.13 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 22 Mar 2018 05:57:13 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PATCH 2/2] gdb: Fix testsuite issue in gdb.arch/amd64-disp-step-avx.exp Date: Thu, 22 Mar 2018 12:57:09 +0000 Message-Id: <963bfa7c7483c4c907f4a63e9588b243845c8acd.1521722330.git.andrew.burgess@embecosm.com> In-Reply-To: References: In-Reply-To: References: X-IsSubscribed: yes This test starts up and confirms that $xmm0 has the value 0, it then modifies $xmm0 (in the inferior) and confirms that the new value can be read (in GDB). On some machines I was noticing that this test would occasionally fail, and on investigation I believe that the reason for this is that the test is linked as a dynamically linked executable and makes use of the system libraries during startup. The reason that this causes problems is that both the runtime linker and the startup code run before main can, and do (on at least some platforms) make use of the XMM registers. In this commit I modify the test program slightly to allow it to be linked statically, without using the startup libraries. Now by the time GDB reaches the symbol main then we have only executed one 'nop' instruction, and the XMM registers will all have the value 0. I've extended the existing check in the test script to cover $xmm0 through to $xmm15 (originally only $xmm0 was checked). The test program is still linked against libc in order that we can call the exit function, however, we now call _exit rather than exit in order to avoid all of the usual cleanup that exit does. This clean up tries to tear down things that are usually setup during the startup code, but now this isn't called calling exit will just result in a crash. gdb/testsuite/ChangeLog: * gdb.arch/amd64-disp-step-avx.S: Add '_start' label. (done): Call '_exit' not 'exit' to avoid atexit handlers. * gdb.arch/amd64-disp-step-avx.exp: Pass -static, and -nostartfiles when compiling the test. Confirm that all registers xmm0 to xmm15 are initially 0. --- gdb/testsuite/ChangeLog | 8 ++++++++ gdb/testsuite/gdb.arch/amd64-disp-step-avx.S | 8 +++++--- gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp | 12 ++++++++---- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/gdb/testsuite/gdb.arch/amd64-disp-step-avx.S b/gdb/testsuite/gdb.arch/amd64-disp-step-avx.S index b56a552f6e6..1c06ceebab3 100644 --- a/gdb/testsuite/gdb.arch/amd64-disp-step-avx.S +++ b/gdb/testsuite/gdb.arch/amd64-disp-step-avx.S @@ -20,9 +20,11 @@ .text - .global main -main: + .global _start,main +_start: nop +main: + nop /***********************************************/ @@ -59,7 +61,7 @@ ro_var: done: mov $0,%rdi - call exit + call _exit hlt /* RIP-relative data for VEX3 test above. */ diff --git a/gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp b/gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp index 362ed7b7b3a..d25f9692360 100644 --- a/gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp +++ b/gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp @@ -25,8 +25,10 @@ if { ![istarget x86_64-*-* ] || ![is_lp64_target] } { standard_testfile .S -if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ - [list debug]] } { +set options [list debug \ + additional_flags=-static \ + additional_flags=-nostartfiles] +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} $options] } { return -1 } @@ -103,8 +105,10 @@ proc disp_step_func { func } { with_test_prefix "vex2" { # This case writes to the 'xmm0' register. Confirm the register's # value is what we believe it is before the AVX instruction runs. - gdb_test "p /x \$xmm0.uint128" " = 0x0" \ - "xmm0 has expected value before" + for {set i 0 } { $i < 16 } { incr i } { + gdb_test "p /x \$xmm${i}.uint128" " = 0x0" \ + "xmm${i} has expected value before" + } disp_step_func "test_rip_vex2"