Discussion:
[PATCH] RISC-V: Delete zero-size .tdata.dyn section.
Jim Wilson
2018-10-04 20:31:27 UTC
Permalink
Now that .tdata.dyn is marked SEC_LINKER_CREATED, we have to explicitly check
for zero size sections and remove them after riscv_elf_adjust_dynamic_symbol
has handled all symbols. This is done in riscv_elf_size_dynamic_sections
where we already have code for this; we just need to add the .tdata.dyn section
to the list of sections that it handles.

This was tested with cross builds and checks for riscv{32,64}-{elf,linux}.
There were no regressions. It was also tested with a cross toolchain build
riscv64-linux and a make check using -Wl,--gc-sections which was the original
problem, and there were no regressions in the gcc and libstdc++ testsuites.

This fixes the bug Andreas Schwab reported, where we were ending up with zero
size .tdata sections in linked executables, confusing elfutils.

Committed.

Jim

bfd/
* elfnn-riscv.c (riscv_elf_size_dynamic_sections): In dynobj->sections
loop, handle htab->sdyntdata section.
---
bfd/elfnn-riscv.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c
index 88f491f914..5cde72f003 100644
--- a/bfd/elfnn-riscv.c
+++ b/bfd/elfnn-riscv.c
@@ -1274,7 +1274,8 @@ riscv_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
|| s == htab->elf.sgot
|| s == htab->elf.sgotplt
|| s == htab->elf.sdynbss
- || s == htab->elf.sdynrelro)
+ || s == htab->elf.sdynrelro
+ || s == htab->sdyntdata)
{
/* Strip this section if we don't need it; see the
comment below. */
--
2.17.1
Loading...