diff options
| author | Kenta Iwasaki <kenta@lithdew.net> | 2022-01-01 06:32:37 +0900 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-01-19 11:22:10 -0700 |
| commit | 5ae3e4e9bd5216c7cc2305c8996ed413c89c59e7 (patch) | |
| tree | fc0a9852022f89d33d249540527296e7477e7f19 /src/main.zig | |
| parent | beb7495e19d23b4814e16772888e80688ad10e47 (diff) | |
| download | zig-5ae3e4e9bd5216c7cc2305c8996ed413c89c59e7.tar.gz zig-5ae3e4e9bd5216c7cc2305c8996ed413c89c59e7.zip | |
lld: allow for entrypoint symbol name to be set
This commit enables for the entrypoint symbol to be set when linking ELF
or WebAssembly modules with lld using the Zig compiler.
Diffstat (limited to 'src/main.zig')
| -rw-r--r-- | src/main.zig | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/main.zig b/src/main.zig index c924b14b69..3561315989 100644 --- a/src/main.zig +++ b/src/main.zig @@ -400,6 +400,7 @@ const usage_build_generic = \\ --dynamic-linker [path] Set the dynamic interpreter path (usually ld.so) \\ --sysroot [path] Set the system root directory (usually /) \\ --version [ver] Dynamic library semver + \\ --entry [name] Set the entrypoint symbol name \\ -fsoname[=name] Override the default SONAME value \\ -fno-soname Disable emitting a SONAME \\ -fLLD Force using LLD as the linker @@ -647,6 +648,7 @@ fn buildOutputType( var linker_optimization: ?u8 = null; var test_evented_io = false; var test_no_exec = false; + var entry: ?[]const u8 = null; var stack_size_override: ?u64 = null; var image_base_override: ?u64 = null; var use_llvm: ?bool = null; @@ -847,6 +849,10 @@ fn buildOutputType( if (i + 1 >= args.len) fatal("expected parameter after {s}", .{arg}); i += 1; optimize_mode_string = args[i]; + } else if (mem.eql(u8, arg, "--entry")) { + if (i + 1 >= args.len) fatal("expected parameter after {s}", .{arg}); + i += 1; + entry = args[i]; } else if (mem.eql(u8, arg, "--stack")) { if (i + 1 >= args.len) fatal("expected parameter after {s}", .{arg}); i += 1; @@ -1624,6 +1630,12 @@ fn buildOutputType( fatal("unable to parse '{s}': {s}", .{ arg, @errorName(err) }); }; have_version = true; + } else if (mem.eql(u8, arg, "-e") or mem.eql(u8, arg, "--entry")) { + i += 1; + if (i >= linker_args.items.len) { + fatal("expected linker arg after '{s}'", .{arg}); + } + entry = linker_args.items[i]; } else if (mem.eql(u8, arg, "--stack")) { i += 1; if (i >= linker_args.items.len) { @@ -2500,6 +2512,7 @@ fn buildOutputType( .minor_subsystem_version = minor_subsystem_version, .link_eh_frame_hdr = link_eh_frame_hdr, .link_emit_relocs = link_emit_relocs, + .entry = entry, .stack_size_override = stack_size_override, .image_base_override = image_base_override, .strip = strip, |
