From: Paul Hua <paul.hua.gm@gmail.com>
To: Faraz Shahbazker <fshahbazker@wavecomp.com>
Cc: "binutils@sourceware.org" <binutils@sourceware.org>
Subject: Re: [PATCH] MIPS/LD: Skip overflow check for %pcrel_hi relocations
Date: Mon, 27 May 2019 09:23:00 -0000 [thread overview]
Message-ID: <CAKjxQH=bpJSqii9wYsszJ1brwBy51nd2Eo3VKm4Z6XrJo98yaA@mail.gmail.com> (raw)
In-Reply-To: <20190524011617.387793-1-fshahbazker@wavecomp.com>
ok. Please apply.
On Fri, May 24, 2019 at 9:16 AM Faraz Shahbazker
<fshahbazker@wavecomp.com> wrote:
>
> Overflow checks were removed for all hi16 relocations except PC-relative
> high relocations per PR ld/16720. This patch finishes the job. Due to
> the overflow check, %pcrel_hi cannot handle any negative offsets from PC.
>
> Ok to commit?
>
> bfd/
> * elfxx-mips.c (mips_elf_calculate_relocation) <R_MIPS_PCHI16>:
> Remove overflow check.
>
> ld/
> * testsuite/ld-mips-elf/undefweak-overflow.s: Remove test case
> for pcrel_hi/pcrel_lo.
> * testsuite/ld-mips-elf/undefweak-overflow.d: Update to match.
> * testsuite/ld-mips-elf/reloc-pcrel-r6.s: New test source.
> * testsuite/ld-mips-elf/reloc-pcrel-r6.d: New test linker script.
> * testsuite/ld-mips-elf/reloc-pcrel-r6.ld: New test.
> * testsuite/ld-mips-elf/mips-elf.exp: Run the new test.
> ---
> bfd/elfxx-mips.c | 2 --
> ld/testsuite/ld-mips-elf/mips-elf.exp | 2 ++
> ld/testsuite/ld-mips-elf/reloc-pcrel-r6.d | 18 ++++++++++++++++++
> ld/testsuite/ld-mips-elf/reloc-pcrel-r6.ld | 9 +++++++++
> ld/testsuite/ld-mips-elf/reloc-pcrel-r6.s | 27 +++++++++++++++++++++++++++
> ld/testsuite/ld-mips-elf/undefweak-overflow.d | 16 +++++++---------
> ld/testsuite/ld-mips-elf/undefweak-overflow.s | 2 --
> 7 files changed, 63 insertions(+), 13 deletions(-)
> create mode 100644 ld/testsuite/ld-mips-elf/reloc-pcrel-r6.d
> create mode 100644 ld/testsuite/ld-mips-elf/reloc-pcrel-r6.ld
> create mode 100644 ld/testsuite/ld-mips-elf/reloc-pcrel-r6.s
>
> diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
> index c64f90c..55f891d 100644
> --- a/bfd/elfxx-mips.c
> +++ b/bfd/elfxx-mips.c
> @@ -6326,8 +6326,6 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
>
> case R_MIPS_PCHI16:
> value = mips_elf_high (symbol + addend - p);
> - if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
> - overflowed_p = mips_elf_overflow_p (value, 16);
> value &= howto->dst_mask;
> break;
>
> diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp
> index 07d1dc3..1fee8ef 100644
> --- a/ld/testsuite/ld-mips-elf/mips-elf.exp
> +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp
> @@ -1656,3 +1656,5 @@ run_dump_test_o32 "pic-reloc-6"
> run_dump_test_n64 "pic-reloc-7"
> run_dump_test_n64 "pic-reloc-7" [list [list name (microMIPS)] \
> [list as "-mmicromips"]]
> +
> +run_dump_test_o32 "reloc-pcrel-r6"
> diff --git a/ld/testsuite/ld-mips-elf/reloc-pcrel-r6.d b/ld/testsuite/ld-mips-elf/reloc-pcrel-r6.d
> new file mode 100644
> index 0000000..ad4ac9e
> --- /dev/null
> +++ b/ld/testsuite/ld-mips-elf/reloc-pcrel-r6.d
> @@ -0,0 +1,18 @@
> +#name: MIPS r6 PC-relative hi+lo relocations
> +#ld: -Treloc-pcrel-r6.ld -e0
> +#as: -mips32r6
> +#objdump: -dr --prefix-addresses --show-raw-insn
> +#dump: reloc-pcrel-r6.d
> +
> +.*: +file format .*mips.*
> +
> +Disassembly of section \.text:
> +[0-9a-f]+ <test> ec9ed000 auipc a0,0xd000
> +[0-9a-f]+ <[^>]*> 24840001 addiu a0,a0,1
> +[0-9a-f]+ <[^>]*> ec9e0000 auipc a0,0x0
> +[0-9a-f]+ <[^>]*> 2484eff8 addiu a0,a0,-4104
> +[0-9a-f]+ <[^>]*> ec9e0001 auipc a0,0x1
> +[0-9a-f]+ <[^>]*> 2484eff0 addiu a0,a0,-4112
> +[0-9a-f]+ <[^>]*> ec9e4000 auipc a0,0x4000
> +[0-9a-f]+ <[^>]*> 2484ffe9 addiu a0,a0,-23
> + \.\.\.
> diff --git a/ld/testsuite/ld-mips-elf/reloc-pcrel-r6.ld b/ld/testsuite/ld-mips-elf/reloc-pcrel-r6.ld
> new file mode 100644
> index 0000000..a40c704
> --- /dev/null
> +++ b/ld/testsuite/ld-mips-elf/reloc-pcrel-r6.ld
> @@ -0,0 +1,9 @@
> +SECTIONS
> +{
> + x1 = 0x10000001; /* lower and far */
> + x2 = 0x3ffff000; /* lower and near */
> + . = 0x40000000;
> + .text : { *(.text) }
> + x3 = 0x4000f000; /* high and near */
> + x4 = 0x80000001; /* high and far */
> +}
> diff --git a/ld/testsuite/ld-mips-elf/reloc-pcrel-r6.s b/ld/testsuite/ld-mips-elf/reloc-pcrel-r6.s
> new file mode 100644
> index 0000000..3cc8850
> --- /dev/null
> +++ b/ld/testsuite/ld-mips-elf/reloc-pcrel-r6.s
> @@ -0,0 +1,27 @@
> + .text
> + .globl test
> + .globl x1
> + .globl x2
> + .globl x3
> + .globl x4
> + .ent test
> +test:
> +1:
> + auipc $a0,%pcrel_hi(x1)
> +2:
> + addiu $a0,$a0,%pcrel_lo(x1+(2b-1b))
> +1:
> + auipc $a0,%pcrel_hi(x2)
> +2:
> + addiu $a0,$a0, %pcrel_lo(x2+(2b-1b))
> +1:
> + auipc $a0,%pcrel_hi(x3)
> +2:
> + addiu $a0,$a0,%pcrel_lo(x3+(2b-1b))
> +1:
> + auipc $a0,%pcrel_hi(x4)
> +2:
> + addiu $a0,$a0,%pcrel_lo(x4+(2b-1b))
> + .end test
> + .align 2, 0
> + .space 8
> diff --git a/ld/testsuite/ld-mips-elf/undefweak-overflow.d b/ld/testsuite/ld-mips-elf/undefweak-overflow.d
> index b74f910..bbed997 100644
> --- a/ld/testsuite/ld-mips-elf/undefweak-overflow.d
> +++ b/ld/testsuite/ld-mips-elf/undefweak-overflow.d
> @@ -10,11 +10,9 @@
> [ 0-9a-f]+: ec4ffffd lwpc v0,20000000 <_ftext>
> [ 0-9a-f]+: ec5bfffe ldpc v0,20000000 <_ftext>
> [ 0-9a-f]+: cbfffffa bc 20000000 <_ftext>
> -[ 0-9a-f]+: ec9ee000 auipc a0,0xe000
> -[ 0-9a-f]+: 2484ffe8 addiu a0,a0,-24
> -[ 0-9a-f]+: 1000fff7 b 20000000 <_ftext>
> +[ 0-9a-f]+: 1000fff9 b 20000000 <_ftext>
> [ 0-9a-f]+: 00000000 nop
> -[ 0-9a-f]+: 0411fff5 bal 20000000 <_ftext>
> +[ 0-9a-f]+: 0411fff7 bal 20000000 <_ftext>
> [ 0-9a-f]+: 3c...... lui a0,0x....
> [ 0-9a-f]+: 0c000000 jal 20000000 <_ftext>
> [ 0-9a-f]+: 00000000 nop
> @@ -22,13 +20,13 @@
> [ 0-9a-f]+: 00000000 nop
>
> [0-9a-f]+ <micro>:
> -[ 0-9a-f]+: 8e5f beqz a0,20000000 <_ftext>
> +[ 0-9a-f]+: 8e63 beqz a0,20000000 <_ftext>
> [ 0-9a-f]+: 0c00 nop
> -[ 0-9a-f]+: cfdd b 20000000 <_ftext>
> +[ 0-9a-f]+: cfe1 b 20000000 <_ftext>
> [ 0-9a-f]+: 0c00 nop
> -[ 0-9a-f]+: 9400 ffda b 20000000 <_ftext>
> +[ 0-9a-f]+: 9400 ffde b 20000000 <_ftext>
> [ 0-9a-f]+: 0c00 nop
> -[ 0-9a-f]+: 4060 ffd7 bal 20000000 <_ftext>
> +[ 0-9a-f]+: 4060 ffdb bal 20000000 <_ftext>
> [ 0-9a-f]+: 0000 0000 nop
> [ 0-9a-f]+: f400 0000 jal 20000000 <_ftext>
> [ 0-9a-f]+: 0000 0000 nop
> @@ -36,7 +34,7 @@
> [ 0-9a-f]+: 0c00 nop
>
> [0-9a-f]+ <mips16>:
> -[ 0-9a-f]+: f7df 100c b 20000000 <_ftext>
> +[ 0-9a-f]+: f7df 1010 b 20000000 <_ftext>
> [ 0-9a-f]+: 1800 0000 jal 20000000 <_ftext>
> [ 0-9a-f]+: 6500 nop
> #pass
> diff --git a/ld/testsuite/ld-mips-elf/undefweak-overflow.s b/ld/testsuite/ld-mips-elf/undefweak-overflow.s
> index a7a9937..d439d7c 100644
> --- a/ld/testsuite/ld-mips-elf/undefweak-overflow.s
> +++ b/ld/testsuite/ld-mips-elf/undefweak-overflow.s
> @@ -13,8 +13,6 @@ start:
> lwpc $2, foo
> ldpc $2, foo
> bc foo
> - auipc $4, %pcrel_hi(foo)
> - addiu $4, $4, %pcrel_lo(foo+4)
>
> b foo
> nop
> --
> 2.9.5
>
prev parent reply other threads:[~2019-05-27 9:23 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-24 1:16 Faraz Shahbazker
2019-05-27 9:23 ` Paul Hua [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAKjxQH=bpJSqii9wYsszJ1brwBy51nd2Eo3VKm4Z6XrJo98yaA@mail.gmail.com' \
--to=paul.hua.gm@gmail.com \
--cc=binutils@sourceware.org \
--cc=fshahbazker@wavecomp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).