mirror of
https://github.com/ziglang/zig.git
synced 2025-12-31 10:33:19 +00:00
elf: actually write synthetic globals to output symtab
This commit is contained in:
parent
0c6cb8d8c8
commit
760ce69734
@ -4819,15 +4819,12 @@ fn updateSymtabSize(self: *Elf) !void {
|
||||
const gpa = self.base.allocator;
|
||||
var files = std.ArrayList(File.Index).init(gpa);
|
||||
defer files.deinit();
|
||||
try files.ensureTotalCapacityPrecise(self.objects.items.len + self.shared_objects.items.len + 1);
|
||||
try files.ensureTotalCapacityPrecise(self.objects.items.len + self.shared_objects.items.len + 2);
|
||||
|
||||
if (self.zig_object_index) |index| files.appendAssumeCapacity(index);
|
||||
for (self.objects.items) |index| {
|
||||
files.appendAssumeCapacity(index);
|
||||
}
|
||||
for (self.shared_objects.items) |index| {
|
||||
files.appendAssumeCapacity(index);
|
||||
}
|
||||
for (self.objects.items) |index| files.appendAssumeCapacity(index);
|
||||
for (self.shared_objects.items) |index| files.appendAssumeCapacity(index);
|
||||
if (self.linker_defined_index) |index| files.appendAssumeCapacity(index);
|
||||
|
||||
// Section symbols
|
||||
for (self.output_sections.keys()) |_| {
|
||||
@ -5166,6 +5163,11 @@ fn writeSymtab(self: *Elf) !void {
|
||||
file_ptr.writeSymtab(self);
|
||||
}
|
||||
|
||||
if (self.linker_defined_index) |index| {
|
||||
const file_ptr = self.file(index).?;
|
||||
file_ptr.writeSymtab(self);
|
||||
}
|
||||
|
||||
if (self.zig_got_section_index) |_| {
|
||||
self.zig_got.writeSymtab(self);
|
||||
}
|
||||
@ -5182,11 +5184,6 @@ fn writeSymtab(self: *Elf) !void {
|
||||
self.plt_got.writeSymtab(self);
|
||||
}
|
||||
|
||||
if (self.linker_defined_index) |index| {
|
||||
const file_ptr = self.file(index).?;
|
||||
file_ptr.writeSymtab(self);
|
||||
}
|
||||
|
||||
const foreign_endian = self.base.options.target.cpu.arch.endian() != builtin.cpu.arch.endian();
|
||||
switch (self.ptr_width) {
|
||||
.p32 => {
|
||||
|
||||
@ -917,8 +917,7 @@ pub const PltSection = struct {
|
||||
}
|
||||
|
||||
pub fn writeSymtab(plt: PltSection, elf_file: *Elf) void {
|
||||
var ilocal = plt.output_symtab_ctx.ilocal;
|
||||
for (plt.symbols.items) |sym_index| {
|
||||
for (plt.symbols.items, plt.output_symtab_ctx.ilocal..) |sym_index, ilocal| {
|
||||
const sym = elf_file.symbol(sym_index);
|
||||
const st_name = @as(u32, @intCast(elf_file.strtab.items.len));
|
||||
elf_file.strtab.appendSliceAssumeCapacity(sym.name(elf_file));
|
||||
@ -932,7 +931,6 @@ pub const PltSection = struct {
|
||||
.st_value = sym.pltAddress(elf_file),
|
||||
.st_size = 16,
|
||||
};
|
||||
ilocal += 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1046,8 +1044,7 @@ pub const PltGotSection = struct {
|
||||
}
|
||||
|
||||
pub fn writeSymtab(plt_got: PltGotSection, elf_file: *Elf) void {
|
||||
var ilocal = plt_got.output_symtab_ctx.ilocal;
|
||||
for (plt_got.symbols.items) |sym_index| {
|
||||
for (plt_got.symbols.items, plt_got.output_symtab_ctx.ilocal..) |sym_index, ilocal| {
|
||||
const sym = elf_file.symbol(sym_index);
|
||||
const st_name = @as(u32, @intCast(elf_file.strtab.items.len));
|
||||
elf_file.strtab.appendSliceAssumeCapacity(sym.name(elf_file));
|
||||
@ -1061,7 +1058,6 @@ pub const PltGotSection = struct {
|
||||
.st_value = sym.pltGotAddress(elf_file),
|
||||
.st_size = 16,
|
||||
};
|
||||
ilocal += 1;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user