aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPer Bothner <per@bothner.com>2004-07-13 10:19:14 -0700
committerPer Bothner <bothner@gcc.gnu.org>2004-07-13 10:19:14 -0700
commit27605cbe23b16fc978ec153a8cfd9f414b005ffd (patch)
tree6fd6a44f63731331e55c822b1b0b17c5a3961bbe /gcc
parent56cf8686a1031e6cf8760a4aeb46fb022b8ccdfe (diff)
downloadgcc-27605cbe23b16fc978ec153a8cfd9f414b005ffd.zip
gcc-27605cbe23b16fc978ec153a8cfd9f414b005ffd.tar.gz
gcc-27605cbe23b16fc978ec153a8cfd9f414b005ffd.tar.bz2
* collect2.c (main): Handle --no-demangle and --demangle flags.
From-SVN: r84631
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/collect2.c35
2 files changed, 37 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5e87e5e..67fcce1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2004-07-13 Per Bothner <per@bothner.com>
+
+ * collect2.c (main): Handle --no-demangle and --demangle flags.
+
2004-07-13 Sebastian Pop <pop@cri.ensmp.fr>
* Makefile.in (OBJS-common): Add tree-data-ref.o.
diff --git a/gcc/collect2.c b/gcc/collect2.c
index 79f7885..2edbea8 100644
--- a/gcc/collect2.c
+++ b/gcc/collect2.c
@@ -185,6 +185,7 @@ enum pass {
int vflag; /* true if -v */
static int rflag; /* true if -r */
static int strip_flag; /* true if -s */
+static const char *demangle_flag;
#ifdef COLLECT_EXPORT_LIST
static int export_flag; /* true if -bE */
static int aix64_flag; /* true if -b64 */
@@ -1070,8 +1071,10 @@ main (int argc, char **argv)
first_file = 1;
#ifdef HAVE_LD_DEMANGLE
- if (!no_demangle)
- *ld1++ = *ld2++ = "--demangle";
+ if (!demangle_flag && !no_demangle)
+ demangle_flag = "--demangle";
+ if (demangle_flag)
+ *ld1++ = *ld2++ = demangle_flag;
#endif
while ((arg = *++argv) != (char *) 0)
{
@@ -1167,6 +1170,34 @@ main (int argc, char **argv)
if (arg[2] == '\0')
vflag = 1;
break;
+
+ case '-':
+ if (strcmp (arg, "--no-demangle") == 0)
+ {
+ demangle_flag = arg;
+ no_demangle = 1;
+ ld1--;
+ ld2--;
+ }
+ else if (strncmp (arg, "--demangle", 10) == 0)
+ {
+ demangle_flag = arg;
+ no_demangle = 0;
+#ifndef HAVE_LD_DEMANGLE
+ if (arg[10] == '=')
+ {
+ enum demangling_styles style
+ = cplus_demangle_name_to_style (arg+11);
+ if (style == unknown_demangling)
+ error ("unknown demangling style '%s'", arg+11);
+ else
+ current_demangling_style = style;
+ }
+#endif
+ ld1--;
+ ld2--;
+ }
+ break;
}
}
else if ((p = strrchr (arg, '.')) != (char *) 0