13 typedef void* (*malloc_func_t)(size_t);
20 unsigned short int flags);
27 "usage: demumble [options] [symbols...]\n"
29 "if symbols are unspecified, reads from stdin.\n"
32 " -m only print mangled names that were demangled, omit other output\n"
33 " -u use unbuffered output\n"
42 const char* cxa_in = s;
48 }
else if (
char* ms =
__unDName(NULL, s, 0, &malloc, &free, 0)) {
57 return (
c >=
'a' &&
c <=
'z') || (
c >=
'A' &&
c <=
'Z') ||
58 (
c >=
'0' &&
c <=
'9') ||
c ==
'_';
62 return (
c >=
'a' &&
c <=
'z') || (
c >=
'A' &&
c <=
'Z') ||
63 (
c >=
'0' &&
c <=
'9') || strchr(
"?_@$",
c);
72 return strstr(
prefix,
"_Z");
75 static char buf[8192];
76 int main(
int argc,
char* argv[]) {
77 enum { kPrintAll, kPrintMatching } print_mode = kPrintAll;
78 while (argc > 1 && argv[1][0] ==
'-') {
79 if (strcmp(argv[1],
"-h") == 0 || strcmp(argv[1],
"--help") == 0) {
82 }
else if (strcmp(argv[1],
"-m") == 0) {
83 print_mode = kPrintMatching;
84 }
else if (strcmp(argv[1],
"-u") == 0) {
86 }
else if (strcmp(argv[1],
"--version") == 0) {
89 }
else if (strcmp(argv[1],
"--") == 0) {
94 fprintf(
stderr,
"demumble: unrecognized option `%s'\n", argv[1]);
101 for (
int i = 1;
i < argc; ++
i) {
111 bool need_separator =
false;
116 size_t special = strcspn(
cur,
"_?");
117 if (print_mode == kPrintAll)
118 printf(
"%.*s",
static_cast<int>(special),
cur);
119 else if (need_separator)
121 need_separator =
false;
134 if (print_mode == kPrintAll)
143 need_separator =
true;