authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-03-17 11:40:48-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-03-17 11:41:17-07:00
log1ee7a81627f464d9ab7f763f357bbb37aed342d5
treef235d46bc52b40285644abeb054fd554fcbae3d5
parent00ed8d9c50dd2b4491c87310a8766e5f6e0900ce

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'

1 files changed, 22 insertions(+), 22 deletions(-)

src/link/Elf.zig+22-22
...@@ -511,6 +511,28 @@ pub fn populateMissingMetadata(self: *Elf) !void {...@@ -511,6 +511,28 @@ pub fn populateMissingMetadata(self: *Elf) !void {
511 };511 };
512 const ptr_size: u8 = self.ptrWidthBytes();512 const ptr_size: u8 = self.ptrWidthBytes();
513513
514 if (self.phdr_load_re_index == null) {
515 self.phdr_load_re_index = @intCast(u16, self.program_headers.items.len);
516 const file_size = self.base.options.program_code_size_hint;
517 const p_align = self.page_size;
518 const off = self.findFreeSpace(file_size, p_align);
519 log.debug("found PT_LOAD RE free space 0x{x} to 0x{x}", .{ off, off + file_size });
520 const entry_addr: u64 = self.entry_addr orelse if (self.base.options.target.cpu.arch == .spu_2) @as(u64, 0) else default_entry_addr;
521 try self.program_headers.append(self.base.allocator, .{
522 .p_type = elf.PT_LOAD,
523 .p_offset = off,
524 .p_filesz = file_size,
525 .p_vaddr = entry_addr,
526 .p_paddr = entry_addr,
527 .p_memsz = file_size,
528 .p_align = p_align,
529 .p_flags = elf.PF_X | elf.PF_R,
530 });
531 try self.atom_free_lists.putNoClobber(self.base.allocator, self.phdr_load_re_index.?, .{});
532 self.entry_addr = null;
533 self.phdr_table_dirty = true;
534 }
535
514 if (self.phdr_got_index == null) {536 if (self.phdr_got_index == null) {
515 self.phdr_got_index = @intCast(u16, self.program_headers.items.len);537 self.phdr_got_index = @intCast(u16, self.program_headers.items.len);
516 const file_size = @as(u64, ptr_size) * self.base.options.symbol_count_hint;538 const file_size = @as(u64, ptr_size) * self.base.options.symbol_count_hint;
...@@ -536,28 +558,6 @@ pub fn populateMissingMetadata(self: *Elf) !void {...@@ -536,28 +558,6 @@ pub fn populateMissingMetadata(self: *Elf) !void {
536 self.phdr_table_dirty = true;558 self.phdr_table_dirty = true;
537 }559 }
538560
539 if (self.phdr_load_re_index == null) {
540 self.phdr_load_re_index = @intCast(u16, self.program_headers.items.len);
541 const file_size = self.base.options.program_code_size_hint;
542 const p_align = self.page_size;
543 const off = self.findFreeSpace(file_size, p_align);
544 log.debug("found PT_LOAD RE free space 0x{x} to 0x{x}", .{ off, off + file_size });
545 const entry_addr: u64 = self.entry_addr orelse if (self.base.options.target.cpu.arch == .spu_2) @as(u64, 0) else default_entry_addr;
546 try self.program_headers.append(self.base.allocator, .{
547 .p_type = elf.PT_LOAD,
548 .p_offset = off,
549 .p_filesz = file_size,
550 .p_vaddr = entry_addr,
551 .p_paddr = entry_addr,
552 .p_memsz = file_size,
553 .p_align = p_align,
554 .p_flags = elf.PF_X | elf.PF_R,
555 });
556 try self.atom_free_lists.putNoClobber(self.base.allocator, self.phdr_load_re_index.?, .{});
557 self.entry_addr = null;
558 self.phdr_table_dirty = true;
559 }
560
561 if (self.phdr_load_ro_index == null) {561 if (self.phdr_load_ro_index == null) {
562 self.phdr_load_ro_index = @intCast(u16, self.program_headers.items.len);562 self.phdr_load_ro_index = @intCast(u16, self.program_headers.items.len);
563 // TODO Find a hint about how much data need to be in rodata ?563 // TODO Find a hint about how much data need to be in rodata ?