|
13 | 13 | #include "maps.h"
|
14 | 14 | #include "symbol.h"
|
15 | 15 | #include "symsrc.h"
|
16 |
| -#include "demangle-cxx.h" |
17 |
| -#include "demangle-ocaml.h" |
18 |
| -#include "demangle-java.h" |
19 |
| -#include "demangle-rust-v0.h" |
20 | 16 | #include "machine.h"
|
21 | 17 | #include "vdso.h"
|
22 | 18 | #include "debug.h"
|
23 | 19 | #include "util/copyfile.h"
|
24 | 20 | #include <linux/ctype.h>
|
25 | 21 | #include <linux/kernel.h>
|
26 |
| -#include <linux/log2.h> |
27 | 22 | #include <linux/zalloc.h>
|
28 | 23 | #include <linux/string.h>
|
29 | 24 | #include <symbol/kallsyms.h>
|
@@ -280,82 +275,6 @@ static int elf_read_program_header(Elf *elf, u64 vaddr, GElf_Phdr *phdr)
|
280 | 275 | return -1;
|
281 | 276 | }
|
282 | 277 |
|
283 |
| -static bool want_demangle(bool is_kernel_sym) |
284 |
| -{ |
285 |
| - return is_kernel_sym ? symbol_conf.demangle_kernel : symbol_conf.demangle; |
286 |
| -} |
287 |
| - |
288 |
| -/* |
289 |
| - * Demangle C++ function signature, typically replaced by demangle-cxx.cpp |
290 |
| - * version. |
291 |
| - */ |
292 |
| -#ifndef HAVE_CXA_DEMANGLE_SUPPORT |
293 |
| -char *cxx_demangle_sym(const char *str __maybe_unused, bool params __maybe_unused, |
294 |
| - bool modifiers __maybe_unused) |
295 |
| -{ |
296 |
| -#ifdef HAVE_LIBBFD_SUPPORT |
297 |
| - int flags = (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0); |
298 |
| - |
299 |
| - return bfd_demangle(NULL, str, flags); |
300 |
| -#elif defined(HAVE_CPLUS_DEMANGLE_SUPPORT) |
301 |
| - int flags = (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0); |
302 |
| - |
303 |
| - return cplus_demangle(str, flags); |
304 |
| -#else |
305 |
| - return NULL; |
306 |
| -#endif |
307 |
| -} |
308 |
| -#endif /* !HAVE_CXA_DEMANGLE_SUPPORT */ |
309 |
| - |
310 |
| -static char *demangle_sym(struct dso *dso, int kmodule, const char *elf_name) |
311 |
| -{ |
312 |
| - struct demangle rust_demangle = { |
313 |
| - .style = DemangleStyleUnknown, |
314 |
| - }; |
315 |
| - char *demangled = NULL; |
316 |
| - |
317 |
| - /* |
318 |
| - * We need to figure out if the object was created from C++ sources |
319 |
| - * DWARF DW_compile_unit has this, but we don't always have access |
320 |
| - * to it... |
321 |
| - */ |
322 |
| - if (!want_demangle((dso && dso__kernel(dso)) || kmodule)) |
323 |
| - return demangled; |
324 |
| - |
325 |
| - rust_demangle_demangle(elf_name, &rust_demangle); |
326 |
| - if (rust_demangle_is_known(&rust_demangle)) { |
327 |
| - /* A rust mangled name. */ |
328 |
| - if (rust_demangle.mangled_len == 0) |
329 |
| - return demangled; |
330 |
| - |
331 |
| - for (size_t buf_len = roundup_pow_of_two(rust_demangle.mangled_len * 2); |
332 |
| - buf_len < 1024 * 1024; buf_len += 32) { |
333 |
| - char *tmp = realloc(demangled, buf_len); |
334 |
| - |
335 |
| - if (!tmp) { |
336 |
| - /* Failure to grow output buffer, return what is there. */ |
337 |
| - return demangled; |
338 |
| - } |
339 |
| - demangled = tmp; |
340 |
| - if (rust_demangle_display_demangle(&rust_demangle, demangled, buf_len, |
341 |
| - /*alternate=*/true) == OverflowOk) |
342 |
| - return demangled; |
343 |
| - } |
344 |
| - /* Buffer exceeded sensible bounds, return what is there. */ |
345 |
| - return demangled; |
346 |
| - } |
347 |
| - |
348 |
| - demangled = cxx_demangle_sym(elf_name, verbose > 0, verbose > 0); |
349 |
| - if (demangled) |
350 |
| - return demangled; |
351 |
| - |
352 |
| - demangled = ocaml_demangle_sym(elf_name); |
353 |
| - if (demangled) |
354 |
| - return demangled; |
355 |
| - |
356 |
| - return java_demangle_sym(elf_name, JAVA_DEMANGLE_NORET); |
357 |
| -} |
358 |
| - |
359 | 278 | struct rel_info {
|
360 | 279 | u32 nr_entries;
|
361 | 280 | u32 *sorted;
|
@@ -641,7 +560,7 @@ static bool get_plt_got_name(GElf_Shdr *shdr, size_t i,
|
641 | 560 | /* Get the associated symbol */
|
642 | 561 | gelf_getsym(di->dynsym_data, vr->sym_idx, &sym);
|
643 | 562 | sym_name = elf_sym__name(&sym, di->dynstr_data);
|
644 |
| - demangled = demangle_sym(di->dso, 0, sym_name); |
| 563 | + demangled = dso__demangle_sym(di->dso, /*kmodule=*/0, sym_name); |
645 | 564 | if (demangled != NULL)
|
646 | 565 | sym_name = demangled;
|
647 | 566 |
|
@@ -839,7 +758,7 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct symsrc *ss)
|
839 | 758 | gelf_getsym(syms, get_rel_symidx(&ri, idx), &sym);
|
840 | 759 |
|
841 | 760 | elf_name = elf_sym__name(&sym, symstrs);
|
842 |
| - demangled = demangle_sym(dso, 0, elf_name); |
| 761 | + demangled = dso__demangle_sym(dso, /*kmodule=*/0, elf_name); |
843 | 762 | if (demangled)
|
844 | 763 | elf_name = demangled;
|
845 | 764 | if (*elf_name)
|
@@ -868,11 +787,6 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct symsrc *ss)
|
868 | 787 | return 0;
|
869 | 788 | }
|
870 | 789 |
|
871 |
| -char *dso__demangle_sym(struct dso *dso, int kmodule, const char *elf_name) |
872 |
| -{ |
873 |
| - return demangle_sym(dso, kmodule, elf_name); |
874 |
| -} |
875 |
| - |
876 | 790 | /*
|
877 | 791 | * Align offset to 4 bytes as needed for note name and descriptor data.
|
878 | 792 | */
|
@@ -1861,7 +1775,7 @@ dso__load_sym_internal(struct dso *dso, struct map *map, struct symsrc *syms_ss,
|
1861 | 1775 | }
|
1862 | 1776 | }
|
1863 | 1777 |
|
1864 |
| - demangled = demangle_sym(dso, kmodule, elf_name); |
| 1778 | + demangled = dso__demangle_sym(dso, kmodule, elf_name); |
1865 | 1779 | if (demangled != NULL)
|
1866 | 1780 | elf_name = demangled;
|
1867 | 1781 |
|
|
0 commit comments