[arm] Allow explicit periods to be escaped in
authorRichard Earnshaw <rearnsha@arm.com>
Fri, 16 Jun 2017 21:05:08 +0000 (21:05 +0000)
committerRichard Earnshaw <rearnsha@gcc.gnu.org>
Fri, 16 Jun 2017 21:05:08 +0000 (21:05 +0000)
The MULTILIB_REUSE mapping rules are built up using periods to
represent the placement of '=' signs in the command line syntax.  This
presents a problem if the option contains an explicit period because
that is translated unconditionally.  The result is that it is not
currently possible to write a reuse rule that would match the
ARMv8-M mainline architecture:

-march=armv8-m.main

To fix this, this patch allows an explicit period to be escaped by writing
\. and by then preserving the period into the generated multilib header.

* genmultilib (multilib_reuse): Allow an explicit period to be escaped
with a backslash.  Remove the backslash after substituting unescaped
periods.
* doc/fragments.texi (MULTILIB_REUSE): Document it.

From-SVN: r249298

gcc/ChangeLog
gcc/doc/fragments.texi
gcc/genmultilib

index 35ded57c1cf13829f42152333efa15d09f3fe450..d20d0aa4ebf68a96eba7048f08abbe5c20e54345 100644 (file)
@@ -1,3 +1,10 @@
+2017-06-16  Richard Earnshaw  <rearnsha@arm.com>
+
+       * genmultilib (multilib_reuse): Allow an explicit period to be escaped
+       with a backslash.  Remove the backslash after substituting unescaped
+       periods.
+       * doc/fragments.texi (MULTILIB_REUSE): Document it.
+
 2017-06-16  Richard Earnshaw  <rearnsha@arm.com>
 
        * config.gcc: (arm*-*-*): When building a-profile libraries, force
index d68be7ad0ed3e1f3c869fc42b350d3a96dbff928..6aef5537f437a602fa28d1504ed0b2eab5a17a35 100644 (file)
@@ -160,10 +160,12 @@ A reuse rule is comprised of two parts connected by equality sign.  The left
 part is the option set used to build multilib and the right part is the option
 set that will reuse this multilib.  Both parts should only use options
 specified in @code{MULTILIB_OPTIONS} and the equality signs found in options
-name should be replaced with periods.  The order of options in the left part
-matters and should be same with those specified in @code{MULTILIB_REQUIRED} or
-aligned with the order in @code{MULTILIB_OPTIONS}.  There is no such limitation
-for options in the right part as we don't build multilib from them.
+name should be replaced with periods.  An explicit period in the rule can be
+escaped by preceding it with a backslash.  The order of options in the left
+part matters and should be same with those specified in
+@code{MULTILIB_REQUIRED} or aligned with the order in @code{MULTILIB_OPTIONS}.
+There is no such limitation for options in the right part as we don't build
+multilib from them.
 
 @code{MULTILIB_REUSE} is different from @code{MULTILIB_MATCHES} in that it
 sets up relations between two option sets rather than two options.  Here is an
index 2501f547a938ade63b738b8ad91b4bd317487b8e..c8bcdf3935da194918172c2afe84abb24c8ea5b8 100644 (file)
@@ -466,8 +466,8 @@ echo "static const char *const multilib_reuse_raw[] = {"
 for rrule in ${multilib_reuse}; do
   # The left part of the rule are the options we used to build multilib.
   # The right part of the rule are the options that can reuse this multilib.
-  combo=`echo ${rrule} | sed -e 's/=.*$//' -e 's/\./=/g'`
-  copts=`echo ${rrule} | sed -e 's/^.*=//' -e 's/\./=/g'`
+  combo=`echo ${rrule} | sed -e 's/=.*$//' -e 's/\([^\\]\)\./\1=/g' -e 's/\\\././g'`
+  copts=`echo ${rrule} | sed -e 's/^.*=//' -e 's/\([^\\]\)\./\1=/g' -e 's/\\\././g'`
   # The variable ${combinations} are the option combinations we will build
   # multilib from.  If the combination in the left part of reuse rule isn't
   # in this variable, it means no multilib will be built for current reuse