OSDN Git Service

* gcc.c (set_multilib_dir): Don't access *end.
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 5 Oct 2002 18:55:54 +0000 (18:55 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 5 Oct 2002 18:55:54 +0000 (18:55 +0000)
Use memcpy instead of strncpy.  Don't write beyond malloced buffer.
(print_multilib_info): Don't show paths starting with ".:".
* genmultilib: Add new option, "yes" if multilibs are enabled.
Update comments.  If multilibs not enabled, print .:${osdirout}
for each directory.  If multilibs are enabled, always print
${dirout}:${osdirout}, even if the two are the same.
* Makefile.in (s-mlib): Pass @enable_multilib@ to genmultilib.
Pass all MULTILIB_* variables to genmultilib even if
--disable-multilib but MULTILIB_OSDIRNAMES is not empty.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@57846 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/Makefile.in
gcc/gcc.c
gcc/genmultilib

index c8b988f..2019210 100644 (file)
@@ -1,3 +1,16 @@
+2002-10-05  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.c (set_multilib_dir): Don't access *end.
+       Use memcpy instead of strncpy.  Don't write beyond malloced buffer.
+       (print_multilib_info): Don't show paths starting with ".:".
+       * genmultilib: Add new option, "yes" if multilibs are enabled.
+       Update comments.  If multilibs not enabled, print .:${osdirout}
+       for each directory.  If multilibs are enabled, always print
+       ${dirout}:${osdirout}, even if the two are the same.
+       * Makefile.in (s-mlib): Pass @enable_multilib@ to genmultilib.
+       Pass all MULTILIB_* variables to genmultilib even if
+       --disable-multilib but MULTILIB_OSDIRNAMES is not empty.
+
 2002-10-04  Bruce Korb  <bkorb@gnu.org>
 
        * fixinc/inclhack.def(hpux11_abs):  use format fix
index edf9557..61a61b7 100644 (file)
@@ -1061,7 +1061,8 @@ libgcc.a: $(LIBGCC_DEPS)
 # switches.
 multilib.h: s-mlib; @true
 s-mlib: $(srcdir)/genmultilib Makefile
-       if test @enable_multilib@ = yes; then \
+       if test @enable_multilib@ = yes \
+          || test -n "$(MULTILIB_OSDIRNAMES)"; then \
          $(SHELL) $(srcdir)/genmultilib \
            "$(MULTILIB_OPTIONS)" \
            "$(MULTILIB_DIRNAMES)" \
@@ -1070,9 +1071,11 @@ s-mlib: $(srcdir)/genmultilib Makefile
            "$(MULTILIB_EXTRA_OPTS)" \
            "$(MULTILIB_EXCLUSIONS)" \
            "$(MULTILIB_OSDIRNAMES)" \
+           "@enable_multilib@" \
            > tmp-mlib.h; \
        else \
-         $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' > tmp-mlib.h; \
+         $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' no \
+           > tmp-mlib.h; \
        fi
        $(SHELL) $(srcdir)/move-if-change tmp-mlib.h multilib.h
        $(STAMP) s-mlib
index b9794fe..167dde7 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -6926,11 +6926,11 @@ set_multilib_dir ()
 
          while (q < end && *q != ':')
            q++;
-         if (*q == ':')
+         if (q < end)
            {
              char *new_multilib_os_dir = xmalloc (end - q);
-             strncpy (new_multilib_os_dir, q + 1, end - q - 1);
-             new_multilib_os_dir[end - q] = '\0';
+             memcpy (new_multilib_os_dir, q + 1, end - q - 1);
+             new_multilib_os_dir[end - q - 1] = '\0';
              multilib_os_dir = new_multilib_os_dir;
              break;
            }
@@ -6986,6 +6986,12 @@ print_multilib_info ()
          ++p;
        }
 
+      /* When --disable-multilib was used but target defines
+        MULTILIB_OSDIRNAMES, entries starting with .: are there just
+        to find multilib_os_dir, so skip them from output.  */
+      if (this_path[0] == '.' && this_path[1] == ':')
+       skip = 1;
+
       /* Check for matches with the multilib_exclusions. We don't bother
          with the '!' in either list. If any of the exclusion rules match
          all of its options with the select rule, we skip it.  */
index c687537..ca3b71b 100644 (file)
@@ -68,6 +68,9 @@
 # The difference is that second argument describes multilib directories
 # in GCC conventions, while this one the OS multilib convention.
 
+# The last option should be "yes" if multilibs are enabled.  If it is not
+# "yes", all GCC multilib dir names will be ".".
+
 # The output looks like
 #   #define MULTILIB_MATCHES "\
 #   SUBDIRECTORY OPTIONS;\
@@ -85,7 +88,7 @@
 #   genmultilib 'm64/m32 mno-app-regs|mcmodel=medany' '64 32 alt'
 #              'mcmodel?medany=mcmodel?medmid' 'm32/mno-app-regs* m32/mcmodel=*'
 #              '' 'm32/!m64/mno-app-regs m32/!m64/mcmodel=medany'
-#              '../lib64 ../lib32 alt'
+#              '../lib64 ../lib32 alt' yes
 # This produces:
 #   ". !m64 !m32 !mno-app-regs !mcmodel=medany;",
 #   "64:../lib64 m64 !m32 !mno-app-regs !mcmodel=medany;",
@@ -113,6 +116,7 @@ exceptions=$4
 extra=$5
 exclusions=$6
 osdirnames=$7
+enable_multilib=$8
 
 echo "static const char *const multilib_raw[] = {"
 
@@ -292,9 +296,18 @@ for combo in ${combinations}; do
     osdirout=`echo ${combo} | sed ${toosdirnames}`
     # Remove the leading and trailing slashes.
     osdirout=`echo ${osdirout} | sed -e 's|^/||' -e 's|/$||g'`
-    if [ "x${dirout}" != "x${osdirout}" ]; then
+    if [ "x${enable_multilib}" != xyes ]; then
+      dirout=".:${osdirout}"
+    else
       dirout="${dirout}:${osdirout}"
     fi
+  else
+    if [ "x${enable_multilib}" != xyes ]; then
+      # genmultilib with --disable-multilib should be
+      # called with '' '' '' '' '' '' '' no
+      # if MULTILIB_OSDIRNAMES is empty.
+      exit 1
+    fi
   fi
 
   # Look through the options.  We must output each option that is