[llvm] r292467 - llvm-cxxfilt: filter out invalid manglings

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 23 16:37:32 PST 2017


I've merged it in r292861.

On Thu, Jan 19, 2017 at 3:55 PM, Hans Wennborg <hans at chromium.org> wrote:
> Sounds good to me. Go ahead and merge (or let me know if you'd like me
> to do it).
>
> On Thu, Jan 19, 2017 at 2:12 PM, Saleem Abdulrasool
> <compnerd at compnerd.org> wrote:
>> Hi Hans,
>>
>> Would it be possible to merge this into the release branch as well?  It only
>> impacts the tool and corrects the behavior so I believe it to be low impact.
>>
>> On Wed, Jan 18, 2017 at 7:09 PM Saleem Abdulrasool via llvm-commits
>> <llvm-commits at lists.llvm.org> wrote:
>>>
>>> Author: compnerd
>>>
>>> Date: Wed Jan 18 20:58:46 2017
>>>
>>> New Revision: 292467
>>>
>>>
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=292467&view=rev
>>>
>>> Log:
>>>
>>> llvm-cxxfilt: filter out invalid manglings
>>>
>>>
>>>
>>> c++filt does not attempt to demangle symbols which do not match its
>>>
>>> expected format.  This means that the symbol must start with _Z or ___Z
>>>
>>> (block invocation function extension).  Any other symbols are returned
>>>
>>> as is.  Note that this is different from the behaviour of __cxa_demangle
>>>
>>> which will demangle fragments.
>>>
>>>
>>>
>>> Added:
>>>
>>>     llvm/trunk/test/tools/llvm-cxxfilt/invalid.test
>>>
>>> Modified:
>>>
>>>     llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp
>>>
>>>
>>>
>>> Added: llvm/trunk/test/tools/llvm-cxxfilt/invalid.test
>>>
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cxxfilt/invalid.test?rev=292467&view=auto
>>>
>>>
>>> ==============================================================================
>>>
>>> --- llvm/trunk/test/tools/llvm-cxxfilt/invalid.test (added)
>>>
>>> +++ llvm/trunk/test/tools/llvm-cxxfilt/invalid.test Wed Jan 18 20:58:46
>>> 2017
>>>
>>> @@ -0,0 +1,6 @@
>>>
>>> +RUN: llvm-cxxfilt _Z1fi __Z1fi f ___ZSt1ff_block_invoke | FileCheck %s
>>>
>>> +
>>>
>>> +CHECK: f(int)
>>>
>>> +CHECK-NEXT: __Z1fi
>>>
>>> +CHECK-NEXT: f
>>>
>>> +CHECK-NEXT: invocation function for block in std::f(float)
>>>
>>>
>>>
>>> Modified: llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp
>>>
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp?rev=292467&r1=292466&r2=292467&view=diff
>>>
>>>
>>> ==============================================================================
>>>
>>> --- llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp (original)
>>>
>>> +++ llvm/trunk/tools/llvm-cxxfilt/llvm-cxxfilt.cpp Wed Jan 18 20:58:46
>>> 2017
>>>
>>> @@ -14,9 +14,12 @@
>>>
>>>
>>>
>>>  using namespace llvm;
>>>
>>>
>>>
>>> -static void demangle(llvm::raw_ostream &OS, const char *Mangled) {
>>>
>>> +static void demangle(llvm::raw_ostream &OS, const std::string &Mangled) {
>>>
>>>    int Status;
>>>
>>> -  char *Demangled = itaniumDemangle(Mangled, nullptr, nullptr, &Status);
>>>
>>> +  char *Demangled = nullptr;
>>>
>>> +  if ((Mangled.size() >= 2 && Mangled.compare(0, 2, "_Z")) ||
>>>
>>> +      (Mangled.size() >= 4 && Mangled.compare(0, 4, "___Z")))
>>>
>>> +    Demangled = itaniumDemangle(Mangled.c_str(), nullptr, nullptr,
>>> &Status);
>>>
>>>    OS << (Demangled ? Demangled : Mangled) << '\n';
>>>
>>>    free(Demangled);
>>>
>>>  }
>>>
>>> @@ -24,7 +27,7 @@ static void demangle(llvm::raw_ostream &
>>>
>>>  int main(int argc, char **argv) {
>>>
>>>    if (argc == 1)
>>>
>>>      for (std::string Mangled; std::getline(std::cin, Mangled);)
>>>
>>> -      demangle(llvm::outs(), Mangled.c_str());
>>>
>>> +      demangle(llvm::outs(), Mangled);
>>>
>>>    else
>>>
>>>      for (int I = 1; I < argc; ++I)
>>>
>>>        demangle(llvm::outs(), argv[I]);
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>>
>>> llvm-commits mailing list
>>>
>>> llvm-commits at lists.llvm.org
>>>
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>>


More information about the llvm-commits mailing list