diff options
author | Jim Wilson <jimw@sifive.com> | 2018-09-25 22:52:38 +0000 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 2018-09-25 15:52:38 -0700 |
commit | ad117173a0d8a5412bc2b9fb99e2c9b1cb4036af (patch) | |
tree | dc6bd6677ec3a060c251232a8106b1431063ae65 /gcc | |
parent | c7813484bc9fe2c578d7538d0a9e286bf2e64599 (diff) | |
download | gcc-ad117173a0d8a5412bc2b9fb99e2c9b1cb4036af.zip gcc-ad117173a0d8a5412bc2b9fb99e2c9b1cb4036af.tar.gz gcc-ad117173a0d8a5412bc2b9fb99e2c9b1cb4036af.tar.bz2 |
RISC-V: Fix weak symbols with medany and explicit relocs.
gcc/
* config/riscv/riscv.c (riscv_split_symbol): Mark auipc label as weak
when target symbol is weak.
gcc/testsuite/
* gcc.target/riscv/weak-1.c: New.
From-SVN: r264586
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/riscv/riscv.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/riscv/weak-1.c | 14 |
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4385715..d43e6d6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-09-25 Jim Wilson <jimw@sifive.com> + + * config/riscv/riscv.c (riscv_split_symbol): Mark auipc label as weak + when target symbol is weak. + 2018-09-25 Bernd Edlinger <bernd.edlinger@hotmail.de> PR c/87387 diff --git a/gcc/config/riscv/riscv.c b/gcc/config/riscv/riscv.c index 9d6d981..381a203 100644 --- a/gcc/config/riscv/riscv.c +++ b/gcc/config/riscv/riscv.c @@ -1103,6 +1103,11 @@ riscv_split_symbol (rtx temp, rtx addr, machine_mode mode, rtx *low_out) label = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf)); SYMBOL_REF_FLAGS (label) |= SYMBOL_FLAG_LOCAL; + /* ??? Ugly hack to make weak symbols work. May need to change the + RTL for the auipc and/or low patterns to get a better fix for + this. */ + if (! nonzero_address_p (addr)) + SYMBOL_REF_WEAK (label) = 1; if (temp == NULL) temp = gen_reg_rtx (Pmode); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7b26b89..f690e62 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2018-09-25 Jim Wilson <jimw@sifive.com> + + * gcc.target/riscv/weak-1.c: New. + 2018-09-25 Jeff Law <law@redhat.com> * gcc.dg/warn-stpcpy-no-nul.c: Drop unnecessary xfails. diff --git a/gcc/testsuite/gcc.target/riscv/weak-1.c b/gcc/testsuite/gcc.target/riscv/weak-1.c new file mode 100644 index 0000000..0f20501 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/weak-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-mcmodel=medany -mexplicit-relocs -O" } */ + +/* Verify that the branch doesn't get optimized away. */ +extern int weak_func(void) __attribute__ ((weak)); + +int +sub (void) +{ + if (weak_func) + return weak_func (); + return 0; +} +/* { dg-final { scan-assembler "b\(ne|eq\)" } } */ |