aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2024-10-01 04:34:32 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2024-10-03 00:57:34 +0200
commit125c043abc208842cd7e1deb188136600eb5c3ea (patch)
treecf671ac0f2761993cf50215feb87b45106812abd /src
parentb569ead29ea4459d0d363bf5a878ddb53f8f14f3 (diff)
downloadzig-125c043abc208842cd7e1deb188136600eb5c3ea.tar.gz
zig-125c043abc208842cd7e1deb188136600eb5c3ea.zip
link.Elf: Set EI_OSABI value correctly depending on target arch/OS.
Diffstat (limited to 'src')
-rw-r--r--src/link/Elf.zig23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index f610f2519d..52929aa7a6 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -2589,11 +2589,28 @@ pub fn writeElfHeader(self: *Elf) !void {
hdr_buf[index] = 1; // ELF version
index += 1;
- // OS ABI, often set to 0 regardless of target platform
+ hdr_buf[index] = @intFromEnum(@as(elf.OSABI, switch (target.cpu.arch) {
+ .amdgcn => switch (target.os.tag) {
+ .amdhsa => .AMDGPU_HSA,
+ .amdpal => .AMDGPU_PAL,
+ .mesa3d => .AMDGPU_MESA3D,
+ else => .NONE,
+ },
+ .msp430 => .STANDALONE,
+ else => switch (target.os.tag) {
+ .freebsd, .ps4 => .FREEBSD,
+ .hermit => .STANDALONE,
+ .illumos, .solaris => .SOLARIS,
+ .openbsd => .OPENBSD,
+ else => .NONE,
+ },
+ }));
+ index += 1;
+
// ABI Version, possibly used by glibc but not by static executables
// padding
- @memset(hdr_buf[index..][0..9], 0);
- index += 9;
+ @memset(hdr_buf[index..][0..8], 0);
+ index += 8;
assert(index == 16);