Commit 8fe636dafd

Andrew Kelley <andrew@ziglang.org>
2020-02-17 22:49:30
fix ABI mismatch of ZigTarget in stage2 glue code
1 parent 9b02cab
Changed files (1)
src-self-hosted
src-self-hosted/stage2.zig
@@ -1034,19 +1034,23 @@ const Stage2GLibCVersion = extern struct {
 
 // ABI warning
 export fn stage2_detect_dynamic_linker(in_target: *const Stage2Target, out_ptr: *[*:0]u8, out_len: *usize) Error {
+    const in_arch = in_target.arch - 1; // skip over ZigLLVM_UnknownArch
+    const in_sub_arch = in_target.sub_arch - 1; // skip over ZigLLVM_NoSubArch
+    const in_os = in_target.os;
+    const in_abi = in_target.abi - 1; // skip over ZigLLVM_UnknownEnvironment
     const target: Target = if (in_target.is_native) .Native else .{
         .Cross = .{
-            .arch = switch (enumInt(@TagType(Target.Arch), in_target.arch)) {
-                .arm => .{ .arm = enumInt(Target.Arch.Arm32, in_target.sub_arch) },
-                .armeb => .{ .armeb = enumInt(Target.Arch.Arm32, in_target.sub_arch) },
-                .thumb => .{ .thumb = enumInt(Target.Arch.Arm32, in_target.sub_arch) },
-                .thumbeb => .{ .thumbeb = enumInt(Target.Arch.Arm32, in_target.sub_arch) },
+            .arch = switch (enumInt(@TagType(Target.Arch), in_arch)) {
+                .arm => .{ .arm = enumInt(Target.Arch.Arm32, in_sub_arch) },
+                .armeb => .{ .armeb = enumInt(Target.Arch.Arm32, in_sub_arch) },
+                .thumb => .{ .thumb = enumInt(Target.Arch.Arm32, in_sub_arch) },
+                .thumbeb => .{ .thumbeb = enumInt(Target.Arch.Arm32, in_sub_arch) },
 
-                .aarch64 => .{ .aarch64 = enumInt(Target.Arch.Arm64, in_target.sub_arch) },
-                .aarch64_be => .{ .aarch64_be = enumInt(Target.Arch.Arm64, in_target.sub_arch) },
-                .aarch64_32 => .{ .aarch64_32 = enumInt(Target.Arch.Arm64, in_target.sub_arch) },
+                .aarch64 => .{ .aarch64 = enumInt(Target.Arch.Arm64, in_sub_arch) },
+                .aarch64_be => .{ .aarch64_be = enumInt(Target.Arch.Arm64, in_sub_arch) },
+                .aarch64_32 => .{ .aarch64_32 = enumInt(Target.Arch.Arm64, in_sub_arch) },
 
-                .kalimba => .{ .kalimba = enumInt(Target.Arch.Kalimba, in_target.sub_arch) },
+                .kalimba => .{ .kalimba = enumInt(Target.Arch.Kalimba, in_sub_arch) },
 
                 .arc => .arc,
                 .avr => .avr,
@@ -1091,8 +1095,8 @@ export fn stage2_detect_dynamic_linker(in_target: *const Stage2Target, out_ptr:
                 .renderscript32 => .renderscript32,
                 .renderscript64 => .renderscript64,
             },
-            .os = enumInt(Target.Os, in_target.os),
-            .abi = enumInt(Target.Abi, in_target.abi),
+            .os = enumInt(Target.Os, in_os),
+            .abi = enumInt(Target.Abi, in_abi),
             .cpu_features = in_target.cpu_features.cpu_features,
         },
     };