aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorNelson Chu <nelson@rivosinc.com>2023-12-11 11:07:35 +0800
committerNelson Chu <nelson@rivosinc.com>2023-12-11 11:32:19 +0800
commit884203000f851a469835f373c28f9b15a93b2e96 (patch)
tree1705854987ae5437dd889d6013d1eadfcba7af9a /gas
parent7fcc471ca223871e5d11ab7bc19be33c2d178ef8 (diff)
downloadgdb-884203000f851a469835f373c28f9b15a93b2e96.zip
gdb-884203000f851a469835f373c28f9b15a93b2e96.tar.gz
gdb-884203000f851a469835f373c28f9b15a93b2e96.tar.bz2
RISC-V/gas: Clarify the definition of `relaxable' in md_apply_fix
The `relaxable' in md_apply_fix means if the relocation can be relaxed or not in link-time generally. We can use `.option relax/norelax' to enable/disable relaxations for some specific areas, so the value of `riscv_opts.relax' will be changed dynamically. The `fixP->fx_tcbit' records the correct value of `riscv_opts.relax' for every relocation. Therefore, set `relaxable' to `riscv_opts.relax' will cause unexpected behavior for the following case, .option norelax lla a1, foo1 .option relax lla a2, foo2 .option norelax lla a3, foo3 For the current assembler, the final value of `riscv_opts.relax' is false, so the second `lla a2, foo2' won't have R_RISCV_RELAX relocation, but should have. gas/ * config/tc-riscv.c (md_apply_fix): Set the value of `relaxable' to `riscv_opts.relax' is wrong. It should be `true' generally.
Diffstat (limited to 'gas')
-rw-r--r--gas/config/tc-riscv.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
index 9365b87..d3b6543 100644
--- a/gas/config/tc-riscv.c
+++ b/gas/config/tc-riscv.c
@@ -4283,7 +4283,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
case BFD_RELOC_RISCV_PCREL_HI20:
case BFD_RELOC_RISCV_PCREL_LO12_S:
case BFD_RELOC_RISCV_PCREL_LO12_I:
- relaxable = riscv_opts.relax;
+ relaxable = true;
break;
case BFD_RELOC_RISCV_ALIGN: