| ... | ... | @@ -740,3 +740,26 @@ pub fn allocateDeclIndexes(self: *Plan9, decl: *Module.Decl) !void { |
| 740 | 740 | _ = self; |
| 741 | 741 | _ = decl; |
| 742 | 742 | } |
| 743 | pub fn getDeclVAddr(self: *Plan9, decl: *const Module.Decl) u64 { |
| 744 | if (decl.ty.zigTypeTag() == .Fn) { |
| 745 | var start = self.bases.text; |
| 746 | var it_file = self.fn_decl_table.iterator(); |
| 747 | while (it_file.next()) |fentry| { |
| 748 | var symidx_and_submap = fentry.value_ptr; |
| 749 | var submap_it = symidx_and_submap.functions.iterator(); |
| 750 | while (submap_it.next()) |entry| { |
| 751 | if (entry.key_ptr.* == decl) return start; |
| 752 | start += entry.value_ptr.code.len; |
| 753 | } |
| 754 | } |
| 755 | unreachable; |
| 756 | } else { |
| 757 | var start = self.bases.data + self.got_len * if (!self.sixtyfour_bit) @as(u32, 4) else 8; |
| 758 | var it = self.data_decl_table.iterator(); |
| 759 | while (it.next()) |kv| { |
| 760 | if (decl == kv.key_ptr.*) return start; |
| 761 | start += kv.value_ptr.len; |
| 762 | } |
| 763 | unreachable; |
| 764 | } |
| 765 | } |