This is an automated email from the ASF dual-hosted git repository. ardovm pushed a commit to branch AOO41X in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit 666d80c10772b7ea9071c20e3535a9da6c8e1710 Author: Arrigo Marchiori <[email protected]> AuthorDate: Sat Sep 12 22:01:40 2026 +0200 Enable compilation with address sanitizer Added configure parameter --enable-sanitizer Not supported under Windows (cherry picked from commit 5ac3b07b32a54a84f38c287095891b7ce8fd2c92) --- main/configure.ac | 20 ++++++++++++++++++++ main/set_soenv.in | 1 + main/solenv/gbuild/platform/freebsd.mk | 6 ++++++ main/solenv/gbuild/platform/linux.mk | 6 ++++++ main/solenv/gbuild/platform/macosx.mk | 6 ++++++ main/solenv/gbuild/platform/os2.mk | 6 ++++++ main/solenv/gbuild/platform/windows.mk | 4 ++++ main/solenv/gbuild/platform/winmingw.mk | 6 ++++++ main/solenv/inc/unxbsdi2.mk | 5 +++++ main/solenv/inc/unxfbsd.mk | 10 ++++++++++ main/solenv/inc/unxlng.mk | 10 ++++++++++ main/solenv/inc/unxmacc.mk | 11 +++++++++++ 12 files changed, 91 insertions(+) diff --git a/main/configure.ac b/main/configure.ac index 109cb3e9db..b1d8ab367f 100644 --- a/main/configure.ac +++ b/main/configure.ac @@ -235,6 +235,13 @@ AC_ARG_ENABLE(symbols, Enabling symbols disables the stripping of the solver (--disable-strip-solver). ],,) +AC_ARG_ENABLE(sanitizer, +[ --enable-sanitizer Enables -fsanitize=address compiler flag. + Works with GCC and Clang. + + It is suggested to add --enable-symbols so that the + address sanitizer can give more detailed information. +],,) AC_ARG_ENABLE(strip-solver, [ --disable-strip-solver Disable the stripping of the solver. By default the solver is stripped unless a build with @@ -1355,6 +1362,19 @@ else fi AC_SUBST(ENABLE_SYMBOLS) +dnl =================================================================== +dnl Set the ENABLE_SANITIZER variable. (Activate --enable-sanitizer) +dnl =================================================================== +AC_MSG_CHECKING([whether to enable address sanitizer]) +if test -n "$enable_sanitizer" && test "$enable_sanitizer" != "no"; then + ENABLE_SANITIZER="TRUE" + AC_MSG_RESULT([yes]) +else + ENABLE_SANITIZER="FALSE" + AC_MSG_RESULT([no]) +fi +AC_SUBST(ENABLE_SANITIZER) + dnl =================================================================== dnl Determine if the solver is to be stripped or not. dnl =================================================================== diff --git a/main/set_soenv.in b/main/set_soenv.in index 320c5beca4..5e602a41c0 100644 --- a/main/set_soenv.in +++ b/main/set_soenv.in @@ -1843,6 +1843,7 @@ ToFile( "MINGWSTRIP", "@MINGWSTRIP@", "e" ); ToFile( "USE_SYSTEM_STL", "@USE_SYSTEM_STL@", "e" ); ToFile( "ALLOC", "@ALLOC@", "e" ); ToFile( "ENABLE_SYMBOLS", "@ENABLE_SYMBOLS@", "e" ); +ToFile( "ENABLE_SANITIZER", "@ENABLE_SANITIZER@", "e" ); ToFile( "DISABLE_STRIP", "@DISABLE_STRIP@", "e" ); ToFile( "LFS_CFLAGS", "@LFS_CFLAGS@", "e" ); ToFile( "ENABLE_CRASHDUMP", "@ENABLE_CRASHDUMP@", "e" ); diff --git a/main/solenv/gbuild/platform/freebsd.mk b/main/solenv/gbuild/platform/freebsd.mk index cddce7b48c..dad5ba9e3d 100644 --- a/main/solenv/gbuild/platform/freebsd.mk +++ b/main/solenv/gbuild/platform/freebsd.mk @@ -251,6 +251,12 @@ gb_LinkTarget_CFLAGS += -ggdb3 -finline-limit=0 -fno-inline -fno-default-inline endif +ifeq ($(ENABLE_SANITIZER),TRUE) +gb_CFLAGS += -fsanitize=address +gb_CXXFLAGS += -fsanitize=address +gb_LinkTarget_LDFLAGS += -fsanitize=address +endif + gb_LinkTarget_INCLUDE := $(filter-out %/stl, $(subst -I. , ,$(SOLARINC))) gb_LinkTarget_INCLUDE_STL := $(filter %/stl, $(subst -I. , ,$(SOLARINC))) diff --git a/main/solenv/gbuild/platform/linux.mk b/main/solenv/gbuild/platform/linux.mk index 6ab0b336de..b0cecdd3a7 100644 --- a/main/solenv/gbuild/platform/linux.mk +++ b/main/solenv/gbuild/platform/linux.mk @@ -138,6 +138,12 @@ gb_LinkTarget_LDFLAGS += \ endif +ifeq ($(ENABLE_SANITIZER),TRUE) +gb_CFLAGS += -fsanitize=address +gb_CXXFLAGS += -fsanitize=address +gb_LinkTarget_LDFLAGS += -fsanitize=address +endif + ifeq ($(gb_DEBUGLEVEL),2) gb_COMPILEROPTFLAGS := -O0 else diff --git a/main/solenv/gbuild/platform/macosx.mk b/main/solenv/gbuild/platform/macosx.mk index 3eea512976..06ede863e8 100644 --- a/main/solenv/gbuild/platform/macosx.mk +++ b/main/solenv/gbuild/platform/macosx.mk @@ -143,6 +143,12 @@ gb_LinkTarget_LDFLAGS := \ $(subst -L../lib , ,$(SOLARLIB)) \ #man ld says: obsolete -Wl,-multiply_defined,suppress \ +ifeq ($(ENABLE_SANITIZER),TRUE) +gb_CFLAGS += -fsanitize=address +gb_CXXFLAGS += -fsanitize=address +gb_LinkTarget_LDFLAGS += -fsanitize=address +endif + ifeq ($(gb_DEBUGLEVEL),2) gb_COMPILEROPTFLAGS := -O0 else diff --git a/main/solenv/gbuild/platform/os2.mk b/main/solenv/gbuild/platform/os2.mk index 692f98a446..976012ceb5 100644 --- a/main/solenv/gbuild/platform/os2.mk +++ b/main/solenv/gbuild/platform/os2.mk @@ -290,6 +290,12 @@ gb_LinkTarget_CXXFLAGS += -g gb_LinkTarget_OBJCXXFLAGS += -g endif +ifeq ($(ENABLE_SANITIZER),TRUE) +gb_CFLAGS += -fsanitize=address +gb_CXXFLAGS += -fsanitize=address +gb_LinkTarget_LDFLAGS += -fsanitize=address +endif + gb_LinkTarget_INCLUDE :=\ $(filter-out %/stl, $(subst -I. , ,$(SOLARINC))) \ $(foreach inc,$(subst ;, ,$(JDKINC)),-I$(inc)) \ diff --git a/main/solenv/gbuild/platform/windows.mk b/main/solenv/gbuild/platform/windows.mk index b9dd25f3ec..725eb0edf9 100644 --- a/main/solenv/gbuild/platform/windows.mk +++ b/main/solenv/gbuild/platform/windows.mk @@ -193,6 +193,10 @@ gb_LinkTarget_LDFLAGS := \ -SUBSYSTEM:CONSOLE \ $(patsubst %,-LIBPATH:%,$(filter-out .,$(subst ;, ,$(subst \,/,$(ILIB))))) \ +ifeq ($(ENABLE_SANITIZER),TRUE) +$(eval $(call gb_Output_error,Sanitizer unsupported under OS $(OS))) +endif + ifneq ($(ENABLE_CRASHDUMP),) gb_LinkTarget_LDFLAGS += -DEBUG gb_CFLAGS+=-Zi diff --git a/main/solenv/gbuild/platform/winmingw.mk b/main/solenv/gbuild/platform/winmingw.mk index 0dd65bb415..4502131c39 100644 --- a/main/solenv/gbuild/platform/winmingw.mk +++ b/main/solenv/gbuild/platform/winmingw.mk @@ -164,6 +164,12 @@ ifeq ($(MINGW_GCCLIB_EH),YES) gb_LinkTarget_LDFLAGS += -shared-libgcc endif +ifeq ($(ENABLE_SANITIZER),TRUE) +gb_CFLAGS += -fsanitize=address +gb_CXXFLAGS += -fsanitize=address +gb_LinkTarget_LDFLAGS += -fsanitize=address +endif + ifeq ($(gb_DEBUGLEVEL),2) gb_COMPILEROPTFLAGS := -O0 else diff --git a/main/solenv/inc/unxbsdi2.mk b/main/solenv/inc/unxbsdi2.mk index 835016ad96..841b453606 100644 --- a/main/solenv/inc/unxbsdi2.mk +++ b/main/solenv/inc/unxbsdi2.mk @@ -73,6 +73,11 @@ CFLAGS_NO_EXCEPTIONS=-fno-exceptions CFLAGSCXX= -pipe -frtti $(ARCH_FLAGS) PICSWITCH:=-fpic +.IF "$(ENABLE_SANITIZER)"=="TRUE" +CFLAGSCC += -fsanitize=address +CFLAGSCXX += -fsanitize=address +.ENDIF + # Compiler flags for compiling static object in multi threaded environment with graphical user interface CFLAGSOBJGUIMT= # Compiler flags for compiling static object in multi threaded environment with character user interface diff --git a/main/solenv/inc/unxfbsd.mk b/main/solenv/inc/unxfbsd.mk index 006b8157a1..11868ba5c9 100644 --- a/main/solenv/inc/unxfbsd.mk +++ b/main/solenv/inc/unxfbsd.mk @@ -118,6 +118,11 @@ CFLAGSCC += -fstack-protector CFLAGSCXX += -fstack-protector .ENDIF +.IF "$(ENABLE_SANITIZER)"=="TRUE" +CFLAGSCC += -fsanitize=address +CFLAGSCXX += -fsanitize=address +.ENDIF + # Compiler flags for compiling static object in multi threaded environment with graphical user interface CFLAGSOBJGUIMT= # Compiler flags for compiling static object in multi threaded environment with character user interface @@ -193,6 +198,11 @@ LINKFLAGSPROF= LINKFLAGSDEBUG=-g LINKFLAGSOPT= +# Flag for enabling address sanitizer +.IF "$(ENABLE_SANITIZER)"=="TRUE" +LINKFLAGS += -fsanitize=address +.ENDIF + # linker flags for optimization (symbol hashtable) # for now, applied to symbol scoped libraries, only LINKFLAGSOPTIMIZE*=-Wl,-O1 diff --git a/main/solenv/inc/unxlng.mk b/main/solenv/inc/unxlng.mk index f757ef14fb..dbd8959beb 100644 --- a/main/solenv/inc/unxlng.mk +++ b/main/solenv/inc/unxlng.mk @@ -89,6 +89,11 @@ CFLAGSCXX= -pipe $(ARCH_FLAGS) -std=gnu++98 CFLAGSCXX += -fvisibility-inlines-hidden .ENDIF # "$(HAVE_GCC_VISIBILITY_FEATURE)" == "TRUE" +.IF "$(ENABLE_SANITIZER)"=="TRUE" +CFLAGSCC += -fsanitize=address +CFLAGSCXX += -fsanitize=address +.ENDIF + CFLAGS_CREATE_PCH=-x c++-header -I$(INCPCH) -DPRECOMPILED_HEADERS CFLAGS_USE_PCH=-I$(SLO)$/pch -DPRECOMPILED_HEADERS -Winvalid-pch CFLAGS_USE_EXCEPTIONS_PCH=-I$(SLO)$/pch_ex -DPRECOMPILED_HEADERS -Winvalid-pch @@ -178,6 +183,11 @@ LINKFLAGSPROF= LINKFLAGSDEBUG=-g LINKFLAGSOPT= +# Flag for enabling address sanitizer +.IF "$(ENABLE_SANITIZER)"=="TRUE" +LINKFLAGS += -fsanitize=address +.ENDIF + # linker flags for optimization (symbol hashtable) # for now, applied to symbol scoped libraries, only LINKFLAGSOPTIMIZE*=-Wl,-O1 diff --git a/main/solenv/inc/unxmacc.mk b/main/solenv/inc/unxmacc.mk index 11c0e78039..90b7760e0c 100644 --- a/main/solenv/inc/unxmacc.mk +++ b/main/solenv/inc/unxmacc.mk @@ -120,6 +120,12 @@ CFLAGSPROF= CFLAGSDEBUG=-g CFLAGSDBGUTIL= +# Flags for enabling address sanitizer +.IF "$(ENABLE_SANITIZER)"=="TRUE" +CFLAGSCC += -fsanitize=address +CFLAGSCXX += -fsanitize=address +.ENDIF + # Flag to specify output file to compiler/linker CFLAGSOUTOBJ=-o @@ -199,6 +205,11 @@ LINKFLAGSPROF= LINKFLAGSDEBUG=-g LINKFLAGSOPT= +# Flag for enabling address sanitizer +.IF "$(ENABLE_SANITIZER)"=="TRUE" +LINKFLAGS += -fsanitize=address +.ENDIF + # --------------------------------- # MacOS X shared library specifics # ---------------------------------
