From patchwork Sat Aug 12 10:31:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 134863 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b824:0:b0:3f2:4152:657d with SMTP id z4csp1634332vqi; Sat, 12 Aug 2023 03:31:56 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE4ngvLMAOU35wmN9deAwze/3WAiiNaKIPtAFV5VbtsOmI2mFLLoL2sQXcO3VTDgkjEP9a+ X-Received: by 2002:ac2:5288:0:b0:4fb:893e:8ffc with SMTP id q8-20020ac25288000000b004fb893e8ffcmr2665434lfm.17.1691836316052; Sat, 12 Aug 2023 03:31:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691836316; cv=none; d=google.com; s=arc-20160816; b=D2EFMBD65/xVQH0e2IDrMc4Cams1CbmzVah6tSWuKRZWPG9ms24k64sfcVUy46YljR eh/MabhOn57M38Ef1eoL/SFKQo74JR8sFdhg/W5pJvk6ZOA+TqRI7TnOipbBXHdf31xg HdscV0NMnAvOMJZ0/0TIMtSSp+U8bw6g8mZn4GY22A9JgzbqxX5WZngZgYv+1vFE6iTz 8Ojsb54KZ9q/1cisDwI+qrOS7jbs9s56FKA84kIHi9S01WXbVsIHJ3T18HOEFNstuEPm A9pGbcsX4an32fczFXXXM98jdhjVj11jXM2eyGMv7EZbZb8qV+E5Ie7aLNFs1tTah/Cy KK5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-disposition:mime-version:message-id:subject:to:date :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=LxcflzWekbnxhFqrOxp9Bxus0s2VQPS1mVNz3eeWJWI=; fh=HNIqzTA9Dp00ovCAyCdXfuEvWDT00OlFxFRPLybXRis=; b=Kw4zwjzp3i4EGZVyul6kSa/HduYwvHvfJx/r5/dY0izXhz/mF2UC3ishR7eaZavXkQ Oa3Iv2Sr8T8y9CVb9zTRSRZtRXYhL3rm2BCRgDMCb4fIIRMSM4IQTN77fjxXYC/Y6Tpo CvPI7mZJAAtPjuO4Rb1uFD5WAYg9r/Lh3asn0ip4ApmWFkkywgqtHmpG+BzGPYU6Loj/ 1B0OulIOqcSYxoQDr71OO7NP16Ujnm+8tLFA+HbiWIQoIj31sBGeCL/Av2Hp6L89Gcdj Xeog0U8ZKKQbiLfR8ZoWH+Ysk7SPiIb/L+MXXvvmZ2yk1zT50wGY/KM4az1eyNJ3tFkf wkKQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=D9QOfYfG; spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id y12-20020aa7cccc000000b005221c984c16si4661237edt.574.2023.08.12.03.31.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Aug 2023 03:31:56 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=D9QOfYfG; spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 71FBE3858407 for ; Sat, 12 Aug 2023 10:31:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 71FBE3858407 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1691836312; bh=LxcflzWekbnxhFqrOxp9Bxus0s2VQPS1mVNz3eeWJWI=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=D9QOfYfG029weDSIY8+6oQCYE+Blq5fWjgvEMCMIK05E+NR983fhoa+ef9vNdvL2J Ol247ceuU9LzxPXRwS/gXyzKrXqHQjzbhUhGSjkivGPWRTynZ+yvV6DyFDNZUyIIay 4RzYa6OxUEErAG3ltttFbSzVQJC15prWKgn+x5oc= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-pj1-x1031.google.com (mail-pj1-x1031.google.com [IPv6:2607:f8b0:4864:20::1031]) by sourceware.org (Postfix) with ESMTPS id 0338C3858D20 for ; Sat, 12 Aug 2023 10:31:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0338C3858D20 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-267fcd6985cso1948870a91.2 for ; Sat, 12 Aug 2023 03:31:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691836301; x=1692441101; h=content-disposition:mime-version:message-id:subject:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LxcflzWekbnxhFqrOxp9Bxus0s2VQPS1mVNz3eeWJWI=; b=kgTITL+VoEFph/5UVCjBFwv1I6RcKtVZ/+O+MGDQ0URdIIOn1Jb9jidHE3ITPVisy2 rmeQVWXCQ43phm42g0xhlog7xCQd+fkg/JeJghiYVfzLRYOgLlobruKeX22uc3s+//TT 0ApN/wQgWN0EEycL66Qt4sI85lRVVnnob/FzccUpuGNfehPOqp0oVtuhOsPj2MBY0jYD fSyY+/9Fidl82wvmJKisXuItnPlCIT7tUsDkoORZeQm0hJ6jTreBrvAbW6OpQuOzGyxy uSAreq3YO67tyK3vAqosJYb5D/K7Om9hD+avkVFiv7SNIpGHEPtYCiEBffbxZOUN2/Bz KQyg== X-Gm-Message-State: AOJu0Yz899gF8F3UzWuVopnTzRZ3jnrndqZk1pVtd8BuKJJUipByUDg6 zJlF42aLLThwO1PgbNVB8R2Bf4Ghd2o= X-Received: by 2002:a17:90a:b894:b0:267:6a1d:323c with SMTP id o20-20020a17090ab89400b002676a1d323cmr3758044pjr.43.1691836301261; Sat, 12 Aug 2023 03:31:41 -0700 (PDT) Received: from squeak.grove.modra.org (158.106.96.58.static.exetel.com.au. [58.96.106.158]) by smtp.gmail.com with ESMTPSA id c30-20020a17090a492100b0026094c23d0asm5067796pjh.17.2023.08.12.03.31.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Aug 2023 03:31:40 -0700 (PDT) Received: by squeak.grove.modra.org (Postfix, from userid 1000) id C6D8B11404E3; Sat, 12 Aug 2023 20:01:37 +0930 (ACST) Date: Sat, 12 Aug 2023 20:01:37 +0930 To: binutils@sourceware.org Subject: PR30715, VAX: md_create_long_jump Message-ID: MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-3034.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Alan Modra via Binutils From: Alan Modra Reply-To: Alan Modra Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1774018956957578265 X-GMAIL-MSGID: 1774018956957578265 From Kalvis Duckmanton PR 30715 * config/tc-vax.c (md_create_long_jump): Use pc-relative addressing. * testsuite/gas/vax/broken_word.d, * testsuite/gas/vax/broken_word.s: New test. * testsuite/gas/vax/vax.exp: Run it. diff --git a/gas/config/tc-vax.c b/gas/config/tc-vax.c index 50adf532a15..d1a2998cdf5 100644 --- a/gas/config/tc-vax.c +++ b/gas/config/tc-vax.c @@ -2178,18 +2178,19 @@ md_create_short_jump (char *ptr, void md_create_long_jump (char *ptr, - addressT from_addr ATTRIBUTE_UNUSED, + addressT from_addr, addressT to_addr, - fragS *frag, - symbolS *to_symbol) + fragS *frag ATTRIBUTE_UNUSED, + symbolS *to_symbol ATTRIBUTE_UNUSED) { valueT offset; - offset = to_addr - S_GET_VALUE (to_symbol); - *ptr++ = VAX_JMP; /* Arbitrary jump. */ - *ptr++ = VAX_ABSOLUTE_MODE; + /* account for 1 byte instruction, 1 byte of address specifier and + 4 bytes of offset from PC */ + offset = to_addr - (from_addr + 1 + 1 + 4); + *ptr++ = VAX_JMP; /* long jump */ + *ptr++ = VAX_PC_RELATIVE_MODE; md_number_to_chars (ptr, offset, 4); - fix_new (frag, ptr - frag->fr_literal, 4, to_symbol, (long) 0, 0, NO_RELOC); } #ifdef OBJ_VMS diff --git a/gas/testsuite/gas/vax/broken_word.d b/gas/testsuite/gas/vax/broken_word.d new file mode 100644 index 00000000000..8040b4f72e1 --- /dev/null +++ b/gas/testsuite/gas/vax/broken_word.d @@ -0,0 +1,62 @@ +#as: +#objdump: -dr + +.*: file format .* + + +Disassembly of section .text: + +00000000 : + 0: 00 00 \.word 0x0000 # Entry mask: < > + 2: c2 04 5e subl2 \$0x4,sp + 5: d0 ac 04 50 movl 0x4\(ap\),r0 + 9: cf 50 01 02 casel r0,\$0x1,\$0x2 + +0000000d <\.casetable>: + d: 1d 00 85 7f 09 00 .* + +00000013 <\.casetableend>: + 13: 31 06 00 brw 1c + 16: 17 ef 87 83 jmp 83a3 + 1a: 00 00 * + +0000001c : + 1c: df ef 00 00 pushal .* + 20: 00 00 * + 1e: R_VAX_PC32 \.rodata\+0x18 + 22: fb 01 ef 00 calls \$0x1,.* + 26: 00 00 00 * + 25: R_VAX_PC32 printf + +00000029 : + 29: 04 ret + +0000002a : + 2a: df ef 00 00 pushal .* + 2e: 00 00 * + 2c: R_VAX_PC32 \.rodata + 30: fb 01 ef 00 calls \$0x1,.* + 34: 00 00 00 * + 33: R_VAX_PC32 printf + 37: 17 af ef jmp 29 + \.\.\. + +00007f92 : + 7f92: df ef 00 00 pushal .* + 7f96: 00 00 * + 7f94: R_VAX_PC32 \.rodata\+0x8 + 7f98: fb 01 ef 00 calls \$0x1,.* + 7f9c: 00 00 00 * + 7f9b: R_VAX_PC32 printf + 7f9f: 17 cf 86 80 jmp 29 + \.\.\. + +000083a3 : + 83a3: df ef 00 00 pushal .* + 83a7: 00 00 * + 83a5: R_VAX_PC32 \.rodata\+0x10 + 83a9: fb 01 ef 00 calls \$0x1,.* + 83ad: 00 00 00 * + 83ac: R_VAX_PC32 printf + 83b0: 17 ef 73 7c jmp 29 + 83b4: ff ff * diff --git a/gas/testsuite/gas/vax/broken_word.s b/gas/testsuite/gas/vax/broken_word.s new file mode 100644 index 00000000000..445b0bc8fa5 --- /dev/null +++ b/gas/testsuite/gas/vax/broken_word.s @@ -0,0 +1,57 @@ + .text + + .globl printf + + .globl asmfn + .type asmfn, @function +asmfn: + .word 0 + subl2 $4,%sp + movl 4(%ap), %r0 + + casel %r0, $1, $(3 - 1) + .type .casetable, @object +.casetable: + .word case1 - .casetable + .word case2 - .casetable + .word case3 - .casetable +# define a label here for disassembly of magically added branch and jump +.casetableend = .casetable + 6 + .type .casetableend, @notype + +casedefault: + pushal msg_default + calls $1, printf +asmret: + ret + +# Case1 is close by, within the range of a word offset +case1: + pushal msg_case1 + calls $1, printf + jmp asmret + .skip 32600 + +# Case2 is still within the range of a signed word offset +case2: + pushal msg_case2 + calls $1, printf + jmp asmret + .skip 1024 + +# Case3 is now no longer within the range of a signed word offset +case3: + pushal msg_case3 + calls $1, printf + jmp asmret + + + .section .rodata +msg_case1: + .string "Case 1\n" +msg_case2: + .string "Case 2\n" +msg_case3: + .string "Case 3\n" +msg_default: + .string "Default case\n" diff --git a/gas/testsuite/gas/vax/vax.exp b/gas/testsuite/gas/vax/vax.exp index f7f6afe5a1c..5acaf5e860e 100644 --- a/gas/testsuite/gas/vax/vax.exp +++ b/gas/testsuite/gas/vax/vax.exp @@ -17,6 +17,9 @@ # # Some generic VAX tests # +if ![istarget vax-*-* ] then { + return +} proc do_quad {} { set testname "quad.s: quadword immediate values" @@ -42,12 +45,12 @@ proc do_quad {} { if [all_ones $x1 $x2 $x3] then { pass $testname } else { fail $testname } } -if [istarget vax-*-* ] then { - do_quad - run_dump_test "flonum" +do_quad - if { [istarget vax-*-*elf*] || [istarget vax-*-linux-*] } then { - run_dump_test "elf-rel" - } +run_dump_test flonum +run_dump_test broken_word + +if { [istarget vax-*-*elf*] || [istarget vax-*-linux-*] } then { + run_dump_test elf-rel }