| author | |
| committer | |
| log | a748ca3725e606b6c4be1b3101203ff1e4136924 |
| tree | 514391bff765f9fae122630007974fa19aa3a452 |
| parent | c940735c4d091d77594deb15226bbd67cf36cdf2 |
3 files changed, 11 insertions(+), 6 deletions(-)
src/link/Elf.zig+6| ... | ... | @@ -4877,6 +4877,12 @@ fn updateSymtabSize(self: *Elf) !void { |
| 4877 | 4877 | sizes.nglobals += object.output_symtab_size.nglobals; |
| 4878 | 4878 | } |
| 4879 | 4879 | |
| 4880 | for (self.shared_objects.items) |index| { | |
| 4881 | const shared_object = self.file(index).?.shared_object; | |
| 4882 | shared_object.updateSymtabSize(self); | |
| 4883 | sizes.nglobals += shared_object.output_symtab_size.nglobals; | |
| 4884 | } | |
| 4885 | ||
| 4880 | 4886 | if (self.got_section_index) |_| { |
| 4881 | 4887 | self.got.updateSymtabSize(self); |
| 4882 | 4888 | sizes.nlocals += self.got.output_symtab_size.nlocals; |
src/link/Elf/Atom.zig+1-2| ... | ... | @@ -479,9 +479,8 @@ fn scanReloc( |
| 479 | 479 | try self.reportNoPicError(symbol, rel, elf_file) |
| 480 | 480 | else |
| 481 | 481 | try self.reportPicError(symbol, rel, elf_file); |
| 482 | } else { | |
| 483 | symbol.flags.needs_copy_rel = true; | |
| 484 | 482 | } |
| 483 | symbol.flags.needs_copy_rel = true; | |
| 485 | 484 | }, |
| 486 | 485 | |
| 487 | 486 | .dyn_copyrel => { |
src/link/Elf/Symbol.zig+4-4| ... | ... | @@ -51,10 +51,10 @@ pub fn isIFunc(symbol: Symbol, elf_file: *Elf) bool { |
| 51 | 51 | } |
| 52 | 52 | |
| 53 | 53 | pub fn @"type"(symbol: Symbol, elf_file: *Elf) u4 { |
| 54 | const s_sym = symbol.elfSym(elf_file); | |
| 54 | const esym = symbol.elfSym(elf_file); | |
| 55 | 55 | const file_ptr = symbol.file(elf_file).?; |
| 56 | if (s_sym.st_type() == elf.STT_GNU_IFUNC and file_ptr == .shared_object) return elf.STT_FUNC; | |
| 57 | return s_sym.st_type(); | |
| 56 | if (esym.st_type() == elf.STT_GNU_IFUNC and file_ptr == .shared_object) return elf.STT_FUNC; | |
| 57 | return esym.st_type(); | |
| 58 | 58 | } |
| 59 | 59 | |
| 60 | 60 | pub fn name(symbol: Symbol, elf_file: *Elf) [:0]const u8 { |
| ... | ... | @@ -111,7 +111,7 @@ pub fn gotAddress(symbol: Symbol, elf_file: *Elf) u64 { |
| 111 | 111 | } |
| 112 | 112 | |
| 113 | 113 | pub fn pltGotAddress(symbol: Symbol, elf_file: *Elf) u64 { |
| 114 | if (!(symbol.flags.has_plt and symbol.flags.has_got and !symbol.flags.is_canonical)) return 0; | |
| 114 | if (!(symbol.flags.has_plt and symbol.flags.has_got)) return 0; | |
| 115 | 115 | const extras = symbol.extra(elf_file).?; |
| 116 | 116 | const shdr = elf_file.shdrs.items[elf_file.plt_got_section_index.?]; |
| 117 | 117 | return shdr.sh_addr + extras.plt_got * 16; |