<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/80336>80336</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[lld][ELF] vma gets bumped with MEMORY command / TBSS sections
</td>
</tr>
<tr>
<th>Labels</th>
<td>
lld
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
shankarke
</td>
</tr>
</table>
<pre>
The below test when built using lld, bumps the VMA by the size of the tbss section.
`
cat > 1.c << \!
__thread int a = 0;
int b = 10;
int data = 100;
int foo() { return a + b; }
!
cat > script.t << \!
MEMORY {
MYMEM (rwx) : ORIGIN = 0x1000, LENGTH = 0x80000
}
SECTIONS {
.foo : { *(.text.foo) } > MYMEM
.tbss.a : { *(.tbss.a) } > MYMEM
.bss.b : { *(.data.b) } > MYMEM
.data : { *(.data*) } > MYMEM
}
!
CC=clang
CCOPTS="-target riscv32"
LD=ld.lld
$CC $CCOPTS -c 1.c -ffunction-sections -fdata-sections -G0 -fno-asynchronous-unwind-tables
$LD -m elf32lriscv 1.o -T script.t
`
Section dump :-
`
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .foo PROGBITS 00001000 001000 00001e 00 AX 0 0 2
[ 2] .text PROGBITS 0000101e 00101e 000000 00 AX 0 0 2
[ 3] .tbss.a NOBITS 00001020 001020 000004 00 WAT 0 0 4
[ 4] .bss.b PROGBITS 00001024 001024 000004 00 WA 0 0 4
[ 5] .data PROGBITS 00001028 001028 000004 00 WA 0 0 4
[ 6] .comment PROGBITS 00000000 00102c 000038 01 MS 0 0 1
[ 7] .riscv.attributes RISCV_ATTRIBUTES 00000000 001064 00002b 00 0 0 1
[ 8] .symtab SYMTAB 00000000 001090 0000c0 10 10 8 4
[ 9] .shstrtab STRTAB 00000000 001150 000056 00 0 0 1
[10] .strtab STRTAB 00000000 0011a6 000030 00 0 0 1
`
If you see the VMA address of .bss.b, it is bumped by the size of the .tbss.a section.
This happens only when users use the MEMORY command.
GNU linker layout
`
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .foo PROGBITS 00001000 001000 00001c 00 AX 0 0 2
[ 2] .tbss.a NOBITS 0000101c 00101c 000004 00 WAT 0 0 4
[ 3] .bss.b PROGBITS 0000101c 00101c 000004 00 WA 0 0 4
[ 4] .data PROGBITS 00001020 001020 000004 00 WA 0 0 4
[ 5] .comment PROGBITS 00000000 001024 000024 01 MS 0 0 1
[ 6] .riscv.attributes RISCV_ATTRIBUTES 00000000 001048 00002b 00 0 0 1
[ 7] .symtab SYMTAB 00000000 001074 000120 10 8 14 4
[ 8] .strtab STRTAB 00000000 001194 00002e 00 0 0 1
[ 9] .shstrtab STRTAB 00000000 0011c2 000050 00 0 0 1
`
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0l1tzmzgUxz-N_HIGRkhg4wc_-Jp6xpdOoO32qSNAGDYYPEg09X76HQlwsYOTbHaXySB0--no6Jy_YiZEesg5nyBnhpzFgFUyKcqJSFj-xMonPgiK6DzxEw4Bz4pnkFxIeE54DkGVZhIqkeYHyLIIkTkE1fEkQCYcvm6nEJz1p0j_4lDE-lsGQoDgoUyL3ER4gfC0eQ9x_REyCYguwTJDQHSO6ByQM0fEqrt__JBJyVkEaS6BAaILwIjO6k7VFug267oxYpI17dcdcVEg4iIyBjSaQcllVeYKS2YQIDoDNFo09rUGXFspwjI9SVP2mbpdbveP3xW4rgNsv2-XW0DELZ9_6TXpFPaP64f1rt7ILwtjrPy4We4e_E9No4tVa734xRz99pZzf73fed01zLgoNFhtCJEpIq4p-S9p6q2qfS605dqWZpKpjsVkL6bp1nuTwFTdAdzOUr42g7tLNUfxYor-7J1z7wzmc0QXYcbyQ1vff_Y9RBeIEEOy8sAllKkIf1KCCKnHbBaILrLIVPHaMO35HPRbzQYj1JFnxHGV6yg1mmgVYMTKzk79AYMR54XBxDkPk7LIi0oYVf6c5pEhWZBxcVljswDjCDyLKcm0TWCZBRj-JYBusqA533opiKrjSfnM6M2YdtQnziJeCkSbAYCc2a5EzgJ27Mjh6vHPp6uWaRSV-mMfx6rwVM4CLD1YZQfYPME6j2GatUePnBlgRX757L5sNt06bh64LQCrXgDchVoKqkP46vn8uH-YrX2vC7VqjNVCLa6gMP0DWjLpkokmq0x4B1mzmqI19y6Z1uQ6hTqO2He5LZnUNpPGEbYif5v6F7LdJdua3KRZj80N0oZL0SLh27Qf6WikTsLXkC5cijeRQ40Mi-OR57LXobg9KhLqOnUBWwBb7wK0usCRBuo0MZmUZRpUkgt4XHvzrz-mvv-4nn3xl941elhvnwTaVoAWfUV2NVmcj5J1Pep93_rTWW_MWnhcH1WIwdJ_AO6NA8Y1NRGy7HI9__Eu1XJqqjO8MffKXgvX5GvuG2Q2rH2M75BvNGYdw7moQHB-ubdZFJVcCHVn18GnrqRUQir0Bc-jvpu9TYC-y91PUgEJO514LqDIs3P9D0QleCnUWwOa61LFEcujq_kPuy-QpfkTLyFj56KS8M-E8F8r4f-qg90z-s_EMHyPGN6RrEYDQ7gUbyoVfZdS9SHvyor9W6n6d9wnpW_o3vtEqlES-1WRGn5EpGz3HSI1-oBIjbTNFtEK5QJY9s3-3Q8oybhxBH9Noz6kfiGp1e8VjRpEExqN6ZgN-MQa4aFLMMHDQTLBLrbDMbPIcEQCm2PKcWzZsRPZmI5JFAzSCcHExkS5w6ZkaA4jZ8QIDccutmkwHiEb8yNLMzPLfh7NojwMUiEqPnExpcNBxgKeCf1ziBD9u0Zly6CcqNFGUB0EsnGWCil-z5epzPQvKDXeWSBnttyslF9-HhkcuLwI53MqkxulA0RW4M88r5VOMajKbJJIedISRlaIrA6pTKpAxS8iK7VsUxinsviThxKRld6DQGSlt_F3AAAA__-9I2Ll">