Commit f6bf3353b1
Changed files (1)
test
link
test/link/elf.zig
@@ -23,6 +23,7 @@ pub fn testAll(b: *Build) *Step {
// Exercise linker in -r mode
elf_step.dependOn(testEmitRelocatable(b, .{ .use_llvm = false, .target = musl_target }));
elf_step.dependOn(testEmitRelocatable(b, .{ .target = musl_target }));
+ elf_step.dependOn(testRelocatableArchive(b, .{ .target = musl_target }));
elf_step.dependOn(testRelocatableEhFrame(b, .{ .target = musl_target }));
// Exercise linker in ar mode
@@ -2141,6 +2142,56 @@ fn testPreinitArray(b: *Build, opts: Options) *Step {
return test_step;
}
+fn testRelocatableArchive(b: *Build, opts: Options) *Step {
+ const test_step = addTestStep(b, "relocatable-archive", opts);
+
+ const obj1 = addObject(b, "obj1", opts);
+ addCSourceBytes(obj1,
+ \\void bar();
+ \\void foo() {
+ \\ bar();
+ \\}
+ , &.{});
+
+ const obj2 = addObject(b, "obj2", opts);
+ addCSourceBytes(obj2,
+ \\void bar() {}
+ , &.{});
+
+ const obj3 = addObject(b, "obj3", opts);
+ addCSourceBytes(obj3,
+ \\void baz();
+ , &.{});
+
+ const obj4 = addObject(b, "obj4", opts);
+ addCSourceBytes(obj4,
+ \\void foo();
+ \\int main() {
+ \\ foo();
+ \\}
+ , &.{});
+
+ const lib = addStaticLibrary(b, "lib", opts);
+ lib.addObject(obj1);
+ lib.addObject(obj2);
+ lib.addObject(obj3);
+
+ const obj5 = addObject(b, "obj5", opts);
+ obj5.addObject(obj4);
+ obj5.linkLibrary(lib);
+
+ const check = obj5.checkObject();
+ check.checkInSymtab();
+ check.checkContains("foo");
+ check.checkInSymtab();
+ check.checkContains("bar");
+ check.checkInSymtab();
+ check.checkNotPresent("baz");
+ test_step.dependOn(&check.step);
+
+ return test_step;
+}
+
fn testRelocatableEhFrame(b: *Build, opts: Options) *Step {
const test_step = addTestStep(b, "relocatable-eh-frame", opts);