From c10c12ce84bcc08d00d37be3f19a8fc23ac535ba Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 26 Jun 2024 08:16:27 +0200 Subject: Adding upstream version 127.0.2. Signed-off-by: Daniel Baumann --- build/unix/elfhack/elfhack.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'build/unix/elfhack/elfhack.cpp') diff --git a/build/unix/elfhack/elfhack.cpp b/build/unix/elfhack/elfhack.cpp index 719d4ac8f5..baedadedf0 100644 --- a/build/unix/elfhack/elfhack.cpp +++ b/build/unix/elfhack/elfhack.cpp @@ -1116,7 +1116,7 @@ int do_relocation_section(Elf* elf, unsigned int rel_type, // can actually use it) if (elf->getSegmentByType(PT_GNU_RELRO)) { ElfSection* gnu_versym = dyn->getSectionForType(DT_VERSYM); - auto lookup = [&symtab, &gnu_versym](const char* symbol) { + auto ensure_symbol = [&symtab, &gnu_versym](const char* symbol) { Elf_SymValue* sym_value = symtab->lookup(symbol, STT(FUNC)); if (!sym_value) { symtab->syms.emplace_back(); @@ -1138,11 +1138,13 @@ int do_relocation_section(Elf* elf, unsigned int rel_type, gnu_versym->grow(gnu_versym->getSize() + gnu_versym->getEntSize()); } } - return sym_value; }; - - Elf_SymValue* mprotect = lookup("mprotect"); - Elf_SymValue* sysconf = lookup("sysconf"); + // ensure_symbol may trigger a symbol table vector resize, so only lookup + // the symbols after we're done touching the symbol table. + ensure_symbol("mprotect"); + ensure_symbol("sysconf"); + Elf_SymValue* mprotect = symtab->lookup("mprotect", STT(FUNC)); + Elf_SymValue* sysconf = symtab->lookup("sysconf", STT(FUNC)); // Add relocations for the mprotect and sysconf symbols. auto add_relocation_to = [&new_rels, &symtab, rel_type2]( -- cgit v1.2.3