Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On 12/09/14 01:27, Ilya Enkovich wrote: 2014-12-09 Ilya Enkovich * config/i386/linux-common.h (LIBMPX_WRAPPERSSPEC): New. (CHKP_SPEC): Add wrappers library. * c-family/c.opt (static-libmpxwrappers): New. libmpx/ 2014-12-09 Ilya Enkovich * Makefile.am (SUBDIRS): Add mpxwrap when used AS supports MPX. (MAKEOVERRIDES): New. * Makefile.in: Regenerate. * configure.ac: Check AS supports MPX. Add mpxintr/Makefile to config files. * configure: Regenerate. * mpxwrap/Makefile.am: New. * mpxwrap/Makefile.in: New. * mpxwrap/libtool-version: New. * mpxwrap/mpx_wrappers.cc: New. * mpxwrap/libmpxwrappers.map: New. OK once prerequisites are approved. jeff
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On 05 Dec 15:52, Jeff Law wrote: > On 12/03/14 07:28, Ilya Enkovich wrote: > >>> #ifndef MPX_SPEC > >>> #define MPX_SPEC "\ > >>>-%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC "}}" > >>>+%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC LIBMPXWRAPPERS_SPEC "}}" > >>> #endif > >> > >>Ugh. Somehow I missed that MPX_SPEC was in gcc.c along with the uses of > >>LIBMPX_SPEC. Aren't all these target specific and thus belong in the x86 > >>specific files? > > > >Is config/i386/linux-common.h is a proper place for these specs then? > Depends on whether or not we expect MPX to show up on other systems > such as *bsd, mingw, solaris, etc. > > So I'd say linux-common.h is better than gcc.c, but perhaps not the > best location. Uros should chime in here. > > >Right. Wrappers code doesn't use anything specific to MPX. In case of > >pure software solution we should be able to compile and use this > >library without changes (except compilation flags). But in case pure > >software solution exists MPX option should still be available and we > >should have two builds for this library. > Ok. Just wanted to be sure I understood how the pieces fit > together. I don't really expect a software implementation, but > keeping it in mind helps us reasonably consider where certain things > belong implementation wise. > > jeff > Here is a version with linker specs moved into linux-common.h. Thanks, Ilya -- gcc/ 2014-12-09 Ilya Enkovich * config/i386/linux-common.h (LIBMPX_WRAPPERSSPEC): New. (CHKP_SPEC): Add wrappers library. * c-family/c.opt (static-libmpxwrappers): New. libmpx/ 2014-12-09 Ilya Enkovich * Makefile.am (SUBDIRS): Add mpxwrap when used AS supports MPX. (MAKEOVERRIDES): New. * Makefile.in: Regenerate. * configure.ac: Check AS supports MPX. Add mpxintr/Makefile to config files. * configure: Regenerate. * mpxwrap/Makefile.am: New. * mpxwrap/Makefile.in: New. * mpxwrap/libtool-version: New. * mpxwrap/mpx_wrappers.cc: New. * mpxwrap/libmpxwrappers.map: New. diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 65731cc..2632c3f 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1023,6 +1023,9 @@ Instrument only functions marked with bnd_instrument attribute. static-libmpx Driver +static-libmpxwrappers +Driver + fcilkplus C ObjC C++ ObjC++ LTO Report Var(flag_cilkplus) Init(0) Enable Cilk Plus diff --git a/gcc/config/i386/linux-common.h b/gcc/config/i386/linux-common.h index 07cd1a2..854af46 100644 --- a/gcc/config/i386/linux-common.h +++ b/gcc/config/i386/linux-common.h @@ -73,7 +73,21 @@ along with GCC; see the file COPYING3. If not see #endif #endif +#ifndef LIBMPXWRAPPERS_SPEC +#if defined(HAVE_LD_STATIC_DYNAMIC) +#define LIBMPXWRAPPERS_SPEC "\ +%{mmpx:%{fcheck-pointer-bounds:%{!fno-chkp-use-wrappers:\ +%{static:-lmpxwrappers}\ +%{!static:%{static-libmpxwrappers:" LD_STATIC_OPTION " --whole-archive}\ +-lmpxwrappers %{static-libmpxwrappers:--no-whole-archive "\ +LD_DYNAMIC_OPTION "}" +#else +#define LIBMPXWRAPPERS_SPEC "\ +%{mmpx:%{fcheck-pointer-bounds:{!fno-chkp-use-wrappers:-lmpxwrappers}}}" +#endif +#endif + #ifndef CHKP_SPEC #define CHKP_SPEC "\ -%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC "}}" +%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC LIBMPXWRAPPERS_SPEC "}}" #endif diff --git a/libmpx/Makefile.am b/libmpx/Makefile.am index 6cee4ac..bd0a8b6 100644 --- a/libmpx/Makefile.am +++ b/libmpx/Makefile.am @@ -2,6 +2,9 @@ ACLOCAL_AMFLAGS = -I .. -I ../config if LIBMPX_SUPPORTED SUBDIRS = mpxrt +if MPX_AS_SUPPORTED +SUBDIRS += mpxwrap +endif nodist_toolexeclib_HEADERS = libmpx.spec endif @@ -45,3 +48,5 @@ AM_MAKEFLAGS = \ "PICFLAG=$(PICFLAG)" \ "RANLIB=$(RANLIB)" \ "DESTDIR=$(DESTDIR)" + +MAKEOVERRIDES = diff --git a/libmpx/configure.ac b/libmpx/configure.ac index dbfad02..4669525 100644 --- a/libmpx/configure.ac +++ b/libmpx/configure.ac @@ -100,6 +100,18 @@ AC_CHECK_TOOL(AS, as) AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(RANLIB, ranlib, :) +# Check we may build wrappers library +echo "test: bndmov %bnd0, %bnd1" > conftest.s +if AC_TRY_COMMAND([$AS -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD]) +then +mpx_as=yes +else +mpx_as=no +echo "configure: no MPX support fo as" >&AS_MESSAGE_LOG_FD +fi +rm -f conftest.o conftest.s +AM_CONDITIONAL(MPX_AS_SUPPORTED, [test "x$mpx_as" = "xyes"]) + # Configure libtool AC_LIBTOOL_DLOPEN AM_PROG_LIBTOOL @@ -117,7 +129,7 @@ fi AC_CONFIG_FILES([Makefile libmpx.spec]) AC_CONFIG_HEADERS(config.h) -AC_CONFIG_FILES(AC_FOREACH([DIR], [mpxrt], [DIR/Makefile]), +AC_CONFIG_FILES(AC_FOREACH([DIR], [mpxrt mpxwrap], [DIR/Makefile ]), [cat > vpsed$$ << \_EOF s!`test -f '$<' || echo '$(srcdir)/'`!! _EOF diff --git a/libmpx/mpxwrap/Makefile.am b/libmpx/mpxwrap/Makefile.am new file mode 100644 index 000..c254d9b --- /dev/null +++ b/libmpx/mpxwrap/Makefile.am @@ -
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On 12/03/14 07:28, Ilya Enkovich wrote: #ifndef MPX_SPEC #define MPX_SPEC "\ -%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC "}}" +%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC LIBMPXWRAPPERS_SPEC "}}" #endif Ugh. Somehow I missed that MPX_SPEC was in gcc.c along with the uses of LIBMPX_SPEC. Aren't all these target specific and thus belong in the x86 specific files? Is config/i386/linux-common.h is a proper place for these specs then? Depends on whether or not we expect MPX to show up on other systems such as *bsd, mingw, solaris, etc. So I'd say linux-common.h is better than gcc.c, but perhaps not the best location. Uros should chime in here. Right. Wrappers code doesn't use anything specific to MPX. In case of pure software solution we should be able to compile and use this library without changes (except compilation flags). But in case pure software solution exists MPX option should still be available and we should have two builds for this library. Ok. Just wanted to be sure I understood how the pieces fit together. I don't really expect a software implementation, but keeping it in mind helps us reasonably consider where certain things belong implementation wise. jeff
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On 12/01/14 16:45, Joseph Myers wrote: On Mon, 1 Dec 2014, Jeff Law wrote: diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 8f5d76c..283c632 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1043,6 +1043,9 @@ Instrument only functions marked with bnd_instrument attribute. static-libmpx Driver +static-libmpxwrappers +Driver Isn't something more needed here? Driver --help output is still hardcoded in gcc.c rather than using help strings from .opt files. Ah, nevermind my comment then :-) jeff
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
2014-12-02 0:16 GMT+03:00 Jeff Law : > On 11/24/14 07:06, Ilya Enkovich wrote: >>> >>> Normally GCC target libraries assigned to the FSF would use GPL+exception >>> rather than LGPL (especially if the library might be linked in >>> statically), to keep predictable what requirements are imposed by linking >>> your program with GCC. libquadmath is an exception because it contains >>> LGPL code not assigned to the FSF. >> >> >> I'm OK to put it under GPL+exception. > > Well, if copyright is assigned to the FSF in the usual manner, then the FSF > can relicense as appropriate. > > >> >> diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt >> index 8f5d76c..283c632 100644 >> --- a/gcc/c-family/c.opt >> +++ b/gcc/c-family/c.opt >> @@ -1043,6 +1043,9 @@ Instrument only functions marked with bnd_instrument >> attribute. >> static-libmpx >> Driver >> >> +static-libmpxwrappers >> +Driver > > Isn't something more needed here? > >> + >> fcilkplus >> C ObjC C++ ObjC++ LTO Report Var(flag_cilkplus) Init(0) >> Enable Cilk Plus >> diff --git a/gcc/gcc.c b/gcc/gcc.c >> index 75e5767..aa8c9a3 100644 >> --- a/gcc/gcc.c >> +++ b/gcc/gcc.c >> @@ -828,9 +828,23 @@ proper position among the other output files. */ >> #endif >> #endif >> >> +#ifndef LIBMPXWRAPPERS_SPEC >> +#if defined(HAVE_LD_STATIC_DYNAMIC) >> +#define LIBMPXWRAPPERS_SPEC "\ >> +%{mmpx:%{fcheck-pointer-bounds:%{!fno-chkp-use-wrappers:\ >> +%{static:-lmpxwrappers}\ >> +%{!static:%{static-libmpxwrappers:" LD_STATIC_OPTION " >> --whole-archive}\ >> +-lmpxwrappers %{static-libmpxwrappers:--no-whole-archive "\ >> +LD_DYNAMIC_OPTION "}" >> +#else >> +#define LIBMPXWRAPPERS_SPEC "\ >> +%{mmpx:%{fcheck-pointer-bounds:{!fno-chkp-use-wrappers:-lmpxwrappers}}}" >> +#endif >> +#endif > > My concern here is we're embedding target specific bits (existence of -mmpx > flag) into gcc.c. Shouldn't this be buried in the x86 backend which is > allowed to know about the specifics? > > >> + >> #ifndef MPX_SPEC >> #define MPX_SPEC "\ >> -%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC "}}" >> +%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC LIBMPXWRAPPERS_SPEC "}}" >> #endif > > Ugh. Somehow I missed that MPX_SPEC was in gcc.c along with the uses of > LIBMPX_SPEC. Aren't all these target specific and thus belong in the x86 > specific files? Is config/i386/linux-common.h is a proper place for these specs then? > > Presumably all this is dependent on the libmpx bits being accepted, right > (and yes, I realize that I've got a TODO on that :-) > > And presumably the wrappers aren't really specific to MPX, they're a > mechanism for you to get more information to the checker, regardless of > whether it's MPX based on a pure software solution, right? Right. Wrappers code doesn't use anything specific to MPX. In case of pure software solution we should be able to compile and use this library without changes (except compilation flags). But in case pure software solution exists MPX option should still be available and we should have two builds for this library. Ilya > > Jeff
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On Mon, 1 Dec 2014, Jeff Law wrote: > > diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt > > index 8f5d76c..283c632 100644 > > --- a/gcc/c-family/c.opt > > +++ b/gcc/c-family/c.opt > > @@ -1043,6 +1043,9 @@ Instrument only functions marked with bnd_instrument > > attribute. > > static-libmpx > > Driver > > > > +static-libmpxwrappers > > +Driver > Isn't something more needed here? Driver --help output is still hardcoded in gcc.c rather than using help strings from .opt files. -- Joseph S. Myers jos...@codesourcery.com
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On 11/24/14 07:06, Ilya Enkovich wrote: Normally GCC target libraries assigned to the FSF would use GPL+exception rather than LGPL (especially if the library might be linked in statically), to keep predictable what requirements are imposed by linking your program with GCC. libquadmath is an exception because it contains LGPL code not assigned to the FSF. I'm OK to put it under GPL+exception. Well, if copyright is assigned to the FSF in the usual manner, then the FSF can relicense as appropriate. diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 8f5d76c..283c632 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1043,6 +1043,9 @@ Instrument only functions marked with bnd_instrument attribute. static-libmpx Driver +static-libmpxwrappers +Driver Isn't something more needed here? + fcilkplus C ObjC C++ ObjC++ LTO Report Var(flag_cilkplus) Init(0) Enable Cilk Plus diff --git a/gcc/gcc.c b/gcc/gcc.c index 75e5767..aa8c9a3 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -828,9 +828,23 @@ proper position among the other output files. */ #endif #endif +#ifndef LIBMPXWRAPPERS_SPEC +#if defined(HAVE_LD_STATIC_DYNAMIC) +#define LIBMPXWRAPPERS_SPEC "\ +%{mmpx:%{fcheck-pointer-bounds:%{!fno-chkp-use-wrappers:\ +%{static:-lmpxwrappers}\ +%{!static:%{static-libmpxwrappers:" LD_STATIC_OPTION " --whole-archive}\ +-lmpxwrappers %{static-libmpxwrappers:--no-whole-archive "\ +LD_DYNAMIC_OPTION "}" +#else +#define LIBMPXWRAPPERS_SPEC "\ +%{mmpx:%{fcheck-pointer-bounds:{!fno-chkp-use-wrappers:-lmpxwrappers}}}" +#endif +#endif My concern here is we're embedding target specific bits (existence of -mmpx flag) into gcc.c. Shouldn't this be buried in the x86 backend which is allowed to know about the specifics? + #ifndef MPX_SPEC #define MPX_SPEC "\ -%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC "}}" +%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC LIBMPXWRAPPERS_SPEC "}}" #endif Ugh. Somehow I missed that MPX_SPEC was in gcc.c along with the uses of LIBMPX_SPEC. Aren't all these target specific and thus belong in the x86 specific files? Presumably all this is dependent on the libmpx bits being accepted, right (and yes, I realize that I've got a TODO on that :-) And presumably the wrappers aren't really specific to MPX, they're a mechanism for you to get more information to the checker, regardless of whether it's MPX based on a pure software solution, right? Jeff
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On 21 Nov 23:32, Joseph Myers wrote: > On Fri, 21 Nov 2014, Ilya Enkovich wrote: > > > * c-family/c.opt (static-libmpxwrappers): New. > > New options need documenting in invoke.texi. This includes driver > options. > I'll include it into patch with all checker options documented bacause of options cross-references. > > diff --git a/libmpx/mpxwrap/mpx_wrappers.c b/libmpx/mpxwrap/mpx_wrappers.c > > new file mode 100644 > > index 000..bcff80f > > --- /dev/null > > +++ b/libmpx/mpxwrap/mpx_wrappers.c > > @@ -0,0 +1,258 @@ > > +/* MPX Wrappers Library > > + Copyright (C) 2014 Free Software Foundation, Inc. > > + Contributed by Ilya Enkovich (ilya.enkov...@intel.com) > > + > > + This file is part of the libmpxwrappers library. > > + > > + This library is free software; you can redistribute it and/or > > + modify it under the terms of the GNU Lesser General Public > > + License as published by the Free Software Foundation; either > > + version 2.1 of the License, or (at your option) any later version. > > + > > + This library is distributed in the hope that it will be useful, > > + but WITHOUT ANY WARRANTY; without even the implied warranty of > > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + Lesser General Public License for more details. > > + > > + You should have received a copy of the GNU Lesser General Public > > + License along with this library; if not, write to the Free Software > > + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 > > USA. */ > > Normally GCC target libraries assigned to the FSF would use GPL+exception > rather than LGPL (especially if the library might be linked in > statically), to keep predictable what requirements are imposed by linking > your program with GCC. libquadmath is an exception because it contains > LGPL code not assigned to the FSF. I'm OK to put it under GPL+exception. > > -- > Joseph S. Myers > jos...@codesourcery.com Here is an updated version. Thanks, Ilya -- gcc/ 2014-11-24 Ilya Enkovich * gcc.c (LIBMPX_WRAPPERSSPEC): New. (MPX_SPEC): Add wrappers library. * c-family/c.opt (static-libmpxwrappers): New. libmpx/ 2014-11-24 Ilya Enkovich * Makefile.am (SUBDIRS): Add mpxwrap when used AS supports MPX. (MAKEOVERRIDES): New. * Makefile.in: Regenerate. * configure.ac: Check AS supports MPX. Add mpxintr/Makefile to config files. * configure: Regenerate. * mpxwrap/Makefile.am: New. * mpxwrap/Makefile.in: New. * mpxwrap/libtool-version: New. * mpxwrap/mpx_wrappers.cc: New. * mpxwrap/libmpxwrappers.map: New. diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 8f5d76c..283c632 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1043,6 +1043,9 @@ Instrument only functions marked with bnd_instrument attribute. static-libmpx Driver +static-libmpxwrappers +Driver + fcilkplus C ObjC C++ ObjC++ LTO Report Var(flag_cilkplus) Init(0) Enable Cilk Plus diff --git a/gcc/gcc.c b/gcc/gcc.c index 75e5767..aa8c9a3 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -828,9 +828,23 @@ proper position among the other output files. */ #endif #endif +#ifndef LIBMPXWRAPPERS_SPEC +#if defined(HAVE_LD_STATIC_DYNAMIC) +#define LIBMPXWRAPPERS_SPEC "\ +%{mmpx:%{fcheck-pointer-bounds:%{!fno-chkp-use-wrappers:\ +%{static:-lmpxwrappers}\ +%{!static:%{static-libmpxwrappers:" LD_STATIC_OPTION " --whole-archive}\ +-lmpxwrappers %{static-libmpxwrappers:--no-whole-archive "\ +LD_DYNAMIC_OPTION "}" +#else +#define LIBMPXWRAPPERS_SPEC "\ +%{mmpx:%{fcheck-pointer-bounds:{!fno-chkp-use-wrappers:-lmpxwrappers}}}" +#endif +#endif + #ifndef MPX_SPEC #define MPX_SPEC "\ -%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC "}}" +%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC LIBMPXWRAPPERS_SPEC "}}" #endif /* -u* was put back because both BSD and SysV seem to support it. */ diff --git a/libmpx/Makefile.am b/libmpx/Makefile.am index 6cee4ac..bd0a8b6 100644 --- a/libmpx/Makefile.am +++ b/libmpx/Makefile.am @@ -2,6 +2,9 @@ ACLOCAL_AMFLAGS = -I .. -I ../config if LIBMPX_SUPPORTED SUBDIRS = mpxrt +if MPX_AS_SUPPORTED +SUBDIRS += mpxwrap +endif nodist_toolexeclib_HEADERS = libmpx.spec endif @@ -45,3 +48,5 @@ AM_MAKEFLAGS = \ "PICFLAG=$(PICFLAG)" \ "RANLIB=$(RANLIB)" \ "DESTDIR=$(DESTDIR)" + +MAKEOVERRIDES = diff --git a/libmpx/configure.ac b/libmpx/configure.ac index dbfad02..4669525 100644 --- a/libmpx/configure.ac +++ b/libmpx/configure.ac @@ -100,6 +100,18 @@ AC_CHECK_TOOL(AS, as) AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(RANLIB, ranlib, :) +# Check we may build wrappers library +echo "test: bndmov %bnd0, %bnd1" > conftest.s +if AC_TRY_COMMAND([$AS -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD]) +then +mpx_as=yes +else +mpx_as=no +echo "configure: no MPX support fo as" >&AS_MESSAGE_LOG_FD +fi +rm -f conftest.o
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On Fri, 21 Nov 2014, Ilya Enkovich wrote: > * c-family/c.opt (static-libmpxwrappers): New. New options need documenting in invoke.texi. This includes driver options. > diff --git a/libmpx/mpxwrap/mpx_wrappers.c b/libmpx/mpxwrap/mpx_wrappers.c > new file mode 100644 > index 000..bcff80f > --- /dev/null > +++ b/libmpx/mpxwrap/mpx_wrappers.c > @@ -0,0 +1,258 @@ > +/* MPX Wrappers Library > + Copyright (C) 2014 Free Software Foundation, Inc. > + Contributed by Ilya Enkovich (ilya.enkov...@intel.com) > + > + This file is part of the libmpxwrappers library. > + > + This library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + This library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with this library; if not, write to the Free Software > + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 > USA. */ Normally GCC target libraries assigned to the FSF would use GPL+exception rather than LGPL (especially if the library might be linked in statically), to keep predictable what requirements are imposed by linking your program with GCC. libquadmath is an exception because it contains LGPL code not assigned to the FSF. -- Joseph S. Myers jos...@codesourcery.com
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On 18 Nov 14:15, Jeff Law wrote: > On 11/18/14 09:48, Ilya Enkovich wrote: > >On 15 Nov 00:10, Jeff Law wrote: > >>On 11/14/14 10:26, Ilya Enkovich wrote: > >>>Hi, > >>> > >>>This patch introduces a simple library with several wrappers to be used > >>>with MPX and Pointer Bounds Checker. Wrappers allow to obtain, copy and > >>>just keep alive bounds whrough widely use library calls. It significantly > >>>increases checking quality. > >>> > >>>Thanks, > >>>Ilya > >>>-- > >>>gcc/ > >>> > >>>2014-11-14 Ilya Enkovich > >>> > >>> * gcc.c (MPX_SPEC): Add wrappers library. > >>> > >>>libmpx/ > >>> > >>>2014-11-14 Ilya Enkovich > >>> > >>> * Makefile.am (SUBDIRS): New. > >>> (MAKEOVERRIDES): New. > >>> * Makefile.in: Regenerate. > >>> * configure.ac: Add mpxintr/Makefile to config > >>> files. > >>> * configure: Regenerate. > >>> * mpxwrap/Makefile.am: New. > >>> * mpxwrap/Makefile.in: New. > >>> * mpxwrap/libtool-version: New. > >>> * mpxwrap/mpx_wrappers.cc: New. > >>As Joseph mentioned, symbol versioning. Anytime a target side > >>library is added to GCC, it should be properly versioned. > >> > >>Don't forget copyright headers in the new files. Remember it has to > >>be suitable for embeddeding in the target without infecting the > >>target with the GPL. LGPL or GPL + exception clause seem the most > >>appropriate to me. > >> > >> > >>Jeff > >> > > > >Thank you for review! Here is a version with license and versioning added. > > > >Thanks, > >Ilya > >-- > >gcc/ > > > >2014-11-18 Ilya Enkovich > > > > * gcc.c (MPX_SPEC): Add wrappers library. > > > >libmpx/ > > > >2014-11-18 Ilya Enkovich > > > > * Makefile.am (SUBDIRS): New. > > (MAKEOVERRIDES): New. > > * Makefile.in: Regenerate. > > * configure.ac: Add mpxintr/Makefile to config > > files. > > * configure: Regenerate. > > * mpxwrap/Makefile.am: New. > > * mpxwrap/Makefile.in: New. > > * mpxwrap/libtool-version: New. > > * mpxwrap/mpx_wrappers.cc: New. > > * mpxwrap/libmpxwrappers.map: New. > OK. > Jeff > Hi, There is a missing check in libmpx configure. We may try to build mpxwrappers when binutils don't support MPX and thus get build failure. I added a check for MPX support in used assembler and mpxwrappers library is now built conditionally. Since the latest version of runtime library supports static link, I also supported -static-libmpxwrappers option. Does it look OK? Thanks, Ilya -- gcc/ 2014-11-21 Ilya Enkovich * gcc.c (LIBMPX_WRAPPERSSPEC): New. (MPX_SPEC): Add wrappers library. * c-family/c.opt (static-libmpxwrappers): New. libmpx/ 2014-11-21 Ilya Enkovich * Makefile.am (SUBDIRS): Add mpxwrap when used AS supports MPX. (MAKEOVERRIDES): New. * Makefile.in: Regenerate. * configure.ac: Check AS supports MPX. Add mpxintr/Makefile to config files. * configure: Regenerate. * mpxwrap/Makefile.am: New. * mpxwrap/Makefile.in: New. * mpxwrap/libtool-version: New. * mpxwrap/mpx_wrappers.cc: New. * mpxwrap/libmpxwrappers.map: New. diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 8f5d76c..283c632 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1043,6 +1043,9 @@ Instrument only functions marked with bnd_instrument attribute. static-libmpx Driver +static-libmpxwrappers +Driver + fcilkplus C ObjC C++ ObjC++ LTO Report Var(flag_cilkplus) Init(0) Enable Cilk Plus diff --git a/gcc/gcc.c b/gcc/gcc.c index 75e5767..aa8c9a3 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -828,9 +828,23 @@ proper position among the other output files. */ #endif #endif +#ifndef LIBMPXWRAPPERS_SPEC +#if defined(HAVE_LD_STATIC_DYNAMIC) +#define LIBMPXWRAPPERS_SPEC "\ +%{mmpx:%{fcheck-pointer-bounds:%{!fno-chkp-use-wrappers:\ +%{static:-lmpxwrappers}\ +%{!static:%{static-libmpxwrappers:" LD_STATIC_OPTION " --whole-archive}\ +-lmpxwrappers %{static-libmpxwrappers:--no-whole-archive "\ +LD_DYNAMIC_OPTION "}" +#else +#define LIBMPXWRAPPERS_SPEC "\ +%{mmpx:%{fcheck-pointer-bounds:{!fno-chkp-use-wrappers:-lmpxwrappers}}}" +#endif +#endif + #ifndef MPX_SPEC #define MPX_SPEC "\ -%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC "}}" +%{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC LIBMPXWRAPPERS_SPEC "}}" #endif /* -u* was put back because both BSD and SysV seem to support it. */ diff --git a/libmpx/Makefile.am b/libmpx/Makefile.am index 6cee4ac..bd0a8b6 100644 --- a/libmpx/Makefile.am +++ b/libmpx/Makefile.am @@ -2,6 +2,9 @@ ACLOCAL_AMFLAGS = -I .. -I ../config if LIBMPX_SUPPORTED SUBDIRS = mpxrt +if MPX_AS_SUPPORTED +SUBDIRS += mpxwrap +endif nodist_toolexeclib_HEADERS = libmpx.spec endif @@ -45,3 +48,5 @@ AM_MAKEFLAGS = \ "PICFLAG=$(PICFLAG)" \ "RANLIB=$(RANLIB)" \ "DESTDIR=$(DESTDIR)" + +MAKEOVERRIDES = diff --git a/libmpx/configure.ac b/libmpx/configure.ac index bd7a5eb..180503c 100644 --
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On 11/18/14 09:48, Ilya Enkovich wrote: On 15 Nov 00:10, Jeff Law wrote: On 11/14/14 10:26, Ilya Enkovich wrote: Hi, This patch introduces a simple library with several wrappers to be used with MPX and Pointer Bounds Checker. Wrappers allow to obtain, copy and just keep alive bounds whrough widely use library calls. It significantly increases checking quality. Thanks, Ilya -- gcc/ 2014-11-14 Ilya Enkovich * gcc.c (MPX_SPEC): Add wrappers library. libmpx/ 2014-11-14 Ilya Enkovich * Makefile.am (SUBDIRS): New. (MAKEOVERRIDES): New. * Makefile.in: Regenerate. * configure.ac: Add mpxintr/Makefile to config files. * configure: Regenerate. * mpxwrap/Makefile.am: New. * mpxwrap/Makefile.in: New. * mpxwrap/libtool-version: New. * mpxwrap/mpx_wrappers.cc: New. As Joseph mentioned, symbol versioning. Anytime a target side library is added to GCC, it should be properly versioned. Don't forget copyright headers in the new files. Remember it has to be suitable for embeddeding in the target without infecting the target with the GPL. LGPL or GPL + exception clause seem the most appropriate to me. Jeff Thank you for review! Here is a version with license and versioning added. Thanks, Ilya -- gcc/ 2014-11-18 Ilya Enkovich * gcc.c (MPX_SPEC): Add wrappers library. libmpx/ 2014-11-18 Ilya Enkovich * Makefile.am (SUBDIRS): New. (MAKEOVERRIDES): New. * Makefile.in: Regenerate. * configure.ac: Add mpxintr/Makefile to config files. * configure: Regenerate. * mpxwrap/Makefile.am: New. * mpxwrap/Makefile.in: New. * mpxwrap/libtool-version: New. * mpxwrap/mpx_wrappers.cc: New. * mpxwrap/libmpxwrappers.map: New. OK. Jeff
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On 15 Nov 00:10, Jeff Law wrote: > On 11/14/14 10:26, Ilya Enkovich wrote: > >Hi, > > > >This patch introduces a simple library with several wrappers to be used with > >MPX and Pointer Bounds Checker. Wrappers allow to obtain, copy and just > >keep alive bounds whrough widely use library calls. It significantly > >increases checking quality. > > > >Thanks, > >Ilya > >-- > >gcc/ > > > >2014-11-14 Ilya Enkovich > > > > * gcc.c (MPX_SPEC): Add wrappers library. > > > >libmpx/ > > > >2014-11-14 Ilya Enkovich > > > > * Makefile.am (SUBDIRS): New. > > (MAKEOVERRIDES): New. > > * Makefile.in: Regenerate. > > * configure.ac: Add mpxintr/Makefile to config > > files. > > * configure: Regenerate. > > * mpxwrap/Makefile.am: New. > > * mpxwrap/Makefile.in: New. > > * mpxwrap/libtool-version: New. > > * mpxwrap/mpx_wrappers.cc: New. > As Joseph mentioned, symbol versioning. Anytime a target side > library is added to GCC, it should be properly versioned. > > Don't forget copyright headers in the new files. Remember it has to > be suitable for embeddeding in the target without infecting the > target with the GPL. LGPL or GPL + exception clause seem the most > appropriate to me. > > > Jeff > Thank you for review! Here is a version with license and versioning added. Thanks, Ilya -- gcc/ 2014-11-18 Ilya Enkovich * gcc.c (MPX_SPEC): Add wrappers library. libmpx/ 2014-11-18 Ilya Enkovich * Makefile.am (SUBDIRS): New. (MAKEOVERRIDES): New. * Makefile.in: Regenerate. * configure.ac: Add mpxintr/Makefile to config files. * configure: Regenerate. * mpxwrap/Makefile.am: New. * mpxwrap/Makefile.in: New. * mpxwrap/libtool-version: New. * mpxwrap/mpx_wrappers.cc: New. * mpxwrap/libmpxwrappers.map: New. diff --git a/gcc/gcc.c b/gcc/gcc.c index 8ee7bba..56d7e79 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -811,9 +811,10 @@ proper position among the other output files. */ #ifndef MPX_SPEC #define MPX_SPEC "\ -%{!nostdlib:%{!nodefaultlibs:%{mmpx:\ +%{!nostdlib:%{!nodefaultlibs:%{mmpx:%{fcheck-pointer-bounds:\ %{static:%nMPX runtime is disabled due to -static used}\ -%{!static:-lmpx" +%{!static:-lmpx}\ +%{!fno-chkp-use-wrappers:-lmpxwrappers}" #endif /* -u* was put back because both BSD and SysV seem to support it. */ diff --git a/libmpx/Makefile.am b/libmpx/Makefile.am index c6b479f..553ad30 100644 --- a/libmpx/Makefile.am +++ b/libmpx/Makefile.am @@ -1,6 +1,9 @@ ACLOCAL_AMFLAGS = -I .. -I ../config -SUBDIRS = mpxrt +SUBDIRS = mpxrt mpxwrap + +## May be used by toolexeclibdir. +gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) # Work around what appears to be a GNU make bug handling MAKEFLAGS # values defined in terms of make variables, as is the case for CC and @@ -39,3 +42,5 @@ AM_MAKEFLAGS = \ "PICFLAG=$(PICFLAG)" \ "RANLIB=$(RANLIB)" \ "DESTDIR=$(DESTDIR)" + +MAKEOVERRIDES = diff --git a/libmpx/configure.ac b/libmpx/configure.ac index 9a761c4..f3abead 100644 --- a/libmpx/configure.ac +++ b/libmpx/configure.ac @@ -110,7 +110,7 @@ fi AC_CONFIG_FILES([Makefile]) AC_CONFIG_HEADERS(config.h) -AC_CONFIG_FILES(AC_FOREACH([DIR], [mpxrt], [DIR/Makefile]), +AC_CONFIG_FILES(AC_FOREACH([DIR], [mpxrt mpxwrap], [DIR/Makefile ]), [cat > vpsed$$ << \_EOF s!`test -f '$<' || echo '$(srcdir)/'`!! _EOF diff --git a/libmpx/mpxwrap/Makefile.am b/libmpx/mpxwrap/Makefile.am new file mode 100644 index 000..c254d9b --- /dev/null +++ b/libmpx/mpxwrap/Makefile.am @@ -0,0 +1,54 @@ +ALCLOCAL_AMFLAGS = -I .. -I ../config + +# May be used by toolexeclibdir. +gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) + +libmpxwrappers_la_CFLAGS = -fcheck-pointer-bounds -mmpx -fno-chkp-check-read \ + -fno-chkp-check-write -fno-chkp-use-wrappers +libmpxwrappers_la_DEPENDENCIES = libmpxwrappers.map +libmpxwrappers_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libmpxwrappers.map + +toolexeclib_LTLIBRARIES = libmpxwrappers.la + +libmpxwrappers_la_SOURCES = mpx_wrappers.c + +# Work around what appears to be a GNU make bug handling MAKEFLAGS +# values defined in terms of make variables, as is the case for CC and +# friends when we are called from the top level Makefile. +AM_MAKEFLAGS = \ + "AR_FLAGS=$(AR_FLAGS)" \ + "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ + "CFLAGS=$(CFLAGS)" \ + "CXXFLAGS=$(CXXFLAGS)" \ + "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ + "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ + "JC1FLAGS=$(JC1FLAGS)" \ + "LDFLAGS=$(LDFLAGS)" \ + "LIBCFLAGS=$(LIBCFLAGS)" \ + "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \ + "MAKE=$(MAKE)" \ + "MAKEINFO=$(MAKEINFO) $(MAKEINF
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On 11/14/14 10:26, Ilya Enkovich wrote: Hi, This patch introduces a simple library with several wrappers to be used with MPX and Pointer Bounds Checker. Wrappers allow to obtain, copy and just keep alive bounds whrough widely use library calls. It significantly increases checking quality. Thanks, Ilya -- gcc/ 2014-11-14 Ilya Enkovich * gcc.c (MPX_SPEC): Add wrappers library. libmpx/ 2014-11-14 Ilya Enkovich * Makefile.am (SUBDIRS): New. (MAKEOVERRIDES): New. * Makefile.in: Regenerate. * configure.ac: Add mpxintr/Makefile to config files. * configure: Regenerate. * mpxwrap/Makefile.am: New. * mpxwrap/Makefile.in: New. * mpxwrap/libtool-version: New. * mpxwrap/mpx_wrappers.cc: New. As Joseph mentioned, symbol versioning. Anytime a target side library is added to GCC, it should be properly versioned. Don't forget copyright headers in the new files. Remember it has to be suitable for embeddeding in the target without infecting the target with the GPL. LGPL or GPL + exception clause seem the most appropriate to me. Jeff
Re: [PATCH, MPX wrappers 1/3] Add MPX wrappers library
On Fri, 14 Nov 2014, Ilya Enkovich wrote: > Hi, > > This patch introduces a simple library with several wrappers to be used > with MPX and Pointer Bounds Checker. Wrappers allow to obtain, copy and > just keep alive bounds whrough widely use library calls. It > significantly increases checking quality. Please use symbol versioning in the new library (so the exported functions are versioned at some symbol version, and any functions added in future for GCC 6 that aren't in the version shipped with GCC 5 get a new symbol version, and so on). -- Joseph S. Myers jos...@codesourcery.com
[PATCH, MPX wrappers 1/3] Add MPX wrappers library
Hi, This patch introduces a simple library with several wrappers to be used with MPX and Pointer Bounds Checker. Wrappers allow to obtain, copy and just keep alive bounds whrough widely use library calls. It significantly increases checking quality. Thanks, Ilya -- gcc/ 2014-11-14 Ilya Enkovich * gcc.c (MPX_SPEC): Add wrappers library. libmpx/ 2014-11-14 Ilya Enkovich * Makefile.am (SUBDIRS): New. (MAKEOVERRIDES): New. * Makefile.in: Regenerate. * configure.ac: Add mpxintr/Makefile to config files. * configure: Regenerate. * mpxwrap/Makefile.am: New. * mpxwrap/Makefile.in: New. * mpxwrap/libtool-version: New. * mpxwrap/mpx_wrappers.cc: New. diff --git a/gcc/gcc.c b/gcc/gcc.c index 200704b..cf028ed 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -806,9 +806,10 @@ proper position among the other output files. */ #ifndef MPX_SPEC #define MPX_SPEC "\ -%{!nostdlib:%{!nodefaultlibs:%{mmpx:\ +%{!nostdlib:%{!nodefaultlibs:%{mmpx:%{fcheck-pointer-bounds:\ %{static:%nMPX runtime is disabled due to -static used}\ -%{!static:-lmpx" +%{!static:-lmpx}\ +%{!fno-chkp-use-wrappers:-lmpxwrappers}" #endif /* -u* was put back because both BSD and SysV seem to support it. */ diff --git a/libmpx/Makefile.am b/libmpx/Makefile.am index c6b479f..553ad30 100644 --- a/libmpx/Makefile.am +++ b/libmpx/Makefile.am @@ -1,6 +1,9 @@ ACLOCAL_AMFLAGS = -I .. -I ../config -SUBDIRS = mpxrt +SUBDIRS = mpxrt mpxwrap + +## May be used by toolexeclibdir. +gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) # Work around what appears to be a GNU make bug handling MAKEFLAGS # values defined in terms of make variables, as is the case for CC and @@ -39,3 +42,5 @@ AM_MAKEFLAGS = \ "PICFLAG=$(PICFLAG)" \ "RANLIB=$(RANLIB)" \ "DESTDIR=$(DESTDIR)" + +MAKEOVERRIDES = diff --git a/libmpx/configure.ac b/libmpx/configure.ac index 9a761c4..f3abead 100644 --- a/libmpx/configure.ac +++ b/libmpx/configure.ac @@ -110,7 +110,7 @@ fi AC_CONFIG_FILES([Makefile]) AC_CONFIG_HEADERS(config.h) -AC_CONFIG_FILES(AC_FOREACH([DIR], [mpxrt], [DIR/Makefile]), +AC_CONFIG_FILES(AC_FOREACH([DIR], [mpxrt mpxwrap], [DIR/Makefile ]), [cat > vpsed$$ << \_EOF s!`test -f '$<' || echo '$(srcdir)/'`!! _EOF diff --git a/libmpx/mpxwrap/Makefile.am b/libmpx/mpxwrap/Makefile.am new file mode 100644 index 000..bad206d --- /dev/null +++ b/libmpx/mpxwrap/Makefile.am @@ -0,0 +1,52 @@ +ALCLOCAL_AMFLAGS = -I .. -I ../config + +# May be used by toolexeclibdir. +gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) + +libmpxwrappers_la_CFLAGS = -fcheck-pointer-bounds -mmpx -fno-chkp-check-read \ + -fno-chkp-check-write -fno-chkp-use-wrappers + +toolexeclib_LTLIBRARIES = libmpxwrappers.la + +libmpxwrappers_la_SOURCES = mpx_wrappers.c + +# Work around what appears to be a GNU make bug handling MAKEFLAGS +# values defined in terms of make variables, as is the case for CC and +# friends when we are called from the top level Makefile. +AM_MAKEFLAGS = \ + "AR_FLAGS=$(AR_FLAGS)" \ + "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ + "CFLAGS=$(CFLAGS)" \ + "CXXFLAGS=$(CXXFLAGS)" \ + "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ + "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ + "JC1FLAGS=$(JC1FLAGS)" \ + "LDFLAGS=$(LDFLAGS)" \ + "LIBCFLAGS=$(LIBCFLAGS)" \ + "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \ + "MAKE=$(MAKE)" \ + "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ + "PICFLAG=$(PICFLAG)" \ + "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \ + "SHELL=$(SHELL)" \ + "RUNTESTFLAGS=$(RUNTESTFLAGS)" \ + "exec_prefix=$(exec_prefix)" \ + "infodir=$(infodir)" \ + "libdir=$(libdir)" \ + "prefix=$(prefix)" \ + "includedir=$(includedir)" \ + "AR=$(AR)" \ + "AS=$(AS)" \ + "LD=$(LD)" \ + "LIBCFLAGS=$(LIBCFLAGS)" \ + "NM=$(NM)" \ + "PICFLAG=$(PICFLAG)" \ + "RANLIB=$(RANLIB)" \ + "DESTDIR=$(DESTDIR)" + +MAKEOVERRIDES = + diff --git a/libmpx/mpxwrap/libtool-version b/libmpx/mpxwrap/libtool-version new file mode 100644 index 000..bfe84c8 --- /dev/null +++ b/libmpx/mpxwrap/libtool-version @@ -0,0 +1,6 @@ +# This file is used to maintain libtool version info for libmpxintr. See +# the libtool manual to understand the meaning of the fields. This is +# a separate file so that version updates don't involve re-running +# automake. +# CURRENT:REVISION:AGE +1:0:0 diff --git a/libmpx/mpxwrap/mpx_wrappers.c b/libmpx/mpxwrap/mpx_wrappers.c new file mode 100644 index 000..5285da4 --- /dev/null +++ b/libmpx/mpxwrap/mpx_wrappers.c @@ -0,0 +1,238 @@ +#include "stdlib.h" +#include "string.h" +#include + +void *