diff options
author | Per Bothner <per@bothner.com> | 2004-07-13 10:19:14 -0700 |
---|---|---|
committer | Per Bothner <bothner@gcc.gnu.org> | 2004-07-13 10:19:14 -0700 |
commit | 27605cbe23b16fc978ec153a8cfd9f414b005ffd (patch) | |
tree | 6fd6a44f63731331e55c822b1b0b17c5a3961bbe /gcc | |
parent | 56cf8686a1031e6cf8760a4aeb46fb022b8ccdfe (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/collect2.c | 35 |
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 |