From 471d20d0726ac9480cacaf77205da6d40c232ffc Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Thu, 8 Mar 2012 08:29:39 +0100 Subject: [PATCH] Bug 727959 - Don't error out when missing symbol for PLT relocations is weak. r=nfroyd --- mozglue/linker/CustomElf.cpp | 9 ++++++--- mozglue/linker/CustomElf.h | 6 ++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/mozglue/linker/CustomElf.cpp b/mozglue/linker/CustomElf.cpp index 949e441b6693..10b8f228b359 100644 --- a/mozglue/linker/CustomElf.cpp +++ b/mozglue/linker/CustomElf.cpp @@ -679,9 +679,12 @@ CustomElf::RelocateJumps() symptr = GetSymbolPtrInDeps(strtab.GetStringAt(sym.st_name)); if (symptr == NULL) { - log("%s: Error: relocation to NULL @0x%08" PRIxAddr " for symbol \"%s\"", - GetPath(), rel->r_offset, strtab.GetStringAt(sym.st_name)); - return false; + log("%s: %s: relocation to NULL @0x%08" PRIxAddr " for symbol \"%s\"", + GetPath(), + (ELF_ST_BIND(sym.st_info) == STB_WEAK) ? "Warning" : "Error", + rel->r_offset, strtab.GetStringAt(sym.st_name)); + if (ELF_ST_BIND(sym.st_info) != STB_WEAK) + return false; } /* Apply relocation */ *(void **) ptr = symptr; diff --git a/mozglue/linker/CustomElf.h b/mozglue/linker/CustomElf.h index 86906328d831..0efe96ac5f8e 100644 --- a/mozglue/linker/CustomElf.h +++ b/mozglue/linker/CustomElf.h @@ -26,12 +26,18 @@ #define ELFCLASS ELFCLASS64 #define ELF_R_TYPE ELF64_R_TYPE #define ELF_R_SYM ELF64_R_SYM +#ifndef ELF_ST_BIND +#define ELF_ST_BIND ELF64_ST_BIND +#endif #define PRIxAddr "lx" #else #define Elf_(type) Elf32_ ## type #define ELFCLASS ELFCLASS32 #define ELF_R_TYPE ELF32_R_TYPE #define ELF_R_SYM ELF32_R_SYM +#ifndef ELF_ST_BIND +#define ELF_ST_BIND ELF32_ST_BIND +#endif #define PRIxAddr "x" #endif