Add a load of ABI compat workarounds for older libstdc++ versions
This commit is contained in:
parent
b302f0067a
commit
d1786070c4
@ -99,6 +99,7 @@ class SM:
|
||||
self.compiler.AddToListVar('CXXFLAGS', '-Wno-implicit-exception-spec-mismatch')
|
||||
self.compiler.AddToListVar('CDEFINES', 'HAVE_STDINT_H')
|
||||
self.compiler.AddToListVar('CDEFINES', 'GNUC')
|
||||
self.compiler.AddToListVar('CDEFINES', '_GLIBCXX_USE_CXX11_ABI=0')
|
||||
if self.vendor == 'gcc':
|
||||
self.compiler.AddToListVar('CFLAGS', '-mfpmath=sse')
|
||||
elif isinstance(cxx, Cpp.MSVC):
|
||||
|
@ -30,7 +30,7 @@ fi
|
||||
|
||||
cd build
|
||||
|
||||
../src/configure --enable-m32
|
||||
../src/configure --enable-m32 CXXFLAGS="-g -O2 -D_GLIBCXX_USE_CXX11_ABI=0"
|
||||
|
||||
make src/tools/linux/dump_syms/dump_syms
|
||||
make src/client/linux/libbreakpad_client.a
|
||||
|
@ -54,6 +54,36 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
// Taken from https://hg.mozilla.org/mozilla-central/file/3eb7623b5e63b37823d5e9c562d56e586604c823/build/unix/stdc%2B%2Bcompat/stdc%2B%2Bcompat.cpp
|
||||
extern "C" void __attribute__((weak)) __cxa_throw_bad_array_new_length() {
|
||||
abort();
|
||||
}
|
||||
|
||||
namespace std {
|
||||
/* We shouldn't be throwing exceptions at all, but it sadly turns out
|
||||
we call STL (inline) functions that do. */
|
||||
void __attribute__((weak)) __throw_out_of_range_fmt(char const* fmt, ...) {
|
||||
va_list ap;
|
||||
char buf[1024]; // That should be big enough.
|
||||
|
||||
va_start(ap, fmt);
|
||||
vsnprintf(buf, sizeof(buf), fmt, ap);
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
va_end(ap);
|
||||
|
||||
__throw_range_error(buf);
|
||||
}
|
||||
} // namespace std
|
||||
|
||||
// Updated versions of the SM ones for C++14
|
||||
void operator delete(void *ptr, size_t sz) {
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
void operator delete[](void *ptr, size_t sz) {
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
#elif defined _WINDOWS
|
||||
#define _STDINT // ~.~
|
||||
#include "client/windows/handler/exception_handler.h"
|
||||
@ -71,7 +101,6 @@ public:
|
||||
|
||||
#include <sstream>
|
||||
#include <streambuf>
|
||||
#include <random>
|
||||
|
||||
Accelerator g_accelerator;
|
||||
SMEXT_LINK(&g_accelerator);
|
||||
@ -390,11 +419,9 @@ class UploadThread: public IThread
|
||||
if (!serverId[0]) {
|
||||
serverIdFile = fopen(path, "w");
|
||||
if (serverIdFile) {
|
||||
std::random_device rd;
|
||||
std::uniform_int_distribution<int> dist(0, 255);
|
||||
g_pSM->Format(serverId, sizeof(serverId), "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
||||
dist(rd), dist(rd), dist(rd), dist(rd), dist(rd), dist(rd), 0x40 | (dist(rd) & 0x0F), dist(rd),
|
||||
0x80 | (dist(rd) & 0x3F), dist(rd), dist(rd), dist(rd), dist(rd), dist(rd), dist(rd), dist(rd));
|
||||
rand() % 255, rand() % 255, rand() % 255, rand() % 255, rand() % 255, rand() % 255, 0x40 | ((rand() % 255) & 0x0F), rand() % 255,
|
||||
0x80 | ((rand() % 255) & 0x3F), rand() % 255, rand() % 255, rand() % 255, rand() % 255, rand() % 255, rand() % 255, rand() % 255);
|
||||
fputs(serverId, serverIdFile);
|
||||
fclose(serverIdFile);
|
||||
}
|
||||
|
@ -0,0 +1,28 @@
|
||||
From dbfb9811ef8d9f4f2b19f50c0534c865ab3698c9 Mon Sep 17 00:00:00 2001
|
||||
From: patches <patches@localhost>
|
||||
Date: Sun, 28 Apr 2019 18:45:57 +0000
|
||||
Subject: [PATCH 3/3] Avoid using _ZNSsC1ERKSsjRKSaIcE GLIBCXX symbol due to
|
||||
version compat issues
|
||||
|
||||
---
|
||||
src/common/dwarf/elf_reader.cc | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/common/dwarf/elf_reader.cc b/src/common/dwarf/elf_reader.cc
|
||||
index 4135a51a..bfaaeefe 100644
|
||||
--- a/src/common/dwarf/elf_reader.cc
|
||||
+++ b/src/common/dwarf/elf_reader.cc
|
||||
@@ -1202,8 +1202,8 @@ const char *ElfReader::GetSectionInfoByName(const string §ion_name,
|
||||
|
||||
bool ElfReader::SectionNamesMatch(const string &name, const string &sh_name) {
|
||||
if ((name.find(".debug_", 0) == 0) && (sh_name.find(".zdebug_", 0) == 0)) {
|
||||
- const string name_suffix(name, strlen(".debug_"));
|
||||
- const string sh_name_suffix(sh_name, strlen(".zdebug_"));
|
||||
+ const string name_suffix(&name.c_str()[strlen(".debug_")]);
|
||||
+ const string sh_name_suffix(&sh_name.c_str()[strlen(".zdebug_")]);
|
||||
return name_suffix == sh_name_suffix;
|
||||
}
|
||||
return name == sh_name;
|
||||
--
|
||||
2.17.2
|
||||
|
Loading…
Reference in New Issue
Block a user