aboutsummaryrefslogtreecommitdiff
path: root/src/link/Elf.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-09-13 12:33:51 +0200
committerJakub Konka <kubkon@jakubkonka.com>2023-09-13 12:33:51 +0200
commit0d924d2da67a34046ea5e78e0a65fd9ef2601c8a (patch)
treeb3457c9c60e0f2aa054352ced599bfa1b443ff07 /src/link/Elf.zig
parent31f363d51f73a263d6acd89775ab788fe213d9f0 (diff)
downloadzig-0d924d2da67a34046ea5e78e0a65fd9ef2601c8a.tar.gz
zig-0d924d2da67a34046ea5e78e0a65fd9ef2601c8a.zip
elf: look for entry point globally if not set by incremental compiler
Diffstat (limited to 'src/link/Elf.zig')
-rw-r--r--src/link/Elf.zig13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index bb8828ad04..16b7706f7a 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -1124,6 +1124,19 @@ pub fn flushModule(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node
}
try self.writeObjects();
+ // Look for entry address in objects if not set by the incremental compiler.
+ if (self.entry_addr == null) {
+ const entry: ?[]const u8 = entry: {
+ if (self.base.options.entry) |entry| break :entry entry;
+ if (!self.isDynLib()) break :entry "_start";
+ break :entry null;
+ };
+ self.entry_addr = if (entry) |name| entry_addr: {
+ const global_index = self.globalByName(name) orelse break :entry_addr null;
+ break :entry_addr self.symbol(global_index).value;
+ } else null;
+ }
+
// Generate and emit the symbol table.
try self.updateSymtabSize();
try self.writeSymtab();