Kaydet (Commit) 6a312a4a authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Prepare external/firebird for sanitizers

...so at least Clang -fsanitize=function on Linux works now.  The patch needs to
stop errors about undefined sanitizer symbols in DSOs (UNDEF_PLATFORM,
EXE_LINK_OPTIONS), and make resolution of RTTI symbols consistent in a process,
by exporting them from the various version map files and adding RTLD_GLOBAL to
dlopen.

Change-Id: I75779e55529b62a96a8943e3dee9119647aa91a7
Reviewed-on: https://gerrit.libreoffice.org/46947Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarStephan Bergmann <sbergman@redhat.com>
üst 420a65c1
......@@ -46,4 +46,12 @@ $(eval $(call gb_UnpackedTarball_add_patches,firebird,\
))
endif
ifeq ($(COM_IS_CLANG),TRUE)
ifneq ($(filter -fsanitize=%,$(CC)),)
$(eval $(call gb_UnpackedTarball_add_patches,firebird, \
external/firebird/sanitizer.patch \
))
endif
endif
# vim: set noet sw=4 ts=4:
--- builds/posix/fbintl.vers
+++ builds/posix/fbintl.vers
@@ -29,3 +29,4 @@
LD_lookup_texttype
LD_setup_attributes
LD_version
+_ZTI*
--- builds/posix/fbplugin.vers
+++ builds/posix/fbplugin.vers
@@ -26,3 +26,4 @@
#
firebird_plugin
+_ZTI*
--- builds/posix/firebird.vers
+++ builds/posix/firebird.vers
@@ -367,3 +367,4 @@
KEYWORD_stringIsAToken
KEYWORD_getTokens
+_ZTI*
--- builds/posix/make.defaults
+++ builds/posix/make.defaults
@@ -252,7 +252,7 @@
# LINKER OPTIONS
#
-UNDEF_PLATFORM = -Wl,--no-undefined
+UNDEF_PLATFORM =
ifeq ($(TARGET),Debug)
UNDEF_FLAGS = $(UNDEF_PLATFORM)
endif
@@ -291,7 +291,7 @@
LIB_LINK_MAPFILE= -Wl,--version-script,$(1)
FIREBIRD_LIBRARY_LINK= -L$(LIB) -lfbclient $(MATHLIB)
-EXE_LINK_OPTIONS= $(LDFLAGS) $(THR_FLAGS) $(UNDEF_FLAGS) $(LIB_PATH_OPTS) $(LINK_EMPTY_SYMBOLS)
+EXE_LINK_OPTIONS= $(LDFLAGS) $(THR_FLAGS) $(UNDEF_FLAGS) $(LIB_PATH_OPTS)
LIB_LINK_OPTIONS= $(LDFLAGS) $(THR_FLAGS) -shared
FB_DAEMON = $(BIN)/firebird$(EXEC_EXT)
--- src/common/os/posix/mod_loader.cpp
+++ src/common/os/posix/mod_loader.cpp
@@ -88,7 +88,7 @@
ModuleLoader::Module* ModuleLoader::loadModule(const Firebird::PathName& modPath)
{
- void* module = dlopen(modPath.nullStr(), FB_RTLD_MODE);
+ void* module = dlopen(modPath.nullStr(), FB_RTLD_MODE | RTLD_GLOBAL);
if (module == NULL)
{
#ifdef DEV_BUILD
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment