aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKoakuma <koachan@protonmail.com>2022-04-14 21:54:07 +0700
committerKoakuma <koachan@protonmail.com>2022-04-14 22:18:06 +0700
commita6ce2fc3dce018964f73cf88f127ec43bf901b6e (patch)
treef7a2e80898929691b5551040800859c982050189 /src
parent43e69be196a808c66d2c9673e7293debec01ad5d (diff)
downloadzig-a6ce2fc3dce018964f73cf88f127ec43bf901b6e.tar.gz
zig-a6ce2fc3dce018964f73cf88f127ec43bf901b6e.zip
linker: ELF: Add page sizes for ppc64le and sparcv9
Diffstat (limited to 'src')
-rw-r--r--src/link/Elf.zig11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index 9e1ed0cf54..bc46c6371c 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -65,7 +65,7 @@ phdr_load_rw_index: ?u16 = null,
phdr_shdr_table: std.AutoHashMapUnmanaged(u16, u16) = .{},
entry_addr: ?u64 = null,
-page_size: u16,
+page_size: u32,
shstrtab: std.ArrayListUnmanaged(u8) = std.ArrayListUnmanaged(u8){},
shstrtab_index: ?u16 = null,
@@ -304,7 +304,12 @@ pub fn createEmpty(gpa: Allocator, options: link.Options) !*Elf {
};
const self = try gpa.create(Elf);
errdefer gpa.destroy(self);
- const page_size: u16 = 0x1000; // TODO ppc64le requires 64KB
+
+ const page_size: u32 = switch (options.target.cpu.arch) {
+ .powerpc64le => 0x10000,
+ .sparcv9 => 0x2000,
+ else => 0x1000,
+ };
var dwarf: ?Dwarf = if (!options.strip and options.module != null)
Dwarf.init(gpa, .elf, options.target)
@@ -472,7 +477,7 @@ pub fn allocatedSize(self: *Elf, start: u64) u64 {
return min_pos - start;
}
-pub fn findFreeSpace(self: *Elf, object_size: u64, min_alignment: u16) u64 {
+pub fn findFreeSpace(self: *Elf, object_size: u64, min_alignment: u32) u64 {
var start: u64 = 0;
while (self.detectAllocCollision(start, object_size)) |item_end| {
start = mem.alignForwardGeneric(u64, item_end, min_alignment);