An annoying wart with debugging the plugin is that attempts to set a breakpoint on a function set two breakpoints: on the "funcname@plt", and on the function itself, making stepping through the code more awkward than it ought to be.
This patch detects for -fno-semantic-interposition at configure time, and adds it to PLUGIN_CFLAGS if available, eliminating the "funcname@plt" entries. Presumably this also speeds up in-tree plugin code. Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. Pushed to branch "dmalcolm/analyzer" on the GCC git mirror, along with the autogenerated changes to gcc/configure as a followup gcc/ChangeLog: * Makefile.in (SEM_INTERPOS_FLAGS): New. (PLUGIN_CFLAGS): Flesh out comment. Add SEM_INTERPOS_FLAGS. * configure.ac (sem_interpos_flags): Add this, testing for -fno-semantic-interposition. --- gcc/Makefile.in | 16 ++++++++++++++-- gcc/configure.ac | 12 ++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 0587447..224bd75 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -188,6 +188,8 @@ NOEXCEPTION_FLAGS = @noexception_flags@ ALIASING_FLAGS = @aliasing_flags@ +SEM_INTERPOS_FLAGS = @sem_interpos_flags@ + # This is set by --disable-maintainer-mode (default) to "#" # FIXME: 'MAINT' will always be set to an empty string, no matter if # --disable-maintainer-mode is used or not. This is because the @@ -1786,8 +1788,18 @@ ifneq ($(PLUGIN_MAKEFRAGS),) include $(PLUGIN_MAKEFRAGS) endif -# Add PLUGIN_CFLAGS to objects that belong to in-tree plugins -PLUGIN_CFLAGS = -fPIC +# Define PLUGIN_CFLAGS and add it to objects that belong to in-tree plugins +# +# .o files for plugins need to built as position-independent code, hence -fPIC +# +# We use -fno-semantic-interposition if available (via SEM_INTERPOS_FLAGS) +# since it fixes an annoying wart when debugging the plugin, where every +# attempt to set a breakpoint on a function sets two breakpoints: on the +# "funcname@plt", and on the function itself, making stepping through the +# code more awkward than it ought to be. Presumably this also leads +# to faster plugin code. + +PLUGIN_CFLAGS = -fPIC $(SEM_INTERPOS_FLAGS) $(foreach file,$(ALL_HOST_PLUGIN_OBJS),$(eval CFLAGS-$(file) += $(PLUGIN_CFLAGS))) # diff --git a/gcc/configure.ac b/gcc/configure.ac index ff6023e..eb30857 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -461,7 +461,19 @@ if test "$GCC" = yes; then fi AC_SUBST(aliasing_flags) +sem_interpos_flags= +if test "$GCC" = yes; then + saved_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="$CXXFLAGS -fno-semantic-interposition" + AC_MSG_CHECKING(whether the compiler supports -fno-semantic-interposition) + AC_COMPILE_IFELSE([AC_LANG_SOURCE([])], + [AC_MSG_RESULT([yes]); sem_interpos_flags='-fno-semantic-interposition'], + [AC_MSG_RESULT([no])]) + CXXFLAGS="$saved_CXXFLAGS" +fi +AC_SUBST(sem_interpos_flags) # --------------------- # Warnings and checking -- 1.8.5.3