This is an automated email from the ASF dual-hosted git repository. ardovm pushed a commit to branch asan in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit 154a3aae990876d55868f83176d521f797ae1802 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 --- 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 227feb2c89..9f50c236fd 100644 --- a/main/configure.ac +++ b/main/configure.ac @@ -240,6 +240,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 @@ -1530,6 +1537,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 a12b61ce37..875d741428 100644 --- a/main/set_soenv.in +++ b/main/set_soenv.in @@ -1998,6 +1998,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 e449708dfb..e7b8cf6558 100644 --- a/main/solenv/gbuild/platform/freebsd.mk +++ b/main/solenv/gbuild/platform/freebsd.mk @@ -292,6 +292,12 @@ gb_DEBUG_CFLAGS := -ggdb3 endif 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 a4c57e51ca..83bfbdae27 100644 --- a/main/solenv/gbuild/platform/linux.mk +++ b/main/solenv/gbuild/platform/linux.mk @@ -159,6 +159,12 @@ gb_DEBUG_CFLAGS := -ggdb3 -finline-limit=0 -fno-inline -fno-default-inline endif 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 gb_COMPILEROPT1FLAGS := -O0 diff --git a/main/solenv/gbuild/platform/macosx.mk b/main/solenv/gbuild/platform/macosx.mk index a2fa3183a7..b8bd0f8eb1 100644 --- a/main/solenv/gbuild/platform/macosx.mk +++ b/main/solenv/gbuild/platform/macosx.mk @@ -145,6 +145,12 @@ else gb_DEBUG_CFLAGS := -g3 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 gb_COMPILEROPT1FLAGS := -O0 diff --git a/main/solenv/gbuild/platform/os2.mk b/main/solenv/gbuild/platform/os2.mk index 4eac1e2a57..2fd75d6a87 100644 --- a/main/solenv/gbuild/platform/os2.mk +++ b/main/solenv/gbuild/platform/os2.mk @@ -312,6 +312,12 @@ else gb_DEBUG_CFLAGS := -g3 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 4ad02c3231..49390ea8f6 100644 --- a/main/solenv/gbuild/platform/windows.mk +++ b/main/solenv/gbuild/platform/windows.mk @@ -287,6 +287,10 @@ ifeq ($(gb_DEBUGGING),TRUE) gb_LinkTarget_LDFLAGS += -DEBUG endif +ifeq ($(ENABLE_SANITIZER),TRUE) +$(eval $(call gb_Output_error,Sanitizer unsupported under OS $(OS))) +endif + # this does not use CFLAGS so it is not overridable ifneq ($(ENABLE_CRASHDUMP),) gb_CFLAGS+=-Zi diff --git a/main/solenv/gbuild/platform/winmingw.mk b/main/solenv/gbuild/platform/winmingw.mk index e6c4713fbc..758b0bad9c 100644 --- a/main/solenv/gbuild/platform/winmingw.mk +++ b/main/solenv/gbuild/platform/winmingw.mk @@ -164,6 +164,12 @@ else gb_DEBUG_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 + ifeq ($(gb_DEBUGLEVEL),2) gb_COMPILEROPTFLAGS := -O0 else diff --git a/main/solenv/inc/unxbsdi2.mk b/main/solenv/inc/unxbsdi2.mk index 9b581cfa87..ed5d0326b3 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 4ab61ba8d9..e6461138db 100644 --- a/main/solenv/inc/unxfbsd.mk +++ b/main/solenv/inc/unxfbsd.mk @@ -119,6 +119,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 @@ -201,6 +206,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 abe9832f19..d10b997144 100644 --- a/main/solenv/inc/unxlng.mk +++ b/main/solenv/inc/unxlng.mk @@ -98,6 +98,11 @@ CFLAGSCXX= -pipe $(ARCH_FLAGS) -std=gnu++11 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 @@ -189,6 +194,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 9cb1c134e4..2d4bfc30b0 100644 --- a/main/solenv/inc/unxmacc.mk +++ b/main/solenv/inc/unxmacc.mk @@ -132,6 +132,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 @@ -210,6 +216,11 @@ LINKFLAGSPROF= LINKFLAGSDEBUG=-g LINKFLAGSOPT= +# Flag for enabling address sanitizer +.IF "$(ENABLE_SANITIZER)"=="TRUE" +LINKFLAGS += -fsanitize=address +.ENDIF + # --------------------------------- # MacOS X shared library specifics # ---------------------------------
