authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-02-21 22:40:03+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-02-21 22:40:03+01:00
log55dadc3d85299a61877b4130716f67c92be5f537
tree5c1dbac9d4562e5035600d60d42b09405ec43003
parent7fd4576596a95d68300035cd59c3723bdadae353

test/link/elf: test static linking C aarch64-musl


1 files changed, 94 insertions(+), 85 deletions(-)

test/link/elf.zig+94-85
...@@ -10,124 +10,133 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step {...@@ -10,124 +10,133 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step {
10 .cpu_arch = .x86_64, // TODO relax this once ELF linker is able to handle other archs10 .cpu_arch = .x86_64, // TODO relax this once ELF linker is able to handle other archs
11 .os_tag = .linux,11 .os_tag = .linux,
12 });12 });
13 const musl_target = b.resolveTargetQuery(.{13 const x86_64_musl = b.resolveTargetQuery(.{
14 .cpu_arch = .x86_64,14 .cpu_arch = .x86_64,
15 .os_tag = .linux,15 .os_tag = .linux,
16 .abi = .musl,16 .abi = .musl,
17 });17 });
18 const glibc_target = b.resolveTargetQuery(.{18 const x86_64_gnu = b.resolveTargetQuery(.{
19 .cpu_arch = .x86_64,19 .cpu_arch = .x86_64,
20 .os_tag = .linux,20 .os_tag = .linux,
21 .abi = .gnu,21 .abi = .gnu,
22 });22 });
23 const aarch64_musl = b.resolveTargetQuery(.{
24 .cpu_arch = .aarch64,
25 .os_tag = .linux,
26 .abi = .musl,
27 });
2328
29 // x86_64 tests
24 // Exercise linker in -r mode30 // Exercise linker in -r mode
25 elf_step.dependOn(testEmitRelocatable(b, .{ .use_llvm = false, .target = musl_target }));31 elf_step.dependOn(testEmitRelocatable(b, .{ .use_llvm = false, .target = x86_64_musl }));
26 elf_step.dependOn(testEmitRelocatable(b, .{ .target = musl_target }));32 elf_step.dependOn(testEmitRelocatable(b, .{ .target = x86_64_musl }));
27 elf_step.dependOn(testRelocatableArchive(b, .{ .target = musl_target }));33 elf_step.dependOn(testRelocatableArchive(b, .{ .target = x86_64_musl }));
28 elf_step.dependOn(testRelocatableEhFrame(b, .{ .target = musl_target }));34 elf_step.dependOn(testRelocatableEhFrame(b, .{ .target = x86_64_musl }));
29 elf_step.dependOn(testRelocatableNoEhFrame(b, .{ .target = musl_target }));35 elf_step.dependOn(testRelocatableNoEhFrame(b, .{ .target = x86_64_musl }));
3036
31 // Exercise linker in ar mode37 // Exercise linker in ar mode
32 elf_step.dependOn(testEmitStaticLib(b, .{ .target = musl_target }));38 elf_step.dependOn(testEmitStaticLib(b, .{ .target = x86_64_musl }));
33 elf_step.dependOn(testEmitStaticLibZig(b, .{ .use_llvm = false, .target = musl_target }));39 elf_step.dependOn(testEmitStaticLibZig(b, .{ .use_llvm = false, .target = x86_64_musl }));
3440
35 // Exercise linker with self-hosted backend (no LLVM)41 // Exercise linker with self-hosted backend (no LLVM)
36 elf_step.dependOn(testGcSectionsZig(b, .{ .use_llvm = false, .target = default_target }));42 elf_step.dependOn(testGcSectionsZig(b, .{ .use_llvm = false, .target = default_target }));
37 elf_step.dependOn(testLinkingObj(b, .{ .use_llvm = false, .target = default_target }));43 elf_step.dependOn(testLinkingObj(b, .{ .use_llvm = false, .target = default_target }));
38 elf_step.dependOn(testLinkingStaticLib(b, .{ .use_llvm = false, .target = default_target }));44 elf_step.dependOn(testLinkingStaticLib(b, .{ .use_llvm = false, .target = default_target }));
39 elf_step.dependOn(testLinkingZig(b, .{ .use_llvm = false, .target = default_target }));45 elf_step.dependOn(testLinkingZig(b, .{ .use_llvm = false, .target = default_target }));
40 elf_step.dependOn(testImportingDataDynamic(b, .{ .use_llvm = false, .target = glibc_target }));46 elf_step.dependOn(testImportingDataDynamic(b, .{ .use_llvm = false, .target = x86_64_gnu }));
41 elf_step.dependOn(testImportingDataStatic(b, .{ .use_llvm = false, .target = musl_target }));47 elf_step.dependOn(testImportingDataStatic(b, .{ .use_llvm = false, .target = x86_64_musl }));
4248
43 // Exercise linker with LLVM backend49 // Exercise linker with LLVM backend
44 // musl tests50 // musl tests
45 elf_step.dependOn(testAbsSymbols(b, .{ .target = musl_target }));51 elf_step.dependOn(testAbsSymbols(b, .{ .target = x86_64_musl }));
46 elf_step.dependOn(testCommonSymbols(b, .{ .target = musl_target }));52 elf_step.dependOn(testCommonSymbols(b, .{ .target = x86_64_musl }));
47 elf_step.dependOn(testCommonSymbolsInArchive(b, .{ .target = musl_target }));53 elf_step.dependOn(testCommonSymbolsInArchive(b, .{ .target = x86_64_musl }));
48 elf_step.dependOn(testEmptyObject(b, .{ .target = musl_target }));54 elf_step.dependOn(testEmptyObject(b, .{ .target = x86_64_musl }));
49 elf_step.dependOn(testEntryPoint(b, .{ .target = musl_target }));55 elf_step.dependOn(testEntryPoint(b, .{ .target = x86_64_musl }));
50 elf_step.dependOn(testGcSections(b, .{ .target = musl_target }));56 elf_step.dependOn(testGcSections(b, .{ .target = x86_64_musl }));
51 elf_step.dependOn(testImageBase(b, .{ .target = musl_target }));57 elf_step.dependOn(testImageBase(b, .{ .target = x86_64_musl }));
52 elf_step.dependOn(testInitArrayOrder(b, .{ .target = musl_target }));58 elf_step.dependOn(testInitArrayOrder(b, .{ .target = x86_64_musl }));
53 elf_step.dependOn(testLargeAlignmentExe(b, .{ .target = musl_target }));59 elf_step.dependOn(testLargeAlignmentExe(b, .{ .target = x86_64_musl }));
54 // https://github.com/ziglang/zig/issues/1744960 // https://github.com/ziglang/zig/issues/17449
55 // elf_step.dependOn(testLargeBss(b, .{ .target = musl_target }));61 // elf_step.dependOn(testLargeBss(b, .{ .target = x86_64_musl }));
56 elf_step.dependOn(testLinkingC(b, .{ .target = musl_target }));62 elf_step.dependOn(testLinkingC(b, .{ .target = x86_64_musl }));
57 elf_step.dependOn(testLinkingCpp(b, .{ .target = musl_target }));63 elf_step.dependOn(testLinkingCpp(b, .{ .target = x86_64_musl }));
58 elf_step.dependOn(testLinkingZig(b, .{ .target = musl_target }));64 elf_step.dependOn(testLinkingZig(b, .{ .target = x86_64_musl }));
59 // https://github.com/ziglang/zig/issues/1745165 // https://github.com/ziglang/zig/issues/17451
60 // elf_step.dependOn(testNoEhFrameHdr(b, .{ .target = musl_target }));66 // elf_step.dependOn(testNoEhFrameHdr(b, .{ .target = x86_64_musl }));
61 elf_step.dependOn(testTlsStatic(b, .{ .target = musl_target }));67 elf_step.dependOn(testTlsStatic(b, .{ .target = x86_64_musl }));
62 elf_step.dependOn(testStrip(b, .{ .target = musl_target }));68 elf_step.dependOn(testStrip(b, .{ .target = x86_64_musl }));
6369
64 // glibc tests70 // glibc tests
65 elf_step.dependOn(testAsNeeded(b, .{ .target = glibc_target }));71 elf_step.dependOn(testAsNeeded(b, .{ .target = x86_64_gnu }));
66 // https://github.com/ziglang/zig/issues/1743072 // https://github.com/ziglang/zig/issues/17430
67 // elf_step.dependOn(testCanonicalPlt(b, .{ .target = glibc_target }));73 // elf_step.dependOn(testCanonicalPlt(b, .{ .target = x86_64_gnu }));
68 elf_step.dependOn(testCopyrel(b, .{ .target = glibc_target }));74 elf_step.dependOn(testCopyrel(b, .{ .target = x86_64_gnu }));
69 // https://github.com/ziglang/zig/issues/1743075 // https://github.com/ziglang/zig/issues/17430
70 // elf_step.dependOn(testCopyrelAlias(b, .{ .target = glibc_target }));76 // elf_step.dependOn(testCopyrelAlias(b, .{ .target = x86_64_gnu }));
71 // https://github.com/ziglang/zig/issues/1743077 // https://github.com/ziglang/zig/issues/17430
72 // elf_step.dependOn(testCopyrelAlignment(b, .{ .target = glibc_target }));78 // elf_step.dependOn(testCopyrelAlignment(b, .{ .target = x86_64_gnu }));
73 elf_step.dependOn(testDsoPlt(b, .{ .target = glibc_target }));79 elf_step.dependOn(testDsoPlt(b, .{ .target = x86_64_gnu }));
74 elf_step.dependOn(testDsoUndef(b, .{ .target = glibc_target }));80 elf_step.dependOn(testDsoUndef(b, .{ .target = x86_64_gnu }));
75 elf_step.dependOn(testExportDynamic(b, .{ .target = glibc_target }));81 elf_step.dependOn(testExportDynamic(b, .{ .target = x86_64_gnu }));
76 elf_step.dependOn(testExportSymbolsFromExe(b, .{ .target = glibc_target }));82 elf_step.dependOn(testExportSymbolsFromExe(b, .{ .target = x86_64_gnu }));
77 // https://github.com/ziglang/zig/issues/1743083 // https://github.com/ziglang/zig/issues/17430
78 // elf_step.dependOn(testFuncAddress(b, .{ .target = glibc_target }));84 // elf_step.dependOn(testFuncAddress(b, .{ .target = x86_64_gnu }));
79 elf_step.dependOn(testHiddenWeakUndef(b, .{ .target = glibc_target }));85 elf_step.dependOn(testHiddenWeakUndef(b, .{ .target = x86_64_gnu }));
80 elf_step.dependOn(testIFuncAlias(b, .{ .target = glibc_target }));86 elf_step.dependOn(testIFuncAlias(b, .{ .target = x86_64_gnu }));
81 // https://github.com/ziglang/zig/issues/1743087 // https://github.com/ziglang/zig/issues/17430
82 // elf_step.dependOn(testIFuncDlopen(b, .{ .target = glibc_target }));88 // elf_step.dependOn(testIFuncDlopen(b, .{ .target = x86_64_gnu }));
83 elf_step.dependOn(testIFuncDso(b, .{ .target = glibc_target }));89 elf_step.dependOn(testIFuncDso(b, .{ .target = x86_64_gnu }));
84 elf_step.dependOn(testIFuncDynamic(b, .{ .target = glibc_target }));90 elf_step.dependOn(testIFuncDynamic(b, .{ .target = x86_64_gnu }));
85 elf_step.dependOn(testIFuncExport(b, .{ .target = glibc_target }));91 elf_step.dependOn(testIFuncExport(b, .{ .target = x86_64_gnu }));
86 elf_step.dependOn(testIFuncFuncPtr(b, .{ .target = glibc_target }));92 elf_step.dependOn(testIFuncFuncPtr(b, .{ .target = x86_64_gnu }));
87 elf_step.dependOn(testIFuncNoPlt(b, .{ .target = glibc_target }));93 elf_step.dependOn(testIFuncNoPlt(b, .{ .target = x86_64_gnu }));
88 // https://github.com/ziglang/zig/issues/17430 ??94 // https://github.com/ziglang/zig/issues/17430 ??
89 // elf_step.dependOn(testIFuncStatic(b, .{ .target = glibc_target }));95 // elf_step.dependOn(testIFuncStatic(b, .{ .target = x86_64_gnu }));
90 // elf_step.dependOn(testIFuncStaticPie(b, .{ .target = glibc_target }));96 // elf_step.dependOn(testIFuncStaticPie(b, .{ .target = x86_64_gnu }));
91 elf_step.dependOn(testInitArrayOrder(b, .{ .target = glibc_target }));97 elf_step.dependOn(testInitArrayOrder(b, .{ .target = x86_64_gnu }));
92 elf_step.dependOn(testLargeAlignmentDso(b, .{ .target = glibc_target }));98 elf_step.dependOn(testLargeAlignmentDso(b, .{ .target = x86_64_gnu }));
93 elf_step.dependOn(testLargeAlignmentExe(b, .{ .target = glibc_target }));99 elf_step.dependOn(testLargeAlignmentExe(b, .{ .target = x86_64_gnu }));
94 elf_step.dependOn(testLargeBss(b, .{ .target = glibc_target }));100 elf_step.dependOn(testLargeBss(b, .{ .target = x86_64_gnu }));
95 elf_step.dependOn(testLinkOrder(b, .{ .target = glibc_target }));101 elf_step.dependOn(testLinkOrder(b, .{ .target = x86_64_gnu }));
96 elf_step.dependOn(testLdScript(b, .{ .target = glibc_target }));102 elf_step.dependOn(testLdScript(b, .{ .target = x86_64_gnu }));
97 elf_step.dependOn(testLdScriptPathError(b, .{ .target = glibc_target }));103 elf_step.dependOn(testLdScriptPathError(b, .{ .target = x86_64_gnu }));
98 elf_step.dependOn(testLdScriptAllowUndefinedVersion(b, .{ .target = glibc_target, .use_lld = true }));104 elf_step.dependOn(testLdScriptAllowUndefinedVersion(b, .{ .target = x86_64_gnu, .use_lld = true }));
99 elf_step.dependOn(testLdScriptDisallowUndefinedVersion(b, .{ .target = glibc_target, .use_lld = true }));105 elf_step.dependOn(testLdScriptDisallowUndefinedVersion(b, .{ .target = x86_64_gnu, .use_lld = true }));
100 elf_step.dependOn(testMismatchedCpuArchitectureError(b, .{ .target = glibc_target }));106 elf_step.dependOn(testMismatchedCpuArchitectureError(b, .{ .target = x86_64_gnu }));
101 // https://github.com/ziglang/zig/issues/17451107 // https://github.com/ziglang/zig/issues/17451
102 // elf_step.dependOn(testNoEhFrameHdr(b, .{ .target = glibc_target }));108 // elf_step.dependOn(testNoEhFrameHdr(b, .{ .target = x86_64_gnu }));
103 elf_step.dependOn(testPie(b, .{ .target = glibc_target }));109 elf_step.dependOn(testPie(b, .{ .target = x86_64_gnu }));
104 elf_step.dependOn(testPltGot(b, .{ .target = glibc_target }));110 elf_step.dependOn(testPltGot(b, .{ .target = x86_64_gnu }));
105 elf_step.dependOn(testPreinitArray(b, .{ .target = glibc_target }));111 elf_step.dependOn(testPreinitArray(b, .{ .target = x86_64_gnu }));
106 elf_step.dependOn(testSharedAbsSymbol(b, .{ .target = glibc_target }));112 elf_step.dependOn(testSharedAbsSymbol(b, .{ .target = x86_64_gnu }));
107 elf_step.dependOn(testTlsDfStaticTls(b, .{ .target = glibc_target }));113 elf_step.dependOn(testTlsDfStaticTls(b, .{ .target = x86_64_gnu }));
108 elf_step.dependOn(testTlsDso(b, .{ .target = glibc_target }));114 elf_step.dependOn(testTlsDso(b, .{ .target = x86_64_gnu }));
109 elf_step.dependOn(testTlsGd(b, .{ .target = glibc_target }));115 elf_step.dependOn(testTlsGd(b, .{ .target = x86_64_gnu }));
110 elf_step.dependOn(testTlsGdNoPlt(b, .{ .target = glibc_target }));116 elf_step.dependOn(testTlsGdNoPlt(b, .{ .target = x86_64_gnu }));
111 elf_step.dependOn(testTlsGdToIe(b, .{ .target = glibc_target }));117 elf_step.dependOn(testTlsGdToIe(b, .{ .target = x86_64_gnu }));
112 elf_step.dependOn(testTlsIe(b, .{ .target = glibc_target }));118 elf_step.dependOn(testTlsIe(b, .{ .target = x86_64_gnu }));
113 elf_step.dependOn(testTlsLargeAlignment(b, .{ .target = glibc_target }));119 elf_step.dependOn(testTlsLargeAlignment(b, .{ .target = x86_64_gnu }));
114 elf_step.dependOn(testTlsLargeTbss(b, .{ .target = glibc_target }));120 elf_step.dependOn(testTlsLargeTbss(b, .{ .target = x86_64_gnu }));
115 elf_step.dependOn(testTlsLargeStaticImage(b, .{ .target = glibc_target }));121 elf_step.dependOn(testTlsLargeStaticImage(b, .{ .target = x86_64_gnu }));
116 elf_step.dependOn(testTlsLd(b, .{ .target = glibc_target }));122 elf_step.dependOn(testTlsLd(b, .{ .target = x86_64_gnu }));
117 elf_step.dependOn(testTlsLdDso(b, .{ .target = glibc_target }));123 elf_step.dependOn(testTlsLdDso(b, .{ .target = x86_64_gnu }));
118 elf_step.dependOn(testTlsLdNoPlt(b, .{ .target = glibc_target }));124 elf_step.dependOn(testTlsLdNoPlt(b, .{ .target = x86_64_gnu }));
119 // https://github.com/ziglang/zig/issues/17430125 // https://github.com/ziglang/zig/issues/17430
120 // elf_step.dependOn(testTlsNoPic(b, .{ .target = glibc_target }));126 // elf_step.dependOn(testTlsNoPic(b, .{ .target = x86_64_gnu }));
121 elf_step.dependOn(testTlsOffsetAlignment(b, .{ .target = glibc_target }));127 elf_step.dependOn(testTlsOffsetAlignment(b, .{ .target = x86_64_gnu }));
122 elf_step.dependOn(testTlsPic(b, .{ .target = glibc_target }));128 elf_step.dependOn(testTlsPic(b, .{ .target = x86_64_gnu }));
123 elf_step.dependOn(testTlsSmallAlignment(b, .{ .target = glibc_target }));129 elf_step.dependOn(testTlsSmallAlignment(b, .{ .target = x86_64_gnu }));
124 elf_step.dependOn(testUnknownFileTypeError(b, .{ .target = glibc_target }));130 elf_step.dependOn(testUnknownFileTypeError(b, .{ .target = x86_64_gnu }));
125 elf_step.dependOn(testUnresolvedError(b, .{ .target = glibc_target }));131 elf_step.dependOn(testUnresolvedError(b, .{ .target = x86_64_gnu }));
126 elf_step.dependOn(testWeakExports(b, .{ .target = glibc_target }));132 elf_step.dependOn(testWeakExports(b, .{ .target = x86_64_gnu }));
127 elf_step.dependOn(testWeakUndefsDso(b, .{ .target = glibc_target }));133 elf_step.dependOn(testWeakUndefsDso(b, .{ .target = x86_64_gnu }));
128 elf_step.dependOn(testZNow(b, .{ .target = glibc_target }));134 elf_step.dependOn(testZNow(b, .{ .target = x86_64_gnu }));
129 elf_step.dependOn(testZStackSize(b, .{ .target = glibc_target }));135 elf_step.dependOn(testZStackSize(b, .{ .target = x86_64_gnu }));
130 elf_step.dependOn(testZText(b, .{ .target = glibc_target }));136 elf_step.dependOn(testZText(b, .{ .target = x86_64_gnu }));
137
138 // aarch64 tests
139 elf_step.dependOn(testLinkingC(b, .{ .target = aarch64_musl }));
131140
132 return elf_step;141 return elf_step;
133}142}