| ... | ... | @@ -21,6 +21,7 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step { |
| 21 | 21 | macho_step.dependOn(testMhExecuteHeader(b, .{ .target = default_target })); |
| 22 | 22 | macho_step.dependOn(testSectionBoundarySymbols(b, .{ .target = default_target })); |
| 23 | 23 | macho_step.dependOn(testSegmentBoundarySymbols(b, .{ .target = default_target })); |
| 24 | macho_step.dependOn(testTlsLargeTbss(b, .{ .target = default_target })); |
| 24 | 25 | macho_step.dependOn(testUndefinedFlag(b, .{ .target = default_target })); |
| 25 | 26 | macho_step.dependOn(testWeakBind(b, .{ .target = x86_64_target })); |
| 26 | 27 | |
| ... | ... | @@ -637,6 +638,27 @@ fn testSegmentBoundarySymbols(b: *Build, opts: Options) *Step { |
| 637 | 638 | return test_step; |
| 638 | 639 | } |
| 639 | 640 | |
| 641 | fn testTlsLargeTbss(b: *Build, opts: Options) *Step { |
| 642 | const test_step = addTestStep(b, "macho-tls-large-tbss", opts); |
| 643 | |
| 644 | const exe = addExecutable(b, opts, .{ .name = "main", .c_source_bytes = |
| 645 | \\#include <stdio.h> |
| 646 | \\_Thread_local int x[0x8000]; |
| 647 | \\_Thread_local int y[0x8000]; |
| 648 | \\int main() { |
| 649 | \\ x[0] = 3; |
| 650 | \\ x[0x7fff] = 5; |
| 651 | \\ printf("%d %d %d %d %d %d\n", x[0], x[1], x[0x7fff], y[0], y[1], y[0x7fff]); |
| 652 | \\} |
| 653 | }); |
| 654 | |
| 655 | const run = addRunArtifact(exe); |
| 656 | run.expectStdOutEqual("3 0 5 0 0 0\n"); |
| 657 | test_step.dependOn(&run.step); |
| 658 | |
| 659 | return test_step; |
| 660 | } |
| 661 | |
| 640 | 662 | fn testUndefinedFlag(b: *Build, opts: Options) *Step { |
| 641 | 663 | const test_step = addTestStep(b, "macho-undefined-flag", opts); |
| 642 | 664 | |