aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>1997-10-14 19:10:45 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>1997-10-14 19:10:45 +0000
commit8f71bf1d543bc7f8060e71577454e7cf1283fe57 (patch)
treeb6cfbdffaad259ea4ff8c43d7e1e9abb33446d1f
parentf65e414240ee016cf507291d503077291abd3616 (diff)
Tue Oct 14 12:01:00 1997 Mark Mitchell <mmitchell@usa.net>
* cplus-dem.c (demangle_signature): Don't look for return types on constructors. Handle member template constructors. and update from devo. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@15901 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--libiberty/ChangeLog62
-rw-r--r--libiberty/Makefile.in2
-rw-r--r--libiberty/README7
-rw-r--r--libiberty/argv.c57
-rw-r--r--libiberty/config.table2
-rw-r--r--libiberty/config/mh-windows2
-rw-r--r--libiberty/cplus-dem.c81
-rw-r--r--libiberty/functions.def1
-rw-r--r--libiberty/pexecute.c55
-rw-r--r--libiberty/vasprintf.c4
10 files changed, 260 insertions, 13 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index a2c2274c938..b0dc9dca2ba 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,30 @@
+Tue Oct 14 12:01:00 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * cplus-dem.c (demangle_signature): Don't look for return types on
+ constructors. Handle member template constructors.
+
+Fri Oct 3 17:53:30 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * README: Fix configuration instructions.
+
+Mon Sep 29 12:28:41 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * pexecute.c: Update to current version from /gd/gnu/lib:
+
+ Mon Sep 29 12:27:59 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * pexecute.c: Use spawn if __CYGWIN32__.
+
+ 1997-08-08 Paul Eggert <eggert@twinsun.com>
+
+ * pexecute.c: Include "config.h" first, as per autoconf manual.
+
+ Fri Jun 27 15:20:29 1997 Scott Christley <scottc@net-community.com>
+
+ * pexecute.c (fix_argv): New function.
+ (pexecute): Win32 but not Cygwin32 needs its arguments fixed.
+ Add underscore to cwait function call.
+
Sun Sep 28 12:00:52 1997 Mark Mitchell <mmitchell@usa.net>
* cplus-dem.c (demangle_template): Add new parameter. Handle new
@@ -5,6 +32,31 @@ Sun Sep 28 12:00:52 1997 Mark Mitchell <mmitchell@usa.net>
(consume_count_with_underscores): New function.
(demangle_signature): Handle new name-mangling scheme.
+Sun Sep 28 12:00:52 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * cplus-dem.c (demangle_template): Add new parameter. Handle new
+ template-function mangling.
+ (consume_count_with_underscores): New function.
+ (demangle_signature): Handle new name-mangling scheme.
+
+Wed Sep 24 00:31:59 1997 Felix Lee <flee@yin.cygnus.com>
+
+ * asprintf.c: stdarg.h when ALMOST_STDC
+ * config/mh-windows (EXTRA_OFILES): add asprintf.o and
+ strncasecmp.o.
+
+Thu Aug 28 14:27:15 1997 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * vasprintf.c (vasprintf): Allow for _BSD_VA_LIST_.
+
+ * config.table: Add case for FreeBSD 2.1 and 2.2, needs mh-fbsd21.
+
+ * config/mh-fbsd21 (EXTRA_OFILES): Force vasprintf.o
+
+Wed Sep 10 12:43:10 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * cplus-dem.c (demangle_fund_type): Change "complex" to "__complex".
+
Tue Sep 9 19:39:12 1997 Jim Wilson <wilson@cygnus.com>
* Makefile.in (install_to_libdir, install_to_tooldir): Add MULTISUBDIR
@@ -14,11 +66,21 @@ Fri Sep 5 17:28:50 1997 Jim Wilson <wilson@cygnus.com>
* Makefile.in (distclean): Do MULTICLEAN before deleting Makefile.
+Fri Sep 5 16:34:42 1997 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * asprintf.c (asprintf): New file.
+ * Makefile.in (CFILES): Add asprintf.c
+ * functions.def: Ditto.
+
Wed Sep 3 14:35:52 1997 Jim Wilson <wilson@cygnus.com>
* Makefile.in (stamp-needed, stamp-config): Add MULTISRCTOP to
pathname for move-if-change.
+Thu Aug 28 18:53:34 1997 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * argv.c (dupargv): New function, duplicate an argument vector.
+
Tue Aug 19 20:28:45 1997 Geoffrey Noer <noer@cygnus.com>
* config/mh-cygwin32: also build random.o
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
index 64a3defaf0f..9d0f914d308 100644
--- a/libiberty/Makefile.in
+++ b/libiberty/Makefile.in
@@ -146,7 +146,7 @@ HFILES =
# NOTE: If you add new files to the library, add them to this list
# (alphabetical), and add them to REQUIRED_OFILES or 'functions.def'.
-CFILES = alloca.c argv.c atexit.c basename.c bcmp.c bcopy.c bzero.c \
+CFILES = asprintf.c alloca.c argv.c atexit.c basename.c bcmp.c bcopy.c bzero.c \
choose-temp.c clock.c concat.c cplus-dem.c fdmatch.c fnmatch.c \
getcwd.c getopt.c getopt1.c getpagesize.c getruntime.c \
floatformat.c hex.c index.c insque.c \
diff --git a/libiberty/README b/libiberty/README
index 5081bbac196..92dc202929b 100644
--- a/libiberty/README
+++ b/libiberty/README
@@ -11,10 +11,9 @@ Current members include:
We expect many of the GNU subroutines that are floating around to
eventually arrive here.
-To build the library, do:
-
- ./configure HOSTTYPE
- make
+The library must be configured from the top source directory. Don't
+try to run configure in this directory. Follow the configuration
+instructions in ../README.
Please report bugs and fixes to "bug-gnu-utils@prep.ai.mit.edu". Thank you.
diff --git a/libiberty/argv.c b/libiberty/argv.c
index 60694f919bb..824a0298836 100644
--- a/libiberty/argv.c
+++ b/libiberty/argv.c
@@ -72,6 +72,63 @@ extern char *strdup (); /* Duplicate a string */
NAME
+ dupargv -- duplicate an argument vector
+
+SYNOPSIS
+
+ char **dupargv (vector)
+ char **vector;
+
+DESCRIPTION
+
+ Duplicate an argument vector. Simply scans through the
+ vector, duplicating each argument argument until the
+ terminating NULL is found.
+
+RETURNS
+
+ Returns a pointer to the argument vector if
+ successful. Returns NULL if there is insufficient memory to
+ complete building the argument vector.
+
+*/
+
+char **
+dupargv (argv)
+ char **argv;
+{
+ int argc;
+ char **copy;
+
+ if (argv == NULL)
+ return NULL;
+
+ /* the vector */
+ for (argc = 0; argv[argc] != NULL; argc++);
+ copy = (char **) malloc ((argc + 1) * sizeof (char *));
+ if (copy == NULL)
+ return NULL;
+
+ /* the strings */
+ for (argc = 0; argv[argc] != NULL; argc++)
+ {
+ int len = strlen (argv[argc]);
+ copy[argc] = malloc (sizeof (char *) * (len + 1));
+ if (copy[argc] == NULL)
+ {
+ freeargv (copy);
+ return NULL;
+ }
+ strcpy (copy[argc], argv[argc]);
+ }
+ copy[argc] = NULL;
+ return copy;
+}
+
+/*
+
+NAME
+
freeargv -- free an argument vector
SYNOPSIS
diff --git a/libiberty/config.table b/libiberty/config.table
index dba783b489f..484761c5190 100644
--- a/libiberty/config.table
+++ b/libiberty/config.table
@@ -10,6 +10,8 @@ case "${host}" in
*-*-cxux7*) frag=mh-cxux7 ;;
*-*-cygwin32) frag=mh-cygwin32 ;;
*-*-dgux*) frag=mh-sysv ;;
+ *-*-freebsd2.1.*) frag=mh-fbsd21 ;;
+ *-*-freebsd2.2.*) frag=mh-fbsd21 ;;
hppa*-hp-bsd*) frag=mh-hpbsd ;;
*-*-hpux*) frag=mh-hpux ;;
*-*-hiux*) frag=mh-hpux ;;
diff --git a/libiberty/config/mh-windows b/libiberty/config/mh-windows
index f20c51f2191..3dbd6ef694a 100644
--- a/libiberty/config/mh-windows
+++ b/libiberty/config/mh-windows
@@ -1,2 +1,2 @@
HDEFINES=-DNEED_basename -DNEED_sys_siglist -DNEED_strsignal -DNO_SYS_FILE_H
-EXTRA_OFILES=strcasecmp.o vasprintf.o
+EXTRA_OFILES=asprintf.o strcasecmp.o strncasecmp.o vasprintf.o
diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c
index 055ab0818e5..6f6c390c686 100644
--- a/libiberty/cplus-dem.c
+++ b/libiberty/cplus-dem.c
@@ -293,6 +293,9 @@ string_prependn PARAMS ((string *, const char *, int));
static int
get_count PARAMS ((const char **, int *));
+static int
+consume_count_with_underscores PARAMS ((const char**));
+
static int
consume_count PARAMS ((const char **));
@@ -377,6 +380,42 @@ consume_count_with_underscores (mangled)
return idx;
}
+
+/* Like consume_count, but for counts that are preceeded and followed
+ by '_' if they are greater than 10. Also, -1 is returned for
+ failure, since 0 can be a valid value. */
+
+static int
+consume_count_with_underscores (mangled)
+ const char **mangled;
+{
+ int idx;
+
+ if (**mangled == '_')
+ {
+ (*mangled)++;
+ if (!isdigit (**mangled))
+ return -1;
+
+ idx = consume_count (mangled);
+ if (**mangled != '_')
+ /* The trailing underscore was missing. */
+ return -1;
+
+ (*mangled)++;
+ }
+ else
+ {
+ if (**mangled < '0' || **mangled > '9')
+ return -1;
+
+ idx = **mangled - '0';
+ (*mangled)++;
+ }
+
+ return idx;
+}
+
int
cplus_demangle_opname (opname, result, options)
const char *opname;
@@ -831,7 +870,8 @@ demangle_signature (work, mangled, declp)
{
/* A G++ template function. Read the template arguments. */
success = demangle_template (work, mangled, declp, 0, 0);
- expect_return_type = 1;
+ if (!(work->constructor & 1))
+ expect_return_type = 1;
(*mangled)++;
break;
}
@@ -1534,7 +1574,8 @@ demangle_prefix (work, mangled, declp)
}
}
else if ((scan == *mangled)
- && (isdigit (scan[2]) || (scan[2] == 'Q') || (scan[2] == 't')))
+ && (isdigit (scan[2]) || (scan[2] == 'Q') || (scan[2] == 't')
+ || (scan[2] == 'H')))
{
/* The ARM says nothing about the mangling of local variables.
But cfront mangles local variables by prepending __<nesting_level>
@@ -1551,7 +1592,8 @@ demangle_prefix (work, mangled, declp)
{
/* A GNU style constructor starts with __[0-9Qt]. But cfront uses
names like __Q2_3foo3bar for nested type names. So don't accept
- this style of constructor for cfront demangling. */
+ this style of constructor for cfront demangling. A GNU
+ style member-template constructor starts with 'H'. */
if (!(LUCID_DEMANGLING || ARM_DEMANGLING))
work -> constructor += 1;
*mangled = scan + 2;
@@ -2345,6 +2387,37 @@ do_type (work, mangled, result)
}
break;
+ case 'X':
+ case 'Y':
+ /* A template parm. We substitute the corresponding argument. */
+ {
+ int idx;
+ int lvl;
+
+ (*mangled)++;
+ idx = consume_count_with_underscores (mangled);
+
+ if (idx == -1
+ || (work->tmpl_argvec && idx >= work->ntmpl_args)
+ || consume_count_with_underscores (mangled) == -1)
+ {
+ success = 0;
+ break;
+ }
+
+ if (work->tmpl_argvec)
+ string_append (result, work->tmpl_argvec[idx]);
+ else
+ {
+ char buf[10];
+ sprintf(buf, "T%d", idx);
+ string_append (result, buf);
+ }
+
+ success = 1;
+ }
+ break;
+
default:
success = demangle_fund_type (work, mangled, result);
break;
@@ -2423,7 +2496,7 @@ demangle_fund_type (work, mangled, result)
case 'J':
(*mangled)++;
APPEND_BLANK (result);
- string_append (result, "complex");
+ string_append (result, "__complex");
break;
default:
done = 1;
diff --git a/libiberty/functions.def b/libiberty/functions.def
index aeed4c69c3b..6c14c9bfd51 100644
--- a/libiberty/functions.def
+++ b/libiberty/functions.def
@@ -9,6 +9,7 @@
* the corresponding function in libc.
*/
+DEF(asprintf, int, (), NOTHING)
DEF(atexit, int, (f), void (*f)())
DEF(bcmp, int, (s1, s2, length), char *s1 AND char *s2 AND int length )
DEF(bcopy, void, (s1, s2, length), char *s1 AND char *s2 AND int length )
diff --git a/libiberty/pexecute.c b/libiberty/pexecute.c
index ab5f392780c..b8594eb0954 100644
--- a/libiberty/pexecute.c
+++ b/libiberty/pexecute.c
@@ -23,11 +23,14 @@ Boston, MA 02111-1307, USA. */
/* This file lives in at least two places: libiberty and gcc.
Don't change one without the other. */
+#ifdef IN_GCC
+#include "config.h"
+#endif
+
#include <stdio.h>
#include <errno.h>
#ifdef IN_GCC
-#include "config.h"
#include "gansidecl.h"
/* ??? Need to find a suitable header file. */
#define PEXECUTE_FIRST 1
@@ -223,6 +226,51 @@ pwait (pid, status, flags)
extern int _spawnv ();
extern int _spawnvp ();
+#ifdef __CYGWIN32__
+
+#define fix_argv(argvec) (argvec)
+
+#else
+
+/* This is a kludge to get around the Microsoft C spawn functions' propensity
+ to remove the outermost set of double quotes from all arguments. */
+
+const char * const *
+fix_argv (argvec)
+ char **argvec;
+{
+ int i;
+
+ for (i = 1; argvec[i] != 0; i++)
+ {
+ int len, j;
+ char *temp, *newtemp;
+
+ temp = argvec[i];
+ len = strlen (temp);
+ for (j = 0; j < len; j++)
+ {
+ if (temp[j] == '"')
+ {
+ newtemp = xmalloc (len + 2);
+ strncpy (newtemp, temp, j);
+ newtemp [j] = '\\';
+ strncpy (&newtemp [j+1], &temp [j], len-j);
+ newtemp [len+1] = 0;
+ temp = newtemp;
+ len++;
+ j++;
+ }
+ }
+
+ argvec[i] = temp;
+ }
+
+ return (const char * const *) argvec;
+}
+
+#endif /* ! defined (__CYGWIN32__) */
+
int
pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
const char *program;
@@ -236,7 +284,8 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
if ((flags & PEXECUTE_ONE) != PEXECUTE_ONE)
abort ();
- pid = (flags & PEXECUTE_SEARCH ? _spawnvp : _spawnv) (_P_NOWAIT, program, argv);
+ pid = (flags & PEXECUTE_SEARCH ? _spawnvp : _spawnv)
+ (_P_NOWAIT, program, fix_argv(argv));
if (pid == -1)
{
*errmsg_fmt = install_error_msg;
@@ -254,7 +303,7 @@ pwait (pid, status, flags)
{
/* ??? Here's an opportunity to canonicalize the values in STATUS.
Needed? */
- return cwait (status, pid, WAIT_CHILD);
+ return _cwait (status, pid, WAIT_CHILD);
}
#endif /* _WIN32 */
diff --git a/libiberty/vasprintf.c b/libiberty/vasprintf.c
index 3794cbd2c4f..38e84680461 100644
--- a/libiberty/vasprintf.c
+++ b/libiberty/vasprintf.c
@@ -118,7 +118,11 @@ int
vasprintf (result, format, args)
char **result;
const char *format;
+#if defined (_BSD_VA_LIST_) && defined (__FreeBSD__)
+ _BSD_VA_LIST_ args;
+#else
va_list args;
+#endif
{
return int_vasprintf (result, format, &args);
}