| ... | ... | @@ -7090,7 +7090,7 @@ fn mapInputSection(elf: *Elf, opts: struct { |
| 7090 | 7090 | .type = switch (opts.type) { |
| 7091 | 7091 | .PROGBITS => .NULL, // size is 0 |
| 7092 | 7092 | .X86_64_UNWIND => .X86_64_UNWIND, |
| 7093 | | .NOBITS => return error.UnsupportedNobitsSection, |
| 7093 | .NOBITS => if (elf.ehdrType() == .REL) .NOBITS else return error.UnsupportedNobitsSection, |
| 7094 | 7094 | else => unreachable, |
| 7095 | 7095 | }, |
| 7096 | 7096 | .flags = flags: { |
| ... | ... | @@ -7568,10 +7568,8 @@ fn loadObject( |
| 7568 | 7568 | shdr: ElfN.Shdr, |
| 7569 | 7569 | placement: union(enum) { |
| 7570 | 7570 | progbits: InputSection.Index, |
| 7571 | | bss: struct { |
| 7572 | | offset: u64, |
| 7573 | | }, |
| 7574 | | tbss: struct { |
| 7571 | nobits: struct { |
| 7572 | shndx: Section.Index, |
| 7575 | 7573 | offset: u64, |
| 7576 | 7574 | }, |
| 7577 | 7575 | none, |
| ... | ... | @@ -7743,14 +7741,16 @@ fn loadObject( |
| 7743 | 7741 | }, |
| 7744 | 7742 | }; |
| 7745 | 7743 | |
| 7744 | section.placement = .{ .nobits = .{ |
| 7745 | .shndx = opts.shndx, |
| 7746 | .offset = offset, |
| 7747 | } }; |
| 7746 | 7748 | if (opts.shndx == elf.shndx.bss) { |
| 7747 | | section.placement = .{ .bss = .{ .offset = offset } }; |
| 7748 | 7749 | input_has_bss = true; |
| 7749 | 7750 | } else if (opts.shndx == elf.shndx.tbss) { |
| 7750 | | section.placement = .{ .tbss = .{ .offset = offset } }; |
| 7751 | 7751 | input_has_tbss = true; |
| 7752 | 7752 | } else { |
| 7753 | | unreachable; |
| 7753 | assert(elf.ehdrType() == .REL); |
| 7754 | 7754 | } |
| 7755 | 7755 | |
| 7756 | 7756 | continue; |
| ... | ... | @@ -7882,15 +7882,15 @@ fn loadObject( |
| 7882 | 7882 | elf.getNodeShndx(isi.node(elf)), |
| 7883 | 7883 | input_sym.value, |
| 7884 | 7884 | }, |
| 7885 | | .bss => |bss| .{ |
| 7886 | | .none, |
| 7887 | | elf.shndx.bss, |
| 7888 | | elf.shndx.bss.vaddr(elf) + bss.offset + input_sym.value, |
| 7889 | | }, |
| 7890 | | .tbss => |tbss| .{ |
| 7885 | .nobits => |nobits| .{ |
| 7891 | 7886 | .none, |
| 7892 | | elf.shndx.tbss, |
| 7893 | | elf.tbssBaseOffset() + tbss.offset + input_sym.value, |
| 7887 | nobits.shndx, |
| 7888 | (if (elf.ehdrType() == .REL) |
| 7889 | @as(u64, 0) |
| 7890 | else if (nobits.shndx.flags(elf).TLS) |
| 7891 | elf.tbssBaseOffset() |
| 7892 | else |
| 7893 | nobits.shndx.vaddr(elf)) + nobits.offset + input_sym.value, |
| 7894 | 7894 | }, |
| 7895 | 7895 | .none => unreachable, |
| 7896 | 7896 | }; |
| ... | ... | @@ -7960,7 +7960,7 @@ fn loadObject( |
| 7960 | 7960 | const loc_node = switch (loc_sec.placement) { |
| 7961 | 7961 | .none => continue, |
| 7962 | 7962 | .progbits => |isi| isi.node(elf), |
| 7963 | | .bss, .tbss => return diags.failParse( |
| 7963 | .nobits => return diags.failParse( |
| 7964 | 7964 | path, |
| 7965 | 7965 | "relocations applying to BSS (SHT_NOBITS) sections are unsupported", |
| 7966 | 7966 | .{}, |