diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2024-01-18 17:55:49 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2024-01-24 12:34:41 +0100 |
| commit | 76dc305d4e71a9a4c9de92e6dde40a53eac1e328 (patch) | |
| tree | bb9a922590552d367d7a9dbc763355c344ca700f /src/codegen.zig | |
| parent | 82e92fe5f605a0ef8fa53e8434458bf18deadb5f (diff) | |
| download | zig-76dc305d4e71a9a4c9de92e6dde40a53eac1e328.tar.gz zig-76dc305d4e71a9a4c9de92e6dde40a53eac1e328.zip | |
codegen: re-enable MachO support in genDeclRef
Diffstat (limited to 'src/codegen.zig')
| -rw-r--r-- | src/codegen.zig | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index f9263c2a69..83d0215cfa 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -984,22 +984,24 @@ fn genDeclRef( } return GenResult.mcv(.{ .load_symbol = sym.esym_index }); } else if (lf.cast(link.File.MachO)) |macho_file| { - _ = macho_file; if (is_extern) { - // TODO make this part of getGlobalSymbol - // const name = zcu.intern_pool.stringToSlice(decl.name); - // const sym_name = try std.fmt.allocPrint(gpa, "_{s}", .{name}); - // defer gpa.free(sym_name); - // const global_index = try macho_file.addUndefined(sym_name, .{ .add_got = true }); - // return GenResult.mcv(.{ .load_got = link.File.MachO.global_symbol_bit | global_index }); + const name = zcu.intern_pool.stringToSlice(decl.name); + const sym_name = try std.fmt.allocPrint(gpa, "_{s}", .{name}); + defer gpa.free(sym_name); + const lib_name = if (decl.getOwnedVariable(zcu)) |ov| + zcu.intern_pool.stringToSliceUnwrap(ov.lib_name) + else + null; + const sym_index = try macho_file.getGlobalSymbol(sym_name, lib_name); + macho_file.getSymbol(sym_index).flags.needs_got = true; + return GenResult.mcv(.{ .load_symbol = sym_index }); + } + const sym_index = try macho_file.getZigObject().?.getOrCreateMetadataForDecl(macho_file, decl_index); + const sym = macho_file.getSymbol(sym_index); + if (is_threadlocal) { + return GenResult.mcv(.{ .load_tlv = sym.nlist_idx }); } - // const atom_index = try macho_file.getOrCreateAtomForDecl(decl_index); - // const sym_index = macho_file.getAtom(atom_index).getSymbolIndex().?; - // if (is_threadlocal) { - // return GenResult.mcv(.{ .load_tlv = sym_index }); - // } - // return GenResult.mcv(.{ .load_got = sym_index }); - @panic("TODO genDeclRef"); + return GenResult.mcv(.{ .load_symbol = sym.nlist_idx }); } else if (lf.cast(link.File.Coff)) |coff_file| { if (is_extern) { const name = zcu.intern_pool.stringToSlice(decl.name); |
