authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-10-07 23:53:29+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-10-16 19:33:05+02:00
logdf656c4eefa81f689d831deb17c17b08b8041627
tree5a3fee8392e790a72d05b9d18f3c0c5c7f796303
parentf2ad71991a1586c5ec335402c1c6bc424477f98f

elf: test exporting symbols in exes


1 files changed, 39 insertions(+), 0 deletions(-)

test/link/elf.zig+39
......@@ -50,6 +50,7 @@ pub fn build(b: *Build) void {
5050 elf_step.dependOn(testDsoPlt(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker }));
5151 elf_step.dependOn(testDsoUndef(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker }));
5252 elf_step.dependOn(testExportDynamic(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker }));
53 elf_step.dependOn(testExportSymbolsFromExe(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker }));
5354 elf_step.dependOn(testLargeAlignmentDso(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker }));
5455 elf_step.dependOn(testLargeAlignmentExe(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker }));
5556}
......@@ -650,6 +651,44 @@ fn testExportDynamic(b: *Build, opts: Options) *Step {
650651 return test_step;
651652}
652653
654fn testExportSymbolsFromExe(b: *Build, opts: Options) *Step {
655 const test_step = addTestStep(b, "export-symbols-from-exe", opts);
656
657 const dso = addSharedLibrary(b, "a", opts);
658 addCSourceBytes(dso,
659 \\void expfn1();
660 \\void expfn2() {}
661 \\
662 \\void foo() {
663 \\ expfn1();
664 \\}
665 , &.{"-fPIC"});
666
667 const exe = addExecutable(b, "main", opts);
668 addCSourceBytes(exe,
669 \\void expfn1() {}
670 \\void expfn2() {}
671 \\void foo();
672 \\
673 \\int main() {
674 \\ expfn1();
675 \\ expfn2();
676 \\ foo();
677 \\}
678 , &.{});
679 exe.linkLibrary(dso);
680 exe.linkLibC();
681
682 const check = exe.checkObject();
683 check.checkInDynamicSymtab();
684 check.checkContains("expfn2");
685 check.checkInDynamicSymtab();
686 check.checkContains("expfn1");
687 test_step.dependOn(&check.step);
688
689 return test_step;
690}
691
653692fn testGcSections(b: *Build, opts: Options) *Step {
654693 const test_step = addTestStep(b, "gc-sections", opts);
655694