From df656c4eefa81f689d831deb17c17b08b8041627 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Sat, 7 Oct 2023 23:53:29 +0200 Subject: [PATCH] elf: test exporting symbols in exes --- test/link/elf.zig | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/test/link/elf.zig b/test/link/elf.zig index 417f181ec0..c31176bc61 100644 --- a/test/link/elf.zig +++ b/test/link/elf.zig @@ -50,6 +50,7 @@ pub fn build(b: *Build) void { elf_step.dependOn(testDsoPlt(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker })); elf_step.dependOn(testDsoUndef(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker })); elf_step.dependOn(testExportDynamic(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker })); + elf_step.dependOn(testExportSymbolsFromExe(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker })); elf_step.dependOn(testLargeAlignmentDso(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker })); elf_step.dependOn(testLargeAlignmentExe(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker })); } @@ -650,6 +651,44 @@ fn testExportDynamic(b: *Build, opts: Options) *Step { return test_step; } +fn testExportSymbolsFromExe(b: *Build, opts: Options) *Step { + const test_step = addTestStep(b, "export-symbols-from-exe", opts); + + const dso = addSharedLibrary(b, "a", opts); + addCSourceBytes(dso, + \\void expfn1(); + \\void expfn2() {} + \\ + \\void foo() { + \\ expfn1(); + \\} + , &.{"-fPIC"}); + + const exe = addExecutable(b, "main", opts); + addCSourceBytes(exe, + \\void expfn1() {} + \\void expfn2() {} + \\void foo(); + \\ + \\int main() { + \\ expfn1(); + \\ expfn2(); + \\ foo(); + \\} + , &.{}); + exe.linkLibrary(dso); + exe.linkLibC(); + + const check = exe.checkObject(); + check.checkInDynamicSymtab(); + check.checkContains("expfn2"); + check.checkInDynamicSymtab(); + check.checkContains("expfn1"); + test_step.dependOn(&check.step); + + return test_step; +} + fn testGcSections(b: *Build, opts: Options) *Step { const test_step = addTestStep(b, "gc-sections", opts);