From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-267fcd6985cso1948870a91.2 for ; Sat, 12 Aug 2023 03:31:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1691836301; x=1692441101; h=content-disposition:mime-version:message-id:subject:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=LxcflzWekbnxhFqrOxp9Bxus0s2VQPS1mVNz3eeWJWI=; b=dmlI1hN8/tzw78EXxK7fNc48HEhetw+6UG0xVFsIOS4BgTnPlkyiZs2myMIo1WWrvJ Wn6O6enr+kGx+vwSAUc73unPFEKi0yBXm+v4Ed9UDcbnh9o4JmDuHJtqXfukBK4owJ6r K4pV6yClM8U+JJ5eLrFA8BcEyBYGaG0ct5aTBLG4m/+MSVWumUcKANAYo31NYewjA2ex +WsXQs9OzEIjmd8LiJaZ1EZ08HZGY/jbjwjug92H9Bu7uVPZLU9FSa3c9wgGRJoqE+wV yApazPlpqF+aKXuULiOMy+HzRUQzO9JJAPNoGvzyEAsEHRQB8JZ10wDZ85Bqy0Zj9H/V oITA== 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-Google-Smtp-Source: AGHT+IE9GEdSDlGs+fc9mLQPYxnaTLAmacDHu8dLLYP7JPoJq9EbJEEuyIt4+lLiRfPY6ifs1dkj5Q== 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 From: Alan Modra To: binutils@sourceware.org Subject: PR30715, VAX: md_create_long_jump Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii 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 List-Id: >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 } -- Alan Modra Australia Development Lab, IBM