Embedded Memory Explorer Name Demangling Fails

Sysprogs forums Forums VisualGDB Embedded Memory Explorer Name Demangling Fails

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #37048
    Dan712
    Participant

    Embedded Memory Explorer fails to Demangle some template names.  I believe this may have to do with providing a class literal as a template type(C++20).  arm-none-eabi-c++filt.exe in the GCC 14.2.1 toolchain properly decodes the following example Embedded Memory Explorer fails on:
    _ZN3utl9SingletonIN3tsk18StaticFreeRTOSTaskIN9KeypadMCU11DevCtlrTaskELNS1_7Stack_tE512ELb0EEEXtlNS_13StringLiteralILj5EEEtlA5_cLc46ELc98ELc115ELc115EEEELh0EXtlNS_23StringLiteralUninferredILj100EEEtlA100_cLc118ELc105ELc114ELc116ELc117ELc97ELc108ELc32ELc118ELc111ELc105ELc100ELc32ELc75ELc101ELc121ELc112ELc97ELc100ELc77ELc67ELc85ELc58ELc58ELc75ELc101ELc121ELc112ELc97ELc100ELc66ELc111ELc111ELc116ELc84ELc97ELc115ELc107ELc58ELc58ELc112ELc111ELc115ELc116ELc66ELc111ELc111ELc116ELc73ELc110ELc105ELc116ELc40ELc41EEEEEnwEj

    as

    utl::Singleton<tsk::StaticFreeRTOSTask<KeypadMCU::DevCtlrTask, (tsk::Stack_t)512, false>, utl::StringLiteral<5u>{char [5]{(char)46, (char)98, (char)115, (char)115}}, (unsigned char)0, utl::StringLiteralUninferred<100u>{char [100]{(char)118, (char)105, (char)114, (char)116, (char)117, (char)97, (char)108, (char)32, (char)118, (char)111, (char)105, (char)100, (char)32, (char)75, (char)101, (char)121, (char)112, (char)97, (char)100, (char)77, (char)67, (char)85, (char)58, (char)58, (char)75, (char)101, (char)121, (char)112, (char)97, (char)100, (char)66, (char)111, (char)111, (char)116, (char)84, (char)97, (char)115, (char)107, (char)58, (char)58, (char)112, (char)111, (char)115, (char)116, (char)66, (char)111, (char)111, (char)116, (char)73, (char)110, (char)105, (char)116, (char)40, (char)41}}>::operator new(unsigned int)

    Could Sysprog either fix this or provide a way to plugin custom demanglers?   A plugin method would be welcome as then the char arrays could be displayed as strings.

     

    #37049
    support
    Keymaster

    Hi,

    No problem, the demangler is already a separate DLL with a very simple interface (demangle.dll/demangle64.dll).

    #include <cxxabi.h>
    #include <stdlib.h>
    
    extern "C" char *__declspec(dllexport) DemangleCXXName2(const char *pName)
    {
    int status = -1;
    return abi::__cxa_demangle(pName, 0, 0, &status);
    }
    
    extern "C" void __declspec(dllexport) FreeDemangledCXXName(char *pName)
    {
    free(pName);
    }

    You can build with MinGW using the following command line:

    g++.exe demangle.cpp -o demangle.dll -shared -static-libgcc -static-libstdc++

    We will update the version shipped with VisualGDB based on the latest MinGW toolchain in the final v6.1 release.

Viewing 2 posts - 1 through 2 (of 2 total)
  • You must be logged in to reply to this topic.