On Wed, Dec 21, 2022 at 1:35 PM Gaius Mulley via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
>
> Hello,
>
> PR-108119 Disable m2 plugin m2rte (provide --enable-m2plugin configure 
> option).
>
> The m2 plugin m2rte attempts to find reachable calls to the m2 exception
> handler, but it identifies the m2 exception calls by procedure name.
> As this won't work with other languages it should be disabled by default.
>
> This patch disables the plugin from being built.  It provides a new
> configure switch --enable-m2plugin to override the default and it will
> check the HAVE_PLUGIN of the host and warn if there is a conflict.
>
> Tested on x86_64 GNU/Linux bootstrapped for all languages no extra
> failures (m2 tests missing as the plugin is disabled and TCL expect
> now disables m2 plugin tests)
>
> ok for trunk?
>
> regards,
> Gaius
>
>
> ChangeLog:
>
>         * Makefile.def (extra_configure_flags): Add @enable_m2plugin@.
>         * Makefile.in : Rebuilt.
>         * configure : Rebuilt.
>         * configure.ac (host_tools): Remove unused gm2tools.
>         (m2plugin) New AC_ARG_ENABLE.
>         (enable_m2plugin) New AC_SUBST added.

Why's this at the toplevel?

>
> gcc/ChangeLog:
>
>         * Makefile.in (enable_m2plugin): Added.
>         (site.exp): New variable ENABLE_M2PLUGIN.
>         * config.in: Rebuilt.
>         * configure : Rebuilt.
>         * gcc/configure.ac (m2plugin): New AC_ARG_ENABLE.
>         (enable_m2plugin) New AC_SUBST added.
>         * doc/install.texi (--enable-m2plugin): Documented.

Likewise - shouldn't this be in gcc/m2/?

>
> gcc/m2/ChangeLog:
>
>         * gm2spec.cc (ENABLE_PLUGIN): Replaced by ENABLE_M2PLUGIN.  Ensure
>         that OPT_fplugin option is only created if ENABLE_M2PLUGIN is
>         defined.
>         (lang_specific_driver) Change warning to mention
>         --enable-m2plugin.
>         * Make-lang.in (enable_m2plugin): Set to no if enable_plugin is
>         no.
>         (M2RTE_PLUGIN_SO) New definition.
>         (m2.all.cross) Use M2RTE_PLUGIN_SO.
>         (m2.start.encap) Use M2RTE_PLUGIN_SO.
>         (m2.install-plugin) Use M2RTE_PLUGIN_SO.
>         (m2.install-plugin) Add dummy rule when enable_m2plugin is no.
>         (plugin/m2rte$(exeext).so) Add dummy rule when enable_m2plugin is
>         no.
>         (stage1/m2/cc1gm2$(exeext) Use M2RTE_PLUGIN_SO.
>         (stage2/m2/cc1gm2$(exeext) Use M2RTE_PLUGIN_SO.
>
> gcc/testsuite/ChangeLog:
>
>         * gm2/coroutines/pim/run/pass/coroutines-pim-run-pass.exp
>         (ENABLE_M2PLUGIN): Checked to see whether the test should be ignored.
>         * gm2/iso/check/fail/iso-check-fail.exp (ENABLE_M2PLUGIN): Ditto.
>         * gm2/switches/auto-init/fail/switches-auto-init-fail.exp
>         (ENABLE_M2PLUGIN): Ditto.
>         * gm2/switches/check-all/pim2/fail/switches-check-all-pim2-fail.exp
>         (ENABLE_M2PLUGIN): Ditto.
>         * 
> gm2/switches/check-all/plugin/iso/fail/switches-check-all-plugin-iso-fail.exp
>         (ENABLE_M2PLUGIN): Ditto.
>         * 
> gm2/switches/check-all/plugin/pim2/fail/switches-check-all-plugin-pim2-fail.exp
>         (ENABLE_M2PLUGIN): Ditto.
>
> diff --git a/Makefile.def b/Makefile.def
> index 5f44190154e..d33e4528b63 100644
> --- a/Makefile.def
> +++ b/Makefile.def
> @@ -103,7 +103,7 @@ host_modules= { module= libiberty; bootstrap=true;
>  // @extra_linker_plugin_flags@ and @extra_linker_plugin_configure_flags@.
>  host_modules= { module= libiberty-linker-plugin; bootstrap=true;
>                 module_srcdir=libiberty;
> -               extra_configure_flags='@extra_host_libiberty_configure_flags@ 
> --disable-install-libiberty @extra_linker_plugin_flags@ 
> @extra_linker_plugin_configure_flags@';
> +               extra_configure_flags='@extra_host_libiberty_configure_flags@ 
> --disable-install-libiberty @extra_linker_plugin_flags@ 
> @extra_linker_plugin_configure_flags@ @enable_m2plugin@';
>                 extra_make_flags='@extra_linker_plugin_flags@'; };
>  // We abuse missing to avoid installing anything for libiconv.
>  host_modules= { module= libiconv;
> diff --git a/configure.ac b/configure.ac
> index c5191ce24ae..b771f61ef33 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -140,7 +140,7 @@ host_libs="intl libiberty opcodes bfd readline tcl tk 
> itcl libgui zlib libbacktr
>  # binutils, gas and ld appear in that order because it makes sense to run
>  # "make check" in that particular order.
>  # If --enable-gold is used, "gold" may replace "ld".
> -host_tools="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim 
> gdb gdbserver gprof etc expect dejagnu m4 utils guile fastjar gnattools 
> libcc1 gm2tools gotools c++tools"
> +host_tools="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim 
> gdb gdbserver gprof etc expect dejagnu m4 utils guile fastjar gnattools 
> libcc1 gotools c++tools"
>
>  # these libraries are built for the target environment, and are built after
>  # the host libraries and the host tools (which may be a cross compiler)
> @@ -465,13 +465,22 @@ if test "${ENABLE_LIBADA}" != "yes" ; then
>    noconfigdirs="$noconfigdirs gnattools"
>  fi
>
> +
>  AC_ARG_ENABLE(libgm2,
>  [AS_HELP_STRING([--enable-libgm2], [build libgm2 directory])],
>  ENABLE_LIBGM2=$enableval,
>  ENABLE_LIBGM2=no)
> -if test "${ENABLE_LIBGM2}" != "yes" ; then
> -  noconfigdirs="$noconfigdirs gm2tools"
> +
> +
> +AC_ARG_ENABLE(m2plugin,
> +[AS_HELP_STRING([--enable-m2plugin], [enable m2rte plugin])],
> +enable_m2plugin=$enableval,
> +enable_m2plugin=yes)
> +if test "${enable_m2plugin}" != "yes" ; then
> +  enable_m2plugin=no
>  fi
> +AC_SUBST(enable_m2plugin)
> +
>
>  AC_ARG_ENABLE(libssp,
>  [AS_HELP_STRING([--enable-libssp], [build libssp directory])],
> diff --git a/gcc/Makefile.in b/gcc/Makefile.in
> index 995d77f96c4..46bdcb730aa 100644
> --- a/gcc/Makefile.in
> +++ b/gcc/Makefile.in
> @@ -404,6 +404,8 @@ PLUGINCFLAGS = @CXXFLAGS@
>  PLUGINLIBS = @pluginlibs@
>
>  enable_plugin = @enable_plugin@
> +# Should we build the m2plugin?
> +enable_m2plugin = @enable_m2plugin@
>
>  # On MinGW plugin installation involves installing import libraries.
>  ifeq ($(enable_plugin),yes)
> @@ -4101,6 +4103,9 @@ site.exp: ./config.status Makefile
>           echo "set PLUGINCFLAGS \"$(PLUGINCFLAGS)\"" >> ./site.tmp; \
>           echo "set GMPINC \"$(GMPINC)\"" >> ./site.tmp; \
>         fi
> +       @if test "@enable_m2plugin@" = "yes" ; then \
> +         echo "set ENABLE_M2PLUGIN 1" >> ./site.tmp; \
> +       fi
>  # If newlib has been configured, we need to pass -B to gcc so it can find
>  # newlib's crt0.o if it exists.  This will cause a "path prefix not used"
>  # message if it doesn't, but the testsuite is supposed to ignore the message 
> -
> diff --git a/gcc/configure.ac b/gcc/configure.ac
> index 5efbf11793c..61052d4a2bc 100644
> --- a/gcc/configure.ac
> +++ b/gcc/configure.ac
> @@ -1011,6 +1011,7 @@ analyzer=1)
>  AC_DEFINE_UNQUOTED(ENABLE_ANALYZER, $analyzer,
>  [Define 0/1 if static analyzer feature is enabled.])
>
> +
>  AC_ARG_ENABLE(objc-gc,
>  [AS_HELP_STRING([--enable-objc-gc],
>                 [enable the use of Boehm's garbage collector with
> @@ -7375,6 +7376,26 @@ if test x"$enable_plugin" = x"yes"; then
>  fi
>
>
> +AC_ARG_ENABLE(m2plugin,
> +[AS_HELP_STRING([--enable-m2plugin],
> +               [enable the modula-2 static analysis plugin])],
> +if test x$enable_m2plugin = xno; then
> +  m2plugin=0
> +else
> +  if test x"$enable_plugin" = x"yes"; then
> +     m2plugin=1
> +  else
> +     m2plugin=0
> +     AC_MSG_WARN([modula-2 plugin is disabled as the host has disabled 
> plugins])
> +  fi
> +fi,
> +m2plugin=0)
> +if test x"$enable_m2plugin" = x"yes"; then
> +  AC_DEFINE(ENABLE_M2PLUGIN, 1, [Define to enable m2plugin support.])
> +fi
> +AC_SUBST(enable_m2plugin)
> +
> +
>  # Enable --enable-host-shared
>  AC_ARG_ENABLE(host-shared,
>  [AS_HELP_STRING([--enable-host-shared],
> diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
> index 6884a74936b..b1966369ff2 100644
> --- a/gcc/doc/install.texi
> +++ b/gcc/doc/install.texi
> @@ -1926,6 +1926,9 @@ do a @samp{make -C gcc gnatlib_and_tools}.
>  Specify that the run-time libraries and tools used by Modula-2 should not
>  be built.  This can be useful for debugging.
>
> +@item --enable-m2plugin
> +Specify that the modula-2 static analysis plugin should be built.
> +
>  @item --disable-libsanitizer
>  Specify that the run-time libraries for the various sanitizers should
>  not be built.
> diff --git a/gcc/m2/Make-lang.in b/gcc/m2/Make-lang.in
> index a8bd7fe4d19..3d9c84f7607 100644
> --- a/gcc/m2/Make-lang.in
> +++ b/gcc/m2/Make-lang.in
> @@ -82,6 +82,18 @@ PGE=m2/pge$(exeext)
>
>  SRC_PREFIX=G
>
> +ifeq ($(enable_plugin),no)
> +# Override enable_m2plugin if host does not support plugins.
> +ifeq ($(enable_m2plugin),yes)
> +$(warning modula-2 plugin will be disabled as the host does not support 
> plugins)
> +endif
> +enable_m2plugin=no
> +endif
> +
> +ifeq ($(enable_m2plugin),yes)
> +M2RTE_PLUGIN_SO=plugin/m2rte$(exeext).so
> +endif
> +
>  m2/gm2spec.o: $(srcdir)/m2/gm2spec.cc $(SYSTEM_H) $(GCC_H) $(CONFIG_H) \
>                 m2/gm2config.h $(TARGET_H) $(PLUGIN_HEADERS) \
>                 $(generated_files) $(C_TREE_H) insn-attr-common.h
> @@ -114,9 +126,9 @@ po-generated:
>
>  # Build hooks:
>
> -m2.all.cross: gm2-cross$(exeext) plugin/m2rte$(exeext).so
> +m2.all.cross: gm2-cross$(exeext) $(M2RTE_PLUGIN_SO)
>
> -m2.start.encap: gm2$(exeext) plugin/m2rte$(exeext).so
> +m2.start.encap: gm2$(exeext) $(M2RTE_PLUGIN_SO)
>  m2.rest.encap:
>
>
> @@ -401,16 +413,22 @@ m2.uninstall:
>         -rm -rf $(bindir)/$(GM2_INSTALL_NAME)
>         -rm -rf $(bindir)/$(GM2_CROSS_NAME)
>
> +
> +ifeq ($(enable_m2plugin),yes)
>  m2.install-plugin: installdirs
>         $(mkinstalldirs) $(DESTDIR)$(plugin_resourcesdir)
> -       $(INSTALL_PROGRAM) plugin/m2rte$(exeext).so 
> $(DESTDIR)$(plugin_resourcesdir)/m2rte$(exeext).so
> +       $(INSTALL_PROGRAM) $(M2RTE_PLUGIN_SO) 
> $(DESTDIR)$(plugin_resourcesdir)/m2rte$(exeext).so
>         chmod a+x $(DESTDIR)$(plugin_resourcesdir)/m2rte$(exeext).so
>
>  plugin/m2rte$(exeext).so: $(srcdir)/m2/plugin/m2rte.cc 
> $(GCC_HEADER_DEPENDENCIES_FOR_M2) \
>          insn-attr-common.h insn-flags.h $(generated_files)
>         test -d plugin || mkdir plugin
> -       $(PLUGINCC) $(PLUGINCFLAGS) -fno-rtti -I. -I$(srcdir) -I$(srcdir)/m2 
> -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/../include -I$(srcdir)/../libcpp/include 
> -Wall $(GMPINC) -Wno-literal-suffix -fPIC -c -o plugin/m2rte.o 
> $(srcdir)/m2/plugin/m2rte.cc
> +       $(PLUGINCC) $(PLUGINCFLAGS) -fno-rtti -I. -I$(srcdir) -I$(srcdir)/m2 
> -I$(srcdir)/m2/gm2-gcc -I$(srcdir)/../include -I$(srcdir)/../libcpp/include 
> -I$(objdir)/../intl -Wall $(GMPINC) -Wno-literal-suffix -fPIC -c -o 
> plugin/m2rte.o $(srcdir)/m2/plugin/m2rte.cc
>         $(PLUGINCC) $(PLUGINCFLAGS) $(PLUGINLIBS) -fno-rtti plugin/m2rte.o 
> -shared -o $@
> +else
> +m2.install-plugin:
> +plugin/m2rte$(exeext).so:
> +endif
>
>
>  # Clean hooks:
> @@ -526,7 +544,7 @@ cc1gm2$(exeext): stage1/m2/cc1gm2$(exeext) $(m2.prev)
>
>  stage2/m2/cc1gm2$(exeext): stage1/m2/cc1gm2$(exeext) 
> m2/gm2-compiler/m2flex.o $(P) \
>                              $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) $(GM2_LIBS) \
> -                            m2/gm2-gcc/rtegraph.o plugin/m2rte$(exeext).so 
> m2/gm2-libs-boot/M2LINK.o
> +                            m2/gm2-gcc/rtegraph.o $(M2RTE_PLUGIN_SO) 
> m2/gm2-libs-boot/M2LINK.o
>         @$(call LINK_PROGRESS,$(INDEX.m2),start)
>         +$(LLINKER) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GM2_C_OBJS) 
> m2/gm2-compiler/m2flex.o \
>                              attribs.o \
> @@ -538,7 +556,7 @@ stage2/m2/cc1gm2$(exeext): stage1/m2/cc1gm2$(exeext) 
> m2/gm2-compiler/m2flex.o $(
>  stage1/m2/cc1gm2$(exeext): gm2$(exeext) m2/gm2-compiler-boot/m2flex.o \
>                              $(P) $(GM2_C_OBJS) $(BACKEND) $(LIBDEPS) \
>                              $(GM2_LIBS_BOOT) $(MC_LIBS) \
> -                            m2/gm2-gcc/rtegraph.o plugin/m2rte$(exeext).so \
> +                            m2/gm2-gcc/rtegraph.o $(M2RTE_PLUGIN_SO) \
>                              m2/gm2-libs-boot/M2LINK.o \
>                              $(m2.prev)
>         @$(call LINK_PROGRESS,$(INDEX.m2),start)
> diff --git a/gcc/m2/gm2spec.cc b/gcc/m2/gm2spec.cc
> index 680dd3602ef..49ad14038d2 100644
> --- a/gcc/m2/gm2spec.cc
> +++ b/gcc/m2/gm2spec.cc
> @@ -610,7 +610,7 @@ lang_specific_driver (struct cl_decoded_option 
> **in_decoded_options,
>    /* The number of libraries added in.  */
>    int added_libraries;
>
> -#ifdef ENABLE_PLUGIN
> +#ifdef ENABLE_M2PLUGIN
>    /* True if we should add -fplugin=m2rte to the command-line.  */
>    bool need_plugin = true;
>  #else
> @@ -678,10 +678,10 @@ lang_specific_driver (struct cl_decoded_option 
> **in_decoded_options,
>            break;
>          case OPT_fm2_plugin:
>            need_plugin = decoded_options[i].value;
> -#ifndef ENABLE_PLUGIN
> +#ifndef ENABLE_M2PLUGIN
>           if (need_plugin)
>             error ("plugin support is disabled; configure with "
> -                  "%<--enable-plugin%>");
> +                  "%<--enable-m2plugin%>");
>  #endif
>            break;
>         case OPT_fscaffold_dynamic:
> @@ -802,7 +802,6 @@ lang_specific_driver (struct cl_decoded_option 
> **in_decoded_options,
>                "-fgen-module-list=", "-fuse-list=");
>      }
>
> -
>    /* There's no point adding -shared-libgcc if we don't have a shared
>       libgcc.  */
>  #ifndef ENABLE_SHARED_LIBGCC
> @@ -848,7 +847,8 @@ lang_specific_driver (struct cl_decoded_option 
> **in_decoded_options,
>    if (allow_libraries)
>      {
>        /* If the libraries have not been specified by the user but the
> -        dialect has been specified then select the appropriate libraries.  */
> +        dialect has been specified then select the appropriate
> +        libraries.  */
>        if (libraries == NULL)
>         {
>           if (strcmp (dialect, "iso") == 0)
> @@ -865,8 +865,10 @@ lang_specific_driver (struct cl_decoded_option 
> **in_decoded_options,
>    if ((! seen_x_flag) && seen_module_extension)
>      append_option (OPT_x, "modula-2", 1);
>
> +#ifdef ENABLE_M2PLUGIN
>    if (need_plugin)
>      append_option (OPT_fplugin_, "m2rte", 1);
> +#endif
>
>    if (linking)
>      {
> diff --git a/gcc/testsuite/gm2/iso/check/fail/iso-check-fail.exp 
> b/gcc/testsuite/gm2/iso/check/fail/iso-check-fail.exp
> index a519f839f90..4aa02ef61fb 100644
> --- a/gcc/testsuite/gm2/iso/check/fail/iso-check-fail.exp
> +++ b/gcc/testsuite/gm2/iso/check/fail/iso-check-fail.exp
> @@ -21,10 +21,13 @@ load_lib target-supports.exp
>
>  global TESTING_IN_BUILD_TREE
>  global ENABLE_PLUGIN
> +global ENABLE_M2PLUGIN
>
>  # The plugin testcases currently only work when the build tree is available.
>  # Also check whether the host supports plugins.
> -if { ![info exists TESTING_IN_BUILD_TREE] || ![info exists ENABLE_PLUGIN] } {
> +if { ![info exists TESTING_IN_BUILD_TREE]
> +     || ![info exists ENABLE_PLUGIN]
> +     || ![info exists ENABLE_M2PLUGIN] } {
>      return
>  }
>
> diff --git 
> a/gcc/testsuite/gm2/switches/auto-init/fail/switches-auto-init-fail.exp 
> b/gcc/testsuite/gm2/switches/auto-init/fail/switches-auto-init-fail.exp
> index c60027ff751..1b5488bc4da 100644
> --- a/gcc/testsuite/gm2/switches/auto-init/fail/switches-auto-init-fail.exp
> +++ b/gcc/testsuite/gm2/switches/auto-init/fail/switches-auto-init-fail.exp
> @@ -22,10 +22,13 @@ load_lib target-supports.exp
>
>  global TESTING_IN_BUILD_TREE
>  global ENABLE_PLUGIN
> +global ENABLE_M2PLUGIN
>
>  # The plugin testcases currently only work when the build tree is available.
>  # Also check whether the host supports plugins.
> -if { ![info exists TESTING_IN_BUILD_TREE] || ![info exists ENABLE_PLUGIN] } {
> +if { ![info exists TESTING_IN_BUILD_TREE]
> +     || ![info exists ENABLE_PLUGIN]
> +     || ![info exists ENABLE_M2PLUGIN] } {
>      return
>  }
>
> diff --git 
> a/gcc/testsuite/gm2/switches/check-all/pim2/fail/switches-check-all-pim2-fail.exp
>  
> b/gcc/testsuite/gm2/switches/check-all/pim2/fail/switches-check-all-pim2-fail.exp
> index 3c654ad0b73..791ebe294b2 100644
> --- 
> a/gcc/testsuite/gm2/switches/check-all/pim2/fail/switches-check-all-pim2-fail.exp
> +++ 
> b/gcc/testsuite/gm2/switches/check-all/pim2/fail/switches-check-all-pim2-fail.exp
> @@ -22,10 +22,13 @@ load_lib target-supports.exp
>
>  global TESTING_IN_BUILD_TREE
>  global ENABLE_PLUGIN
> +global ENABLE_M2PLUGIN
>
>  # The plugin testcases currently only work when the build tree is available.
>  # Also check whether the host supports plugins.
> -if { ![info exists TESTING_IN_BUILD_TREE] || ![info exists ENABLE_PLUGIN] } {
> +if { ![info exists TESTING_IN_BUILD_TREE]
> +     || ![info exists ENABLE_PLUGIN]
> +     || ![info exists ENABLE_M2PLUGIN] } {
>      return
>  }
>
> diff --git 
> a/gcc/testsuite/gm2/switches/check-all/plugin/iso/fail/switches-check-all-plugin-iso-fail.exp
>  
> b/gcc/testsuite/gm2/switches/check-all/plugin/iso/fail/switches-check-all-plugin-iso-fail.exp
> index 84a3f37e2bb..2c6b56fcca0 100644
> --- 
> a/gcc/testsuite/gm2/switches/check-all/plugin/iso/fail/switches-check-all-plugin-iso-fail.exp
> +++ 
> b/gcc/testsuite/gm2/switches/check-all/plugin/iso/fail/switches-check-all-plugin-iso-fail.exp
> @@ -22,10 +22,13 @@ load_lib target-supports.exp
>
>  global TESTING_IN_BUILD_TREE
>  global ENABLE_PLUGIN
> +global ENABLE_M2PLUGIN
>
>  # The plugin testcases currently only work when the build tree is available.
>  # Also check whether the host supports plugins.
> -if { ![info exists TESTING_IN_BUILD_TREE] || ![info exists ENABLE_PLUGIN] } {
> +if { ![info exists TESTING_IN_BUILD_TREE]
> +     || ![info exists ENABLE_PLUGIN]
> +     || ![info exists ENABLE_M2PLUGIN] } {
>      return
>  }
>
> diff --git 
> a/gcc/testsuite/gm2/switches/check-all/plugin/pim2/fail/switches-check-all-plugin-pim2-fail.exp
>  
> b/gcc/testsuite/gm2/switches/check-all/plugin/pim2/fail/switches-check-all-plugin-pim2-fail.exp
> index 238e5c8af90..24644ce9044 100644
> --- 
> a/gcc/testsuite/gm2/switches/check-all/plugin/pim2/fail/switches-check-all-plugin-pim2-fail.exp
> +++ 
> b/gcc/testsuite/gm2/switches/check-all/plugin/pim2/fail/switches-check-all-plugin-pim2-fail.exp
> @@ -22,10 +22,13 @@ load_lib target-supports.exp
>
>  global TESTING_IN_BUILD_TREE
>  global ENABLE_PLUGIN
> +global ENABLE_M2PLUGIN
>
>  # The plugin testcases currently only work when the build tree is available.
>  # Also check whether the host supports plugins.
> -if { ![info exists TESTING_IN_BUILD_TREE] || ![info exists ENABLE_PLUGIN] } {
> +if { ![info exists TESTING_IN_BUILD_TREE]
> +     || ![info exists ENABLE_PLUGIN]
> +     || ![info exists ENABLE_M2PLUGIN] } {
>      return
>  }
>

Reply via email to