aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-01-26 00:33:37 +0100
committerJakub Konka <kubkon@jakubkonka.com>2024-01-26 05:48:32 +0100
commitce58f68903f13a90f3bb2a566755e4c74b56ecdf (patch)
tree818eef458729cc26d3264aa7ef543ca898290efd /src
parentdcaf43674e35372e1d28ab12c4c4ff9af9f3d646 (diff)
downloadzig-ce58f68903f13a90f3bb2a566755e4c74b56ecdf.tar.gz
zig-ce58f68903f13a90f3bb2a566755e4c74b56ecdf.zip
elf: merge all mergeable string rodata sections into one
Diffstat (limited to 'src')
-rw-r--r--src/link/Elf/Object.zig3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/link/Elf/Object.zig b/src/link/Elf/Object.zig
index bdb9ae2911..1f01f471c9 100644
--- a/src/link/Elf/Object.zig
+++ b/src/link/Elf/Object.zig
@@ -251,7 +251,8 @@ fn initOutputSection(self: Object, elf_file: *Elf, shdr: ElfShdr) error{OutOfMem
const name = blk: {
const name = self.getString(shdr.sh_name);
if (elf_file.base.isRelocatable()) break :blk name;
- if (shdr.sh_flags & elf.SHF_MERGE != 0) break :blk name;
+ if (shdr.sh_flags & elf.SHF_MERGE != 0 and shdr.sh_flags & elf.SHF_STRINGS == 0)
+ break :blk name; // TODO: consider dropping SHF_STRINGS once ICF is implemented
const sh_name_prefixes: []const [:0]const u8 = &.{
".text", ".data.rel.ro", ".data", ".rodata", ".bss.rel.ro", ".bss",
".init_array", ".fini_array", ".tbss", ".tdata", ".gcc_except_table", ".ctors",