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
This commit is contained in:
Jakub Jelinek 2002-10-05 20:55:54 +02:00 committed by Jakub Jelinek
parent d758c1db6b
commit c49d2df6cc
4 changed files with 42 additions and 7 deletions

View 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

View 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

View File

@ -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. */

View 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