From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 3A6DB3858C53 for ; Wed, 26 Apr 2023 13:29:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3A6DB3858C53 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1682515768; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=BipIhYR4JEQVeSD2HAbdk6jYM05IqVg/J4jKVdFlRcg=; b=jDL+9Buy4RYGmDLp4WzMfhAE0flji9Q6GbpYV5JHRZbS3j0sAU/CuiYIS53Npoq/ss4YG1 AE+2S9GaEAkQ9T+/yg7IbXK8fSVKr/Z5MbtA3Yf1hfiugihDfI6XkjQbDKc9YkT8b3joF3 cQEUS7xEAcpSRMO9cFqcXZgNSAO5W9o= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-216-nUo79qZjPHekkxK9ItdrdQ-1; Wed, 26 Apr 2023 09:29:27 -0400 X-MC-Unique: nUo79qZjPHekkxK9ItdrdQ-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 43C9E85A588 for ; Wed, 26 Apr 2023 13:29:27 +0000 (UTC) Received: from fedora.. (unknown [10.43.2.191]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C646C492C13; Wed, 26 Apr 2023 13:29:26 +0000 (UTC) From: Bruno Larsen To: gdb-patches@sourceware.org Cc: Bruno Larsen Subject: [PATCH] gdb/testsuite: change hardcoded assembly in gdb.arch/disp-step-insn-reloc.exp Date: Wed, 26 Apr 2023 15:29:16 +0200 Message-Id: <20230426132916.1988539-1-blarsen@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: When testing gdb.arch.disp-step-insn-reloc.exp with clang in an x86_64 machine, the compiled test case would segfault when returning from the function can_relocate_call, with a suggestion of a broken stack. The example assembly in the commment was the following: f: MOV $1, %[ok] JMP end set_point0: CALL f ; tracepoint here. end: And the segmentation fault happening at the final "ret" instruction of the original function. This suggests that gcc's compilation process would realize that no ret instruction ever happened after that call and doesn't save the return address, while clang's process wouldn't. Looking at the generated instructions, we can indeed see a difference: clang's version: e8 f1 ff ff ff call 11a4 gcc's version: e8 f4 ff ff ff call 401125 Notice the difference on the second byte. Changing the assembly to use "ret" instead of "JMP end" does not change the behavior of the program and guarantees a compiler independent behavior. This commit does just that. --- gdb/testsuite/gdb.arch/insn-reloc.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gdb/testsuite/gdb.arch/insn-reloc.c b/gdb/testsuite/gdb.arch/insn-reloc.c index f687c2c5631..365e6180057 100644 --- a/gdb/testsuite/gdb.arch/insn-reloc.c +++ b/gdb/testsuite/gdb.arch/insn-reloc.c @@ -49,10 +49,9 @@ fail (void) JMP set_point0 f: MOV $1, %[ok] - JMP end + RET set_point0: CALL f ; tracepoint here. - end: */ @@ -65,10 +64,9 @@ can_relocate_call (void) " jmp " SYMBOL (set_point0) "\n" "0:\n" " mov $1, %[ok]\n" - " jmp 1f\n" + " ret\n" SYMBOL (set_point0) ":\n" " call 0b\n" - "1:\n" : [ok] "=r" (ok)); if (ok == 1) -- 2.39.2