demangle-rust-v0-test.c 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // SPDX-License-Identifier: Apache-2.0 OR MIT
  2. #include "tests.h"
  3. #include "debug.h"
  4. #include "symbol.h"
  5. #include <linux/kernel.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. static int test__demangle_rust(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
  9. {
  10. int ret = TEST_OK;
  11. char *buf = NULL;
  12. size_t i;
  13. struct {
  14. const char *mangled, *demangled;
  15. } test_cases[] = {
  16. { "_RNvMsr_NtCs3ssYzQotkvD_3std4pathNtB5_7PathBuf3newCs15kBYyAo9fc_7mycrate",
  17. "<std::path::PathBuf>::new" },
  18. { "_RNvCs15kBYyAo9fc_7mycrate7example",
  19. "mycrate::example" },
  20. { "_RNvMs_Cs4Cv8Wi1oAIB_7mycrateNtB4_7Example3foo",
  21. "<mycrate::Example>::foo" },
  22. { "_RNvXCs15kBYyAo9fc_7mycrateNtB2_7ExampleNtB2_5Trait3foo",
  23. "<mycrate::Example as mycrate::Trait>::foo" },
  24. { "_RNvMCs7qp2U7fqm6G_7mycrateNtB2_7Example3foo",
  25. "<mycrate::Example>::foo" },
  26. { "_RNvMs_Cs7qp2U7fqm6G_7mycrateNtB4_7Example3bar",
  27. "<mycrate::Example>::bar" },
  28. { "_RNvYNtCs15kBYyAo9fc_7mycrate7ExampleNtB4_5Trait7exampleB4_",
  29. "<mycrate::Example as mycrate::Trait>::example" },
  30. { "_RNCNvCsgStHSCytQ6I_7mycrate4main0B3_",
  31. "mycrate::main::{closure#0}" },
  32. { "_RNCNvCsgStHSCytQ6I_7mycrate4mains_0B3_",
  33. "mycrate::main::{closure#1}" },
  34. { "_RINvCsgStHSCytQ6I_7mycrate7examplelKj1_EB2_",
  35. "mycrate::example::<i32, 1>" },
  36. { "_RINvCs7qp2U7fqm6G_7mycrate7exampleFG0_RL1_hRL0_tEuEB2_",
  37. "mycrate::example::<for<'a, 'b> fn(&'a u8, &'b u16)>",
  38. },
  39. { "_RINvCs7qp2U7fqm6G_7mycrate7exampleKy12345678_EB2_",
  40. "mycrate::example::<305419896>" },
  41. { "_RNvNvMCsd9PVOYlP1UU_7mycrateINtB4_7ExamplepKpE3foo14EXAMPLE_STATIC",
  42. "<mycrate::Example<_, _>>::foo::EXAMPLE_STATIC",
  43. },
  44. { "_RINvCs7qp2U7fqm6G_7mycrate7exampleAtj8_EB2_",
  45. "mycrate::example::<[u16; 8]>" },
  46. { "_RINvCs7qp2U7fqm6G_7mycrate7exampleNtB2_7ExampleBw_EB2_",
  47. "mycrate::example::<mycrate::Example, mycrate::Example>" },
  48. { "_RINvMsY_NtCseXNvpPnDBDp_3std4pathNtB6_4Path3neweECs7qp2U7fqm6G_7mycrate",
  49. "<std::path::Path>::new::<str>" },
  50. { "_RNvNvNvCs7qp2U7fqm6G_7mycrate7EXAMPLE7___getit5___KEY",
  51. "mycrate::EXAMPLE::__getit::__KEY" },
  52. };
  53. for (i = 0; i < ARRAY_SIZE(test_cases); i++) {
  54. buf = dso__demangle_sym(/*dso=*/NULL, /*kmodule=*/0, test_cases[i].mangled);
  55. if (!buf) {
  56. pr_debug("FAILED to demangle: \"%s\"\n \"%s\"\n", test_cases[i].mangled,
  57. test_cases[i].demangled);
  58. continue;
  59. }
  60. if (strcmp(buf, test_cases[i].demangled)) {
  61. pr_debug("FAILED: %s: %s != %s\n", test_cases[i].mangled,
  62. buf, test_cases[i].demangled);
  63. ret = TEST_FAIL;
  64. }
  65. free(buf);
  66. }
  67. return ret;
  68. }
  69. DEFINE_SUITE("Demangle Rust", demangle_rust);