<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/93915>93915</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
ld.lld risc-V does not merge BSS sections properly.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
lld
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
wom-bat
</td>
</tr>
</table>
<pre>
Script to reproduce attached. For aarch64, the `_bss_end` symbol is correctly after the bss section; for risc-V the BSS symbol 'd' appears _after_ `_bss_end`. GNU binutils links correctly.
Found in version 1.18
```
#!/bin/sh
TARGET="-target riscv64 -march=rv64imac -mabi=lp64 -nostdlib"
#TARGET="-target aarch64 -nostdlib"
cat > a.c <<\EOF
int a; /* in bss */
char _stack[4096];
extern int b(void);
int main()
{
a = b();
return a;
}
EOF
cat > b.c <<\EOF
int d; /* in bss */
int b() {
d += 1;
return d;
}
EOF
cat > script.ld <<\EOF
PHDRS
{
text PT_LOAD;
data PT_LOAD;
}
ENTRY(_start);
SECTIONS
{
. = 0x200000;
.text :
{
_text = .;
*(.text.start)
*(.text*)
*(.rodata)
_text_end = .;
} :text
. = ALIGN(0x1000);
.bss :
{
_bss = .;
*(.bss)
*(COMMON)
. = ALIGN(4);
_bss_end = .;
} :data
}
EOF
# cat > crt0.s <<\EOF
# .extern main
# .section ".text.start"
# .global _start;
# .type _start, %function;
# _start:
# ldr x1, =_stack + 0xff0
# mov sp, x1
# b main
# EOF
cat > crt0.s <<\EOF
.extern main
.section ".text.start"
.global _start;
.type _start, %function;
_start:
la s1, (_stack + 0xff0)
mv sp, s1
j main
EOF
clang ${TARGET} -ffreestanding -c a.c
clang ${TARGET} -ffreestanding -c b.c
clang ${TARGET} -c crt0.s -o crt0.o
ld.lld -o a.elf crt0.o a.o b.o -T script.ld
nm -n a.elf
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVl1v4jgU_TXm5QrLcYDAQx6AlO5IM-2oZVfaJ-TYBjzjxMg2LP33KzsBAqUznQil6T3349yTazvMObWppczRcIaGRY_t_dbY_D9T9Uvme6URb_krt2rnwRuwcmeN2HMJzHvGt1JggIWxwJjl29EA0Tn4rQQ0IqvSuZWsBRoRcG9VaTQoB9xYK7nXb8DWXtroXDoHTnKvTI3SGayNBasc7_8T0dnr6yke0UwgmgHb7SSzDlYxxwpuymF4fPobSlXvvdIOtKp_dgpjRApEpguzrwWoGg7SOmVqSHAybqD2PiLtr_mXpogmiC5KVSO6cNvGvJy-PD4sUVogSvue2Y30kfxhNIB-FURBaWEPo4GqGA-WUqG00LsA18Z5oVWJKD3XuJev1fZeQLxz5gGlD8AwB5TOw284f3heNKiqPbCgK6ILRKeh5SA4otNgaBJsmYWV84z_RMPZgExGaFigdNag8uilrSHkKREdH4wSiE7OcLBXLIgyDuaGV9aCAMAApUWM7EYBgJV-b-vI7RRVNA9n7tf9lR_2J37d34k6ohPoUhOA6CywS-7wEp_m5eLywFrcYff9r-Ll9b0o4OXRw_fl6uvztOgWB8E8ewecGbQ8npYv_yI6Dq_M-q6szf31Yb788vx0ry6Ob4McKQnXTVx0iMxQ2jFdJQjXqvUpAF-4R8HHMRyfeV2FdTzi433YmiDBBY3Fwsq-LRiZFYFqzHjbR3Sffv3y-ITomByT0O71AAKOg3Ju9X2fDX5btUO2dO6DPubP3749P13Aaz6DWyqncr9uNCpzdyKuJxPRFE7Tya0n2N0ZzeCE28UdF_BNAtzuyYAovXqt9J3nRpuSaWjn8TxUAfJvO3kC6BwQHa739Wmvv_idQjtZw6WFhWMSA9Oi2aHCmgVyXK_JtWtlDuB2wfWYXCNltz2awlmB30r0kTyfk-YDWT4jyY0cUQoGrlGiWfhXSnRnsDrp4Fod4Eengds9TLN6A4gOUDZrz56sgP56baV0ntVC1Rvo83C2_FlA-ZsAflK9b5on07hrgbUWwcqw1OsWA4YNlNhAf3nZbrt91BX06ybk5vjuiTwVk3TCejJPsiRLKKWDrLfNiRCSJSRNRkkyysYJHY4ma074KM14wtO0p3JK6IAM04RQOiAZXhPORZZMJglJxpILNCCyYkpjrQ8VNnbTU87tZT5JJ8mwp1kptYvfVZRqLcJ0DIuezYN3v9xvHBoQrZx3l3ivvJZ5q0H7ESSMdFAbD5W0m_Z7qBk_BztrdtLqN9zbW51vvd-5MDThJFxslN_uS8xNhegiVGj_9HfW_JDcI7qIdB2ii4bxIaf_BwAA__8SIbZV">