editeng/CustomTarget_generated.mk                    |    2 +-
 editeng/source/misc/SvXMLAutoCorrectTokenHandler.cxx |   11 +++++++----
 filter/CustomTarget_svg.mk                           |    2 +-
 oox/source/token/tokenmap.cxx                        |    8 ++++++--
 sdext/CustomTarget_pdfimport.mk                      |    2 +-
 sdext/source/pdfimport/wrapper/keyword_list          |    2 +-
 solenv/bin/generate-tokens.py                        |    2 +-
 solenv/bin/gentoken.py                               |    2 +-
 solenv/gbuild/CustomTarget.mk                        |    2 +-
 sw/CustomTarget_generated.mk                         |    2 ++
 sw/source/core/swg/SwXMLBlockImport.cxx              |   11 +++++++----
 xmloff/source/core/fasttokenhandler.cxx              |    8 ++++++--
 12 files changed, 35 insertions(+), 19 deletions(-)

New commits:
commit e75369aff89789364387d81754a124a7bc5558e0
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Tue Jul 8 20:02:11 2025 +0100
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Wed Jul 9 16:49:00 2025 +0200

    use gperf -fpic friendly version mode
    
    nm -S --size-sort --print-size instdir/program/libmergedlo.so| grep ' [Dd] 
' | c++filt | tail -n 10
    
    before:
    ... 00000000000027f0 d aFmFormShellSlots_Impl
    ... 0000000000002920 d pRGBTable
    ... 0000000000003b80 d vcl::pdf::BuildinFontFace::m_aBuildinFonts
    ... 0000000000004140 d C.16.0
    ... 0000000000004d80 d (anonymous namespace)::aMethods
    ... 00000000000066a8 d aRTFTokenTab
    ... 000000000000cf60 d xmloff::(anonymous namespace)::wordlist
    ... 000000000000cf60 d 
xmloff::token::getNames(int)::{lambda()#1}::operator()() const::sppcTokenNames
    ... 00000000000172c0 d oox::(anonymous namespace)::wordlist
    ... 00000000000172c0 d 
oox::TokenMap::getUtf8TokenName(int)::{lambda()#1}::operator()() 
const::sppcTokenNames
    
    after:
    ... 0000000000002790 d STR_ARR_SVT_LANGUAGE_TABLE
    ... 00000000000027a8 d RID_STRLIST_FUNCTION_NAMES
    ... 00000000000027f0 d aFmFormShellSlots_Impl
    ... 0000000000002920 d pRGBTable
    ... 0000000000003b80 d vcl::pdf::BuildinFontFace::m_aBuildinFonts
    ... 0000000000004140 d C.16.0
    ... 0000000000004d80 d (anonymous namespace)::aMethods
    ... 00000000000066a8 d aRTFTokenTab
    ... 000000000000cf60 d 
xmloff::token::getNames(int)::{lambda()#1}::operator()() const::sppcTokenNames
    ... 00000000000172c0 d 
oox::TokenMap::getUtf8TokenName(int)::{lambda()#1}::operator()() 
const::sppcTokenNames
    
    See also: https://www.akkadia.org/drepper/dsohowto.pdf
    
    Change-Id: Ic1141c466d06d79d71e573c5f283cd1f089d7067
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187578
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>

diff --git a/editeng/CustomTarget_generated.mk 
b/editeng/CustomTarget_generated.mk
index bbdc75fcf53a..21a7892cf4ce 100644
--- a/editeng/CustomTarget_generated.mk
+++ b/editeng/CustomTarget_generated.mk
@@ -19,7 +19,7 @@ $(editeng_INC)/tokens.hxx $(editeng_INC)/tokens.gperf : 
$(editeng_SRC)/tokens.tx
        $(call gb_ExternalExecutable_get_command,python) $(editeng_PY) 
$(editeng_SRC)/tokens.txt $(editeng_INC)/tokens.gperf
 
 $(editeng_INC)/tokens.cxx : $(editeng_INC)/tokens.gperf
-       $(call gb_Helper_wsl_path,$(GPERF) --compare-strncmp --readonly-tables 
$(editeng_INC)/tokens.gperf) \
+       $(call gb_Helper_wsl_path,$(GPERF) --compare-strncmp --readonly-tables 
--pic $(editeng_INC)/tokens.gperf) \
        | sed -e '/^#line/d' -e 's/(char\*)0/(char\*)0, XML_TOKEN_INVALID/g' > 
$@
 
 $(call gb_CustomTarget_get_target,editeng/generated) : 
$(editeng_INC)/tokens.cxx
diff --git a/editeng/source/misc/SvXMLAutoCorrectTokenHandler.cxx 
b/editeng/source/misc/SvXMLAutoCorrectTokenHandler.cxx
index ae1744615073..c6998d452b07 100644
--- a/editeng/source/misc/SvXMLAutoCorrectTokenHandler.cxx
+++ b/editeng/source/misc/SvXMLAutoCorrectTokenHandler.cxx
@@ -9,18 +9,21 @@
 
 #include "SvXMLAutoCorrectTokenHandler.hxx"
 #include <xmloff/xmltoken.hxx>
+#if defined __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 #if defined __clang__
 #if __has_warning("-Wdeprecated-register")
-#pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wdeprecated-register"
 #endif
 #endif
+#endif
+
 #include <tokens.cxx>
-#if defined __clang__
-#if __has_warning("-Wdeprecated-register")
+
+#if defined __GNUC__
 #pragma GCC diagnostic pop
 #endif
-#endif
 
 using namespace css::uno;
 using namespace ::xmloff::token;
diff --git a/filter/CustomTarget_svg.mk b/filter/CustomTarget_svg.mk
index cdc48cc21219..295a8072418d 100644
--- a/filter/CustomTarget_svg.mk
+++ b/filter/CustomTarget_svg.mk
@@ -40,7 +40,7 @@ $(filter_GEN_svg_Tokens_hxx) : $(filter_GEN_svg_Tokens_gperf)
 $(filter_GEN_svg_Tokens_cxx) : $(filter_GEN_svg_Tokens_gperf)
        $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),build,GPF,1)
        $(call gb_Helper_wsl_path,\
-               $(GPERF) --compare-strncmp -C -m 20 --switch=2 
--readonly-tables $(filter_GEN_svg_Tokens_gperf)) \
+               $(GPERF) --compare-strncmp -C -m 20 --switch=2 
--readonly-tables --pic $(filter_GEN_svg_Tokens_gperf)) \
                         | sed -e '/^#line/d' -e 's/(char\*)0/(char\*)0, 0/g' > 
$@
 
 $(filter_GEN_svg_Script_hxx) : \
diff --git a/oox/source/token/tokenmap.cxx b/oox/source/token/tokenmap.cxx
index dcd1481cbe15..c6b21dfa89b6 100644
--- a/oox/source/token/tokenmap.cxx
+++ b/oox/source/token/tokenmap.cxx
@@ -31,15 +31,19 @@ namespace oox {
 
 namespace {
 // include auto-generated Perfect_Hash
-#if defined __clang__
+#if defined __GNUC__
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
+#if defined __clang__
 #if __has_warning("-Wdeprecated-register")
 #pragma GCC diagnostic ignored "-Wdeprecated-register"
 #endif
 #endif
+#endif
+
 #include <tokenhash.inc>
-#if defined __clang__
+
+#if defined __GNUC__
 #pragma GCC diagnostic pop
 #endif
 } // namespace
diff --git a/sdext/CustomTarget_pdfimport.mk b/sdext/CustomTarget_pdfimport.mk
index a32da2b94191..a2627824a8d4 100644
--- a/sdext/CustomTarget_pdfimport.mk
+++ b/sdext/CustomTarget_pdfimport.mk
@@ -17,7 +17,7 @@ $(gb_CustomTarget_workdir)/sdext/pdfimport/hash.cxx : \
                | $(gb_CustomTarget_workdir)/sdext/pdfimport/.dir
        $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),GPF,1)
        $(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),GPF)
-       $(call gb_Helper_wsl_path,$(GPERF) -C -t -l -L C++ -m 20 --switch=2 
--readonly-tables -Z PdfKeywordHash -k'4-5$(COMMA)$$' $<) > $@
+       $(call gb_Helper_wsl_path,$(GPERF) -C -t -l -L C++ -m 20 --switch=2 
--readonly-tables --pic -Z PdfKeywordHash -k'4-5$(COMMA)$$' $<) > $@
        $(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),GPF)
 
 # vim:set shiftwidth=4 tabstop=4 noexpandtab:
diff --git a/sdext/source/pdfimport/wrapper/keyword_list 
b/sdext/source/pdfimport/wrapper/keyword_list
index 470a414f68fb..28a5c3184105 100644
--- a/sdext/source/pdfimport/wrapper/keyword_list
+++ b/sdext/source/pdfimport/wrapper/keyword_list
@@ -1,4 +1,4 @@
-struct hash_entry { const char* name; enum parseKey eKey; };
+struct hash_entry { int name; enum parseKey eKey; };
 
 #if defined __GNUC__
 #pragma GCC system_header
diff --git a/solenv/bin/generate-tokens.py b/solenv/bin/generate-tokens.py
index f1e01dc0d6db..857d96fcc3bb 100644
--- a/solenv/bin/generate-tokens.py
+++ b/solenv/bin/generate-tokens.py
@@ -33,7 +33,7 @@ gperffile.write("""%language=C++
 %null-strings
 %struct-type
 struct xmltoken {
-    const char *name;
+    int name;
     sal_Int32 nToken;
 };
 %%
diff --git a/solenv/bin/gentoken.py b/solenv/bin/gentoken.py
index 0fa793ea34f4..3c93119b1cb6 100644
--- a/solenv/bin/gentoken.py
+++ b/solenv/bin/gentoken.py
@@ -24,7 +24,7 @@ gperf_header = """%language=C++
 %struct-type
 struct xmltoken
 {
-  const char *name; XMLTokenEnum nToken;
+  int name; XMLTokenEnum nToken;
 };
 %%
 """
diff --git a/solenv/gbuild/CustomTarget.mk b/solenv/gbuild/CustomTarget.mk
index 7020f2c45b85..c7d5a9a3291f 100644
--- a/solenv/gbuild/CustomTarget.mk
+++ b/solenv/gbuild/CustomTarget.mk
@@ -84,7 +84,7 @@ define gb_CustomTarget_token_hash
 $(call gb_CustomTarget_get_target,$(1)) : $(gb_CustomTarget_workdir)/$(1)/$(2)
 $(gb_CustomTarget_workdir)/$(1)/$(2) : 
$(gb_CustomTarget_workdir)/$(1)/misc/$(3)
        $$(call gb_Output_announce,$$(subst $(WORKDIR)/,,$$@),build,GPF,1)
-       $$(call gb_Helper_wsl_path,$(GPERF) --compare-strncmp --switch=2 
--readonly-tables $$< --output-file=$$@.gperf) \
+       $$(call gb_Helper_wsl_path,$(GPERF) --compare-strncmp --switch=2 
--readonly-tables --pic $$< --output-file=$$@.gperf) \
        &&  sed -e '/^#line/d' -e 's/(char\*)0/(char\*)0, 0/g' $$@.gperf > $$@ 
&& rm -f $$@.gperf
 
 endef
diff --git a/sw/CustomTarget_generated.mk b/sw/CustomTarget_generated.mk
index ca59842fd582..d031b5f7402b 100644
--- a/sw/CustomTarget_generated.mk
+++ b/sw/CustomTarget_generated.mk
@@ -24,10 +24,12 @@ $(sw_INC)/BlockListTokens.gperf : $(sw_INC)/%.gperf : 
$(sw_SRC)/%.txt $(sw_PY) \
 # https://github.com/microsoft/WSL/issues/4400 so create them as separate 
intermediates
 $(sw_INC)/TextBlockTokens.processed : $(sw_INC)/TextBlockTokens.gperf
        $(GPERF) --compare-strncmp --readonly-tables 
--class-name=TextBlockTokens \
+       --pic --string-pool-name=textBlockPool \
        --word-array-name=textBlockList --enum $(sw_INC)/TextBlockTokens.gperf 
> $@
 
 $(sw_INC)/BlockListTokens.processed : $(sw_INC)/BlockListTokens.gperf
        $(GPERF) --compare-strncmp --readonly-tables -T 
$(sw_INC)/BlockListTokens.gperf \
+       --pic --string-pool-name=blockListPool \
        --class-name=BlockListTokens --word-array-name=blockListList > $@
 
 $(sw_INC)/tokens.cxx : sw_INC:=$(call gb_Helper_wsl_path,$(sw_INC))
diff --git a/sw/source/core/swg/SwXMLBlockImport.cxx 
b/sw/source/core/swg/SwXMLBlockImport.cxx
index 4f19f72510f3..a2e6dcfc9615 100644
--- a/sw/source/core/swg/SwXMLBlockImport.cxx
+++ b/sw/source/core/swg/SwXMLBlockImport.cxx
@@ -23,18 +23,21 @@
 #include <unotools/charclass.hxx>
 #include <swtypes.hxx>
 
+#if defined __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 #if defined __clang__
 #if __has_warning("-Wdeprecated-register")
-#pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wdeprecated-register"
 #endif
 #endif
+#endif
+
 #include <tokens.cxx>
-#if defined __clang__
-#if __has_warning("-Wdeprecated-register")
+
+#if defined __GNUC__
 #pragma GCC diagnostic pop
 #endif
-#endif
 
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star;
diff --git a/xmloff/source/core/fasttokenhandler.cxx 
b/xmloff/source/core/fasttokenhandler.cxx
index e7b2dc7e017e..a830609c26d5 100644
--- a/xmloff/source/core/fasttokenhandler.cxx
+++ b/xmloff/source/core/fasttokenhandler.cxx
@@ -15,15 +15,19 @@ namespace xmloff {
 
 namespace {
 // include auto-generated Perfect_Hash
-#if defined __clang__
+#if defined __GNUC__
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
+#if defined __clang__
 #if __has_warning("-Wdeprecated-register")
 #pragma GCC diagnostic ignored "-Wdeprecated-register"
 #endif
 #endif
+#endif
+
 #include <tokenhash.inc>
-#if defined __clang__
+
+#if defined __GNUC__
 #pragma GCC diagnostic pop
 #endif
 } // namespace

Reply via email to