aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-10-25 23:25:56 +0200
committerGitHub <noreply@github.com>2023-10-25 23:25:56 +0200
commitcc394431ae6eb69e7abd677c268a8ab7299f8aeb (patch)
treed5aa705cdc7d701b53f32a8c2acc099c2dbd90c5 /src/codegen.zig
parent10ea7accf76d4ad59222ea5ff3585d6cc7cfe3b0 (diff)
parented00afbc4c1eec6d599ac277e364b4a1ed11fe5c (diff)
downloadzig-cc394431ae6eb69e7abd677c268a8ab7299f8aeb.tar.gz
zig-cc394431ae6eb69e7abd677c268a8ab7299f8aeb.zip
Merge pull request #17699 from ziglang/elf-better-alloc
elf: allocated PHDR table always immediately succeeding the EHDR
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 72084c3741..051c2b33b3 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -850,7 +850,7 @@ fn genDeclRef(
bin_file: *link.File,
src_loc: Module.SrcLoc,
tv: TypedValue,
- decl_index: Module.Decl.Index,
+ ptr_decl_index: Module.Decl.Index,
) CodeGenError!GenResult {
const mod = bin_file.options.module.?;
log.debug("genDeclRef: ty = {}, val = {}", .{ tv.ty.fmt(mod), tv.val.fmtValue(tv.ty, mod) });
@@ -859,6 +859,12 @@ fn genDeclRef(
const ptr_bits = target.ptrBitWidth();
const ptr_bytes: u64 = @divExact(ptr_bits, 8);
+ const ptr_decl = mod.declPtr(ptr_decl_index);
+ const decl_index = switch (mod.intern_pool.indexToKey(try ptr_decl.internValue(mod))) {
+ .func => |func| func.owner_decl,
+ .extern_func => |extern_func| extern_func.decl,
+ else => ptr_decl_index,
+ };
const decl = mod.declPtr(decl_index);
if (!decl.ty.isFnOrHasRuntimeBitsIgnoreComptime(mod)) {