diff --git a/src/3rdparty/chromium/base/debug/elf_reader.cc b/src/3rdparty/chromium/base/debug/elf_reader.cc index 472d0ebd7..eaf6aeadf 100644 --- a/src/3rdparty/chromium/base/debug/elf_reader.cc +++ b/src/3rdparty/chromium/base/debug/elf_reader.cc @@ -149,7 +149,12 @@ absl::optional ReadElfLibraryName(const void* elf_mapped_base) { strtab_addr = static_cast(dynamic_iter->d_un.d_ptr) + reinterpret_cast(relocation_offset); #else - strtab_addr = reinterpret_cast(dynamic_iter->d_un.d_ptr); + if (dynamic_iter->d_un.d_ptr < relocation_offset) { + strtab_addr = static_cast(dynamic_iter->d_un.d_ptr) + + reinterpret_cast(relocation_offset); + } else { + strtab_addr = reinterpret_cast(dynamic_iter->d_un.d_ptr); + } #endif } else if (dynamic_iter->d_tag == DT_SONAME) { soname_strtab_offset = dynamic_iter->d_un.d_val; diff --git a/src/3rdparty/chromium/base/debug/stack_trace.cc b/src/3rdparty/chromium/base/debug/stack_trace.cc index bd4763b44..106775ae5 100644 --- a/src/3rdparty/chromium/base/debug/stack_trace.cc +++ b/src/3rdparty/chromium/base/debug/stack_trace.cc @@ -146,7 +146,7 @@ void* LinkStackFrames(void* fpp, void* parent_fp) { #if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS) uintptr_t GetStackEnd() { -#if defined(OS_ANDROID) +#if defined(OS_ANDROID) || (defined(OS_LINUX) && !defined(__GLIBC__)) // Bionic reads proc/maps on every call to pthread_getattr_np() when called // from the main thread. So we need to cache end of stack in that case to get // acceptable performance. @@ -252,7 +252,9 @@ void StackTrace::Print() const { } void StackTrace::OutputToStream(std::ostream* os) const { +#if defined(__GLIBC__) && !defined(_AIX) OutputToStreamWithPrefix(os, nullptr); +#endif } std::string StackTrace::ToString() const { @@ -260,7 +262,7 @@ std::string StackTrace::ToString() const { } std::string StackTrace::ToStringWithPrefix(const char* prefix_string) const { std::stringstream stream; -#if !defined(__UCLIBC__) && !defined(_AIX) +#if defined(__GLIBC__) && !defined(_AIX) OutputToStreamWithPrefix(&stream, prefix_string); #endif return stream.str(); diff --git a/src/3rdparty/chromium/base/debug/stack_trace_posix.cc b/src/3rdparty/chromium/base/debug/stack_trace_posix.cc index 8833b20ef..362fad5f3 100644 --- a/src/3rdparty/chromium/base/debug/stack_trace_posix.cc +++ b/src/3rdparty/chromium/base/debug/stack_trace_posix.cc @@ -27,7 +27,7 @@ #if !defined(USE_SYMBOLIZE) #include #endif -#if !defined(__UCLIBC__) && !defined(_AIX) +#if defined(__GLIBC__) && !defined(_AIX) #include #endif @@ -89,7 +89,7 @@ void DemangleSymbols(std::string* text) { // Note: code in this function is NOT async-signal safe (std::string uses // malloc internally). -#if !defined(__UCLIBC__) && !defined(_AIX) +#if defined(__GLIBC__) && !defined(_AIX) std::string::size_type search_from = 0; while (search_from < text->size()) { // Look for the start of a mangled symbol, from search_from. @@ -124,7 +124,7 @@ void DemangleSymbols(std::string* text) { search_from = mangled_start + 2; } } -#endif // !defined(__UCLIBC__) && !defined(_AIX) +#endif // !defined(__GLIBC__) && !defined(_AIX) } #endif // !defined(USE_SYMBOLIZE) @@ -136,7 +136,7 @@ class BacktraceOutputHandler { virtual ~BacktraceOutputHandler() = default; }; -#if !defined(__UCLIBC__) && !defined(_AIX) +#if defined(__GLIBC__) && !defined(_AIX) void OutputPointer(void* pointer, BacktraceOutputHandler* handler) { // This should be more than enough to store a 64-bit number in hex: // 16 hex digits + 1 for null-terminator. @@ -219,7 +219,7 @@ void ProcessBacktrace(void* const* trace, } #endif // defined(USE_SYMBOLIZE) } -#endif // !defined(__UCLIBC__) && !defined(_AIX) +#endif // !defined(__GLIBC__) && !defined(_AIX) void PrintToStderr(const char* output) { // NOTE: This code MUST be async-signal safe (it's used by in-process @@ -839,7 +839,7 @@ size_t CollectStackTrace(void** trace, size_t count) { // If we do not have unwind tables, then try tracing using frame pointers. return base::debug::TraceStackFramePointers(const_cast(trace), count, 0); -#elif !defined(__UCLIBC__) && !defined(_AIX) +#elif !defined(__GLIBC__) && !defined(_AIX) // Though the backtrace API man page does not list any possible negative // return values, we take no chance. return base::saturated_cast(backtrace(trace, count)); @@ -852,13 +852,13 @@ void StackTrace::PrintWithPrefix(const char* prefix_string) const { // NOTE: This code MUST be async-signal safe (it's used by in-process // stack dumping signal handler). NO malloc or stdio is allowed here. -#if !defined(__UCLIBC__) && !defined(_AIX) +#if defined(__GLIBC__) && !defined(_AIX) PrintBacktraceOutputHandler handler; ProcessBacktrace(trace_, count_, prefix_string, &handler); #endif } -#if !defined(__UCLIBC__) && !defined(_AIX) +#if defined(__GLIBC__) && !defined(_AIX) void StackTrace::OutputToStreamWithPrefix(std::ostream* os, const char* prefix_string) const { StreamBacktraceOutputHandler handler(os); diff --git a/src/3rdparty/chromium/base/native_library_unittest.cc b/src/3rdparty/chromium/base/native_library_unittest.cc index 796451440..a4d0186fd 100644 --- a/src/3rdparty/chromium/base/native_library_unittest.cc +++ b/src/3rdparty/chromium/base/native_library_unittest.cc @@ -121,6 +121,7 @@ TEST(NativeLibraryTest, LoadLibrary) { #if !defined(OS_ANDROID) && !defined(THREAD_SANITIZER) && \ !defined(MEMORY_SANITIZER) +#if defined(RTLD_DEEPBIND) // Verifies that the |prefer_own_symbols| option satisfies its guarantee that // a loaded library will always prefer local symbol resolution before // considering global symbols. @@ -156,6 +157,7 @@ TEST(NativeLibraryTest, LoadLibraryPreferOwnSymbols) { EXPECT_EQ(2, NativeLibraryTestIncrement()); EXPECT_EQ(3, NativeLibraryTestIncrement()); } +#endif // defined(RTLD_DEEPBIND) #endif // !defined(OS_ANDROID) diff --git a/src/3rdparty/chromium/mojo/public/c/system/thunks.cc b/src/3rdparty/chromium/mojo/public/c/system/thunks.cc index d7dc6e3d8..5cb40a21b 100644 --- a/src/3rdparty/chromium/mojo/public/c/system/thunks.cc +++ b/src/3rdparty/chromium/mojo/public/c/system/thunks.cc @@ -100,7 +100,8 @@ class CoreLibraryInitializer { base::ScopedAllowBlocking allow_blocking; base::NativeLibraryOptions library_options; #if !defined(ADDRESS_SANITIZER) && !defined(THREAD_SANITIZER) && \ - !defined(MEMORY_SANITIZER) && !defined(LEAK_SANITIZER) + !defined(MEMORY_SANITIZER) && !defined(LEAK_SANITIZER) && \ + defined(RTLD_DEEPBIND) // Sanitizer builds cannnot support RTLD_DEEPBIND, but they also disable // allocator shims, so it's unnecessary there. library_options.prefer_own_symbols = true; diff --git a/src/3rdparty/chromium/v8/src/codegen/external-reference-table.cc b/src/3rdparty/chromium/v8/src/codegen/external-reference-table.cc index 0a22fbdd7..651f5139c 100644 --- a/src/3rdparty/chromium/v8/src/codegen/external-reference-table.cc +++ b/src/3rdparty/chromium/v8/src/codegen/external-reference-table.cc @@ -12,7 +12,9 @@ #if defined(DEBUG) && defined(V8_OS_LINUX) && !defined(V8_OS_ANDROID) #define SYMBOLIZE_FUNCTION +#if defined(__GLIBC__) #include +#endif #include @@ -103,7 +105,7 @@ void ExternalReferenceTable::Init(Isolate* isolate) { } const char* ExternalReferenceTable::ResolveSymbol(void* address) { -#ifdef SYMBOLIZE_FUNCTION +#if defined(SYMBOLIZE_FUNCTION) && defined(__GLIBC__) char** names = backtrace_symbols(&address, 1); const char* name = names[0]; // The array of names is malloc'ed. However, each name string is static