authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-04-20 23:25:53+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-04-20 23:36:42+02:00
log66253e5b5152c6fa59e285badd13250e05de47bb
treea7776a586d25344b5c85d0aa390161a869dd96eb
parentbc0d84be0bff3751f2adb996f417866fbc8eee2c

link/elf: populate current Zig version in .comment; test


2 files changed, 35 insertions(+), 1 deletions(-)

src/link/Elf.zig+1-1
...@@ -3329,7 +3329,7 @@ fn checkDuplicates(self: *Elf) !void {...@@ -3329,7 +3329,7 @@ fn checkDuplicates(self: *Elf) !void {
3329pub fn addCommentString(self: *Elf) !void {3329pub fn addCommentString(self: *Elf) !void {
3330 const msec_index = try self.getOrCreateMergeSection(".comment", elf.SHF_MERGE | elf.SHF_STRINGS, elf.SHT_PROGBITS);3330 const msec_index = try self.getOrCreateMergeSection(".comment", elf.SHF_MERGE | elf.SHF_STRINGS, elf.SHT_PROGBITS);
3331 const msec = self.mergeSection(msec_index);3331 const msec = self.mergeSection(msec_index);
3332 const res = try msec.insertZ(self.base.comp.gpa, "zig version x.x.x"); // TODO get actual version3332 const res = try msec.insertZ(self.base.comp.gpa, "zig " ++ builtin.zig_version_string);
3333 if (res.found_existing) return;3333 if (res.found_existing) return;
3334 const msub_index = try self.addMergeSubsection();3334 const msub_index = try self.addMergeSubsection();
3335 const msub = self.mergeSubsection(msub_index);3335 const msub = self.mergeSubsection(msub_index);
test/link/elf.zig+34
...@@ -61,6 +61,7 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step {...@@ -61,6 +61,7 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step {
61 elf_step.dependOn(testAbsSymbols(b, .{ .target = musl_target }));61 elf_step.dependOn(testAbsSymbols(b, .{ .target = musl_target }));
62 elf_step.dependOn(testCommonSymbols(b, .{ .target = musl_target }));62 elf_step.dependOn(testCommonSymbols(b, .{ .target = musl_target }));
63 elf_step.dependOn(testCommonSymbolsInArchive(b, .{ .target = musl_target }));63 elf_step.dependOn(testCommonSymbolsInArchive(b, .{ .target = musl_target }));
64 elf_step.dependOn(testCommentString(b, .{ .target = musl_target }));
64 elf_step.dependOn(testEmptyObject(b, .{ .target = musl_target }));65 elf_step.dependOn(testEmptyObject(b, .{ .target = musl_target }));
65 elf_step.dependOn(testEntryPoint(b, .{ .target = musl_target }));66 elf_step.dependOn(testEntryPoint(b, .{ .target = musl_target }));
66 elf_step.dependOn(testGcSections(b, .{ .target = musl_target }));67 elf_step.dependOn(testGcSections(b, .{ .target = musl_target }));
...@@ -83,6 +84,7 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step {...@@ -83,6 +84,7 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step {
83 elf_step.dependOn(testAsNeeded(b, .{ .target = gnu_target }));84 elf_step.dependOn(testAsNeeded(b, .{ .target = gnu_target }));
84 // https://github.com/ziglang/zig/issues/1743085 // https://github.com/ziglang/zig/issues/17430
85 // elf_step.dependOn(testCanonicalPlt(b, .{ .target = gnu_target }));86 // elf_step.dependOn(testCanonicalPlt(b, .{ .target = gnu_target }));
87 elf_step.dependOn(testCommentString(b, .{ .target = gnu_target }));
86 elf_step.dependOn(testCopyrel(b, .{ .target = gnu_target }));88 elf_step.dependOn(testCopyrel(b, .{ .target = gnu_target }));
87 // https://github.com/ziglang/zig/issues/1743089 // https://github.com/ziglang/zig/issues/17430
88 // elf_step.dependOn(testCopyrelAlias(b, .{ .target = gnu_target }));90 // elf_step.dependOn(testCopyrelAlias(b, .{ .target = gnu_target }));
...@@ -154,6 +156,8 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step {...@@ -154,6 +156,8 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step {
154 elf_step.dependOn(testThunks(b, .{ .target = aarch64_musl }));156 elf_step.dependOn(testThunks(b, .{ .target = aarch64_musl }));
155157
156 // x86_64 self-hosted backend158 // x86_64 self-hosted backend
159 elf_step.dependOn(testCommentString(b, .{ .use_llvm = false, .target = default_target }));
160 elf_step.dependOn(testCommentStringStaticLib(b, .{ .use_llvm = false, .target = default_target }));
157 elf_step.dependOn(testEmitRelocatable(b, .{ .use_llvm = false, .target = x86_64_musl }));161 elf_step.dependOn(testEmitRelocatable(b, .{ .use_llvm = false, .target = x86_64_musl }));
158 elf_step.dependOn(testEmitStaticLibZig(b, .{ .use_llvm = false, .target = x86_64_musl }));162 elf_step.dependOn(testEmitStaticLibZig(b, .{ .use_llvm = false, .target = x86_64_musl }));
159 elf_step.dependOn(testGcSectionsZig(b, .{ .use_llvm = false, .target = default_target }));163 elf_step.dependOn(testGcSectionsZig(b, .{ .use_llvm = false, .target = default_target }));
...@@ -364,6 +368,36 @@ fn testCanonicalPlt(b: *Build, opts: Options) *Step {...@@ -364,6 +368,36 @@ fn testCanonicalPlt(b: *Build, opts: Options) *Step {
364 return test_step;368 return test_step;
365}369}
366370
371fn testCommentString(b: *Build, opts: Options) *Step {
372 const test_step = addTestStep(b, "comment-string", opts);
373
374 const exe = addExecutable(b, opts, .{ .name = "main", .zig_source_bytes =
375 \\pub fn main() void {}
376 });
377
378 const check = exe.checkObject();
379 check.dumpSection(".comment");
380 check.checkContains("zig");
381 test_step.dependOn(&check.step);
382
383 return test_step;
384}
385
386fn testCommentStringStaticLib(b: *Build, opts: Options) *Step {
387 const test_step = addTestStep(b, "comment-string-static-lib", opts);
388
389 const lib = addStaticLibrary(b, opts, .{ .name = "lib", .zig_source_bytes =
390 \\export fn foo() void {}
391 });
392
393 const check = lib.checkObject();
394 check.dumpSection(".comment");
395 check.checkContains("zig");
396 test_step.dependOn(&check.step);
397
398 return test_step;
399}
400
367fn testCommonSymbols(b: *Build, opts: Options) *Step {401fn testCommonSymbols(b: *Build, opts: Options) *Step {
368 const test_step = addTestStep(b, "common-symbols", opts);402 const test_step = addTestStep(b, "common-symbols", opts);
369403