mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-13 07:14:25 +08:00
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:
parent
d758c1db6b
commit
c49d2df6cc
@ -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
|
||||
|
@ -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
|
||||
|
12
gcc/gcc.c
12
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. */
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user