diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2024-10-01 04:34:32 +0200 |
|---|---|---|
| committer | Alex Rønne Petersen <alex@alexrp.com> | 2024-10-03 00:57:34 +0200 |
| commit | 125c043abc208842cd7e1deb188136600eb5c3ea (patch) | |
| tree | cf671ac0f2761993cf50215feb87b45106812abd /src | |
| parent | b569ead29ea4459d0d363bf5a878ddb53f8f14f3 (diff) | |
| download | zig-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.zig | 23 |
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); |
