delete bad linker test: bss

The purpose of this test is unclear. It checks for the existence of bss
section which is completely unnecessary since those zeroes can be
omitted from the binary.

Furthermore the code generated for __wasm_init_memory looks wrong.
Finally, the CheckObject DSL is brittle, it only checks for exact
matches of entire lines in an ad-hoc text format. Conclusion, it's a bad
test, delete it.
This commit is contained in:
Andrew Kelley 2025-01-14 18:25:40 -08:00
parent b37ad5110c
commit 7ae2f21e2b
4 changed files with 0 additions and 112 deletions

View file

@ -24,9 +24,6 @@
.wasm_basic_features = .{
.path = "wasm/basic-features",
},
.wasm_bss = .{
.path = "wasm/bss",
},
.wasm_export = .{
.path = "wasm/export",
},

View file

@ -1,91 +0,0 @@
const std = @import("std");
pub const requires_stage2 = true;
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test");
b.default_step = test_step;
add(b, test_step, .Debug, true);
add(b, test_step, .ReleaseFast, false);
add(b, test_step, .ReleaseSmall, false);
add(b, test_step, .ReleaseSafe, true);
}
fn add(b: *std.Build, test_step: *std.Build.Step, optimize_mode: std.builtin.OptimizeMode, is_safe: bool) void {
{
const lib = b.addExecutable(.{
.name = "lib",
.root_module = b.createModule(.{
.root_source_file = b.path("lib.zig"),
.target = b.resolveTargetQuery(.{ .cpu_arch = .wasm32, .os_tag = .freestanding }),
.optimize = optimize_mode,
.strip = false,
}),
});
lib.entry = .disabled;
lib.use_llvm = false;
lib.use_lld = false;
// to make sure the bss segment is emitted, we must import memory
lib.import_memory = true;
lib.link_gc_sections = false;
const check_lib = lib.checkObject();
// since we import memory, make sure it exists with the correct naming
check_lib.checkInHeaders();
check_lib.checkExact("Section import");
check_lib.checkExact("entries 1");
check_lib.checkExact("module env"); // default module name is "env"
check_lib.checkExact("name memory"); // as per linker specification
// since we are importing memory, ensure it's not exported
check_lib.checkInHeaders();
check_lib.checkNotPresent("Section export");
// validate the name of the stack pointer
check_lib.checkInHeaders();
check_lib.checkExact("Section custom");
check_lib.checkExact("type data_segment");
check_lib.checkExact("names 1");
// for safe optimization modes `undefined` is stored in data instead of bss.
if (is_safe) {
check_lib.checkExact("index 0");
check_lib.checkExact("name .data");
check_lib.checkNotPresent("name .bss");
} else {
check_lib.checkExact("index 0"); // bss section always last
check_lib.checkExact("name .bss");
}
test_step.dependOn(&check_lib.step);
}
// verify zero'd declaration is stored in bss for all optimization modes.
{
const lib = b.addExecutable(.{
.name = "lib",
.root_module = b.createModule(.{
.root_source_file = b.path("lib2.zig"),
.target = b.resolveTargetQuery(.{ .cpu_arch = .wasm32, .os_tag = .freestanding }),
.optimize = optimize_mode,
.strip = false,
}),
});
lib.entry = .disabled;
lib.use_llvm = false;
lib.use_lld = false;
// to make sure the bss segment is emitted, we must import memory
lib.import_memory = true;
lib.link_gc_sections = false;
const check_lib = lib.checkObject();
check_lib.checkInHeaders();
check_lib.checkExact("Section custom");
check_lib.checkExact("type data_segment");
check_lib.checkExact("names 1");
check_lib.checkExact("index 0");
check_lib.checkExact("name .bss");
test_step.dependOn(&check_lib.step);
}
}

View file

@ -1,9 +0,0 @@
pub var bss: u32 = undefined;
fn foo() callconv(.c) u32 {
return bss;
}
comptime {
@export(&foo, .{ .name = "foo", .visibility = .hidden });
}

View file

@ -1,9 +0,0 @@
pub var bss: u32 = 0;
fn foo() callconv(.c) u32 {
return bss;
}
comptime {
@export(&foo, .{ .name = "foo", .visibility = .hidden });
}