aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2002-10-05 20:55:54 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2002-10-05 20:55:54 +0200
commitc49d2df6cc3675364f51c5b4b9e35840edfb312e (patch)
tree3f08c124b012b43d45c6dc5317707ba5f8e5e905 /gcc
parentd758c1db6bad001b7ff82cf36d075de21fa75e05 (diff)
downloadgcc-c49d2df6cc3675364f51c5b4b9e35840edfb312e.zip
gcc-c49d2df6cc3675364f51c5b4b9e35840edfb312e.tar.gz
gcc-c49d2df6cc3675364f51c5b4b9e35840edfb312e.tar.bz2
gcc.c (set_multilib_dir): Don't access *end.
* 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. From-SVN: r57846
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/Makefile.in7
-rw-r--r--gcc/gcc.c12
-rw-r--r--gcc/genmultilib17
4 files changed, 42 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c8b988f..2019210 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index edf9557..61a61b7 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -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
diff --git a/gcc/gcc.c b/gcc/gcc.c
index b9794fe..167dde7 100644
--- 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. */
diff --git a/gcc/genmultilib b/gcc/genmultilib
index c687537..ca3b71b 100644
--- a/gcc/genmultilib
+++ b/gcc/genmultilib
@@ -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