aboutsummaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
authorKenta Iwasaki <kenta@lithdew.net>2022-01-01 06:32:37 +0900
committerAndrew Kelley <andrew@ziglang.org>2022-01-19 11:22:10 -0700
commit5ae3e4e9bd5216c7cc2305c8996ed413c89c59e7 (patch)
treefc0a9852022f89d33d249540527296e7477e7f19 /src/main.zig
parentbeb7495e19d23b4814e16772888e80688ad10e47 (diff)
downloadzig-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.zig13
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,