@@ -110,7 +110,8 @@ import {
110110 openocd_getConfigList ,
111111 pyocd_getTargetList ,
112112 generateDotnetProgramCmd ,
113- isGccFamilyToolchain
113+ isGccFamilyToolchain ,
114+ cxxDemangle
114115} from './utility' ;
115116import { concatSystemEnvPath , DeleteDir , exeSuffix , kill , osType , DeleteAllChildren , userhome , getGlobalState } from './Platform' ;
116117import { KeilARMOption , KeilC51Option , KeilParser , KeilRteDependence } from './KeilXmlParser' ;
@@ -1834,6 +1835,7 @@ class ProjectDataProvider implements vscode.TreeDataProvider<ProjTreeItem>, vsco
18341835 let elftool = '' ;
18351836 let elfcmds = [ '' ] ;
18361837 let elfsort = false ; // elftool has sorted ?
1838+ let cxxfilt : string | undefined ; // c++filt tools
18371839
18381840 let staMatcher : RegExp | undefined ;
18391841 let endMatcher : RegExp | undefined ;
@@ -1887,6 +1889,7 @@ class ProjectDataProvider implements vscode.TreeDataProvider<ProjTreeItem>, vsco
18871889 case 'MTI_GCC' :
18881890 elfpath = prj . getExecutablePath ( ) ;
18891891 elftool = [ toolchain . getToolchainDir ( ) . path , 'bin' , `${ toolchainPrefix } nm${ exeSuffix ( ) } ` ] . join ( File . sep ) ;
1892+ cxxfilt = [ toolchain . getToolchainDir ( ) . path , 'bin' , `${ toolchainPrefix } c++filt${ exeSuffix ( ) } ` ] . join ( File . sep ) ;
18901893 elfcmds = sortType == 'size' ? [ '-l' , '-S' , '--size-sort' , elfpath ] : [ '-ln' , '-S' , elfpath ] ;
18911894 elfsort = true ;
18921895 symMatcher = / ^ (?< addr > [ 0 - 9 a - f ] + ) \s + (?< size > [ 0 - 9 a - f ] + \s + ) ? (?< type > \w ) \s + (?< name > [ ^ \s ] + ) \s + (?< loca > .* ) / i;
@@ -1914,6 +1917,7 @@ class ProjectDataProvider implements vscode.TreeDataProvider<ProjTreeItem>, vsco
19141917 // 20011c14 00000001 B __lock___libc_recursive_mutex
19151918 elfpath = prj . getExecutablePath ( ) ;
19161919 elftool = [ toolchain . getToolchainDir ( ) . path , 'bin' , `llvm-nm${ exeSuffix ( ) } ` ] . join ( File . sep ) ;
1920+ cxxfilt = [ toolchain . getToolchainDir ( ) . path , 'bin' , `llvm-cxxfilt${ exeSuffix ( ) } ` ] . join ( File . sep ) ;
19171921 elfcmds = sortType == 'size' ? [ '-l' , '-S' , '--size-sort' , elfpath ] : [ '-ln' , '-S' , elfpath ] ;
19181922 elfsort = true ;
19191923 symMatcher = / ^ (?< addr > [ 0 - 9 a - f ] + ) \s + (?< size > [ 0 - 9 a - f ] + \s + ) ? (?< type > \w ) \s + (?< name > [ ^ \s ] + ) \s + (?< loca > .* ) / i;
@@ -2040,6 +2044,10 @@ class ProjectDataProvider implements vscode.TreeDataProvider<ProjTreeItem>, vsco
20402044 let name = m . groups [ 'name' ] ?. trim ( ) ;
20412045 let loca = m . groups [ 'loca' ] ?. trim ( ) ;
20422046
2047+ // C++ symbol name demangler
2048+ if ( cxxfilt )
2049+ name = cxxDemangle ( name , cxxfilt ) ;
2050+
20432051 if ( ! addr || ! name ) {
20442052 continue ;
20452053 }
0 commit comments