aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-03-17 11:40:48 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-03-17 11:41:17 -0700
commit1ee7a81627f464d9ab7f763f357bbb37aed342d5 (patch)
treef235d46bc52b40285644abeb054fd554fcbae3d5 /src
parent00ed8d9c50dd2b4491c87310a8766e5f6e0900ce (diff)
downloadzig-1ee7a81627f464d9ab7f763f357bbb37aed342d5.tar.gz
zig-1ee7a81627f464d9ab7f763f357bbb37aed342d5.zip
Revert "link.Elf: swap order of GOT and text program headers"
This reverts commit 8e7b1a74ac4568a2b806026f210ae59e52d2768d. Sorry, I should have put up a PR and ran that one by Jakub and done some more inspection. This causes problems with gdb: BFD: /home/andy/dev/zig/build-release/test: invalid string offset 3254779904 >= 153524 for section `.shstrtab'
Diffstat (limited to 'src')
-rw-r--r--src/link/Elf.zig44
1 files changed, 22 insertions, 22 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index dab6e4997c..64d6df6756 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -511,6 +511,28 @@ pub fn populateMissingMetadata(self: *Elf) !void {
};
const ptr_size: u8 = self.ptrWidthBytes();
+ if (self.phdr_load_re_index == null) {
+ self.phdr_load_re_index = @intCast(u16, self.program_headers.items.len);
+ const file_size = self.base.options.program_code_size_hint;
+ const p_align = self.page_size;
+ const off = self.findFreeSpace(file_size, p_align);
+ log.debug("found PT_LOAD RE free space 0x{x} to 0x{x}", .{ off, off + file_size });
+ const entry_addr: u64 = self.entry_addr orelse if (self.base.options.target.cpu.arch == .spu_2) @as(u64, 0) else default_entry_addr;
+ try self.program_headers.append(self.base.allocator, .{
+ .p_type = elf.PT_LOAD,
+ .p_offset = off,
+ .p_filesz = file_size,
+ .p_vaddr = entry_addr,
+ .p_paddr = entry_addr,
+ .p_memsz = file_size,
+ .p_align = p_align,
+ .p_flags = elf.PF_X | elf.PF_R,
+ });
+ try self.atom_free_lists.putNoClobber(self.base.allocator, self.phdr_load_re_index.?, .{});
+ self.entry_addr = null;
+ self.phdr_table_dirty = true;
+ }
+
if (self.phdr_got_index == null) {
self.phdr_got_index = @intCast(u16, self.program_headers.items.len);
const file_size = @as(u64, ptr_size) * self.base.options.symbol_count_hint;
@@ -536,28 +558,6 @@ pub fn populateMissingMetadata(self: *Elf) !void {
self.phdr_table_dirty = true;
}
- if (self.phdr_load_re_index == null) {
- self.phdr_load_re_index = @intCast(u16, self.program_headers.items.len);
- const file_size = self.base.options.program_code_size_hint;
- const p_align = self.page_size;
- const off = self.findFreeSpace(file_size, p_align);
- log.debug("found PT_LOAD RE free space 0x{x} to 0x{x}", .{ off, off + file_size });
- const entry_addr: u64 = self.entry_addr orelse if (self.base.options.target.cpu.arch == .spu_2) @as(u64, 0) else default_entry_addr;
- try self.program_headers.append(self.base.allocator, .{
- .p_type = elf.PT_LOAD,
- .p_offset = off,
- .p_filesz = file_size,
- .p_vaddr = entry_addr,
- .p_paddr = entry_addr,
- .p_memsz = file_size,
- .p_align = p_align,
- .p_flags = elf.PF_X | elf.PF_R,
- });
- try self.atom_free_lists.putNoClobber(self.base.allocator, self.phdr_load_re_index.?, .{});
- self.entry_addr = null;
- self.phdr_table_dirty = true;
- }
-
if (self.phdr_load_ro_index == null) {
self.phdr_load_ro_index = @intCast(u16, self.program_headers.items.len);
// TODO Find a hint about how much data need to be in rodata ?