Commit 45bb4f955c

Alex Rønne Petersen <alex@alexrp.com>
2025-01-18 14:32:55
test: Add a standalone test for omitting CFI directives.
1 parent 8a78d87
Changed files (3)
test
standalone
test/standalone/omit_cfi/build.zig
@@ -0,0 +1,67 @@
+const std = @import("std");
+
+pub fn build(b: *std.Build) void {
+    inline for (.{
+        .aarch64,
+        .aarch64_be,
+        .hexagon,
+        .loongarch64,
+        .mips,
+        .mipsel,
+        .mips64,
+        .mips64el,
+        .powerpc,
+        .powerpcle,
+        .powerpc64,
+        .powerpc64le,
+        .riscv32,
+        .riscv64,
+        .s390x,
+        .sparc64,
+        .x86,
+        .x86_64,
+    }) |arch| {
+        const target = b.resolveTargetQuery(.{
+            .cpu_arch = arch,
+            .os_tag = .linux,
+        });
+
+        const omit_dbg = b.addExecutable(.{
+            .name = b.fmt("{s}-linux-omit-dbg", .{@tagName(arch)}),
+            .root_module = b.createModule(.{
+                .root_source_file = b.path("main.zig"),
+                .target = target,
+                .optimize = .Debug,
+                // We are mainly concerned with CFI directives in our non-libc startup code and syscall
+                // code, so make it explicit that we don't want libc.
+                .link_libc = false,
+                .strip = true,
+            }),
+        });
+
+        const omit_uwt = b.addExecutable(.{
+            .name = b.fmt("{s}-linux-omit-uwt", .{@tagName(arch)}),
+            .root_module = b.createModule(.{
+                .root_source_file = b.path("main.zig"),
+                .target = target,
+                .optimize = .Debug,
+                .link_libc = false,
+                .unwind_tables = .none,
+            }),
+        });
+
+        const omit_both = b.addExecutable(.{
+            .name = b.fmt("{s}-linux-omit-both", .{@tagName(arch)}),
+            .root_module = b.createModule(.{
+                .root_source_file = b.path("main.zig"),
+                .target = target,
+                .optimize = .Debug,
+                .link_libc = false,
+                .strip = true,
+                .unwind_tables = .none,
+            }),
+        });
+
+        inline for (.{ omit_dbg, omit_uwt, omit_both }) |step| b.installArtifact(step);
+    }
+}
test/standalone/omit_cfi/main.zig
@@ -0,0 +1,1 @@
+pub fn main() void {}
test/standalone/build.zig.zon
@@ -183,6 +183,9 @@
         .empty_global_error_set = .{
             .path = "empty_global_error_set",
         },
+        .omit_cfi = .{
+            .path = "omit_cfi",
+        },
     },
     .paths = .{
         "build.zig",