add -b mode that prints "demangled" (mangled) so both are visible
diff --git a/demumble.cc b/demumble.cc
index 0363b45..531f83d 100644
--- a/demumble.cc
+++ b/demumble.cc
@@ -15,6 +15,7 @@
"if symbols are unspecified, reads from stdin.\n"
"\n"
"options:\n"
+" -b print both demangled and mangled name\n"
" -m only print mangled names that were demangled, omit other output\n"
" -u use unbuffered output\n"
" --version print demumble version (\"%s\")\n", kDemumbleVersion);
@@ -24,15 +25,15 @@
return strncmp(s, prefix, strlen(prefix)) == 0;
}
-static void print_demangled(const char* s) {
+static void print_demangled(const char* format, const char* s) {
const char* cxa_in = s;
if (starts_with(s, "__Z") || starts_with(s, "____Z"))
cxa_in += 1;
if (char* itanium = llvm::itaniumDemangle(cxa_in, NULL, NULL, NULL)) {
- printf("%s", itanium);
+ printf(format, itanium, s);
free(itanium);
} else if (char* ms = llvm::microsoftDemangle(s, NULL, NULL, NULL)) {
- printf("%s", ms);
+ printf(format, ms, s);
free(ms);
} else {
printf("%s", s);
@@ -61,10 +62,13 @@
static char buf[8192];
int main(int argc, char* argv[]) {
enum { kPrintAll, kPrintMatching } print_mode = kPrintAll;
+ const char* print_format = "%s";
while (argc > 1 && argv[1][0] == '-') {
if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) {
print_help(stdout);
return 0;
+ } else if (strcmp(argv[1], "-b") == 0) {
+ print_format = "\"%s\" (%s)";
} else if (strcmp(argv[1], "-m") == 0) {
print_mode = kPrintMatching;
} else if (strcmp(argv[1], "-u") == 0) {
@@ -85,7 +89,7 @@
++argv;
}
for (int i = 1; i < argc; ++i) {
- print_demangled(argv[i]);
+ print_demangled(print_format, argv[i]);
printf("\n");
}
if (argc == 1) { // Read stdin instead.
@@ -125,7 +129,7 @@
char tmp = cur[n_sym];
cur[n_sym] = '\0';
- print_demangled(cur);
+ print_demangled(print_format, cur);
need_separator = true;
cur[n_sym] = tmp;
diff --git a/demumble_test.py b/demumble_test.py
index e53d467..7df0ae9 100755
--- a/demumble_test.py
+++ b/demumble_test.py
@@ -23,11 +23,15 @@
'.invocation function for block in blocksNRVO()\n'),
('demumble -m < .____Z10blocksNRVOv_block_invoke',
'invocation function for block in blocksNRVO()\n'),
+ ('demumble -- -b', '-b\n'),
('demumble -- -m', '-m\n'),
('demumble -- -h', '-h\n'),
('demumble -h', re.compile('.*usage: demumble.*')),
('demumble --help', re.compile('.*usage: demumble.*')),
('demumble --version', re.compile('.*\..*')),
+ ('demumble -b hello', 'hello\n'),
+ ('demumble -b _Z1fv', '"f()" (_Z1fv)\n'),
+ ('demumble -b < _Z1fv', '"f()" (_Z1fv)\n'),
]
status = 0