diff options
| author | David Chisnall <csdavec@swan.ac.uk> | 2010-01-14 14:08:19 +0000 |
|---|---|---|
| committer | David Chisnall <csdavec@swan.ac.uk> | 2010-01-14 14:08:19 +0000 |
| commit | 035ead209f713f594aa4678fb0c44049db15b249 (patch) | |
| tree | d55381996e784c4f268f0b1f03d15a5b92432e30 /clang/lib/CodeGen/CGObjCGNU.cpp | |
| parent | 22fe58e1b99e2a3a396559a04546d25aef0cd696 (diff) | |
| download | bcm5719-llvm-035ead209f713f594aa4678fb0c44049db15b249.tar.gz bcm5719-llvm-035ead209f713f594aa4678fb0c44049db15b249.zip | |
Made ObjC method name mangling match GCC (which does it in a stupid and broken way that can give conflicts on method names containing underscores, but is needed for gdb to work because gdb does not know how to read ObjC class tables and relies on the mangling).
llvm-svn: 93427
Diffstat (limited to 'clang/lib/CodeGen/CGObjCGNU.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CGObjCGNU.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGObjCGNU.cpp b/clang/lib/CodeGen/CGObjCGNU.cpp index a8792bde955..e7a2093aa2e 100644 --- a/clang/lib/CodeGen/CGObjCGNU.cpp +++ b/clang/lib/CodeGen/CGObjCGNU.cpp @@ -217,8 +217,11 @@ static std::string SymbolNameForClass(const std::string &ClassName) { static std::string SymbolNameForMethod(const std::string &ClassName, const std::string &CategoryName, const std::string &MethodName, bool isClassMethod) { - return "_OBJC_METHOD_" + ClassName + "("+CategoryName+")"+ - (isClassMethod ? "+" : "-") + MethodName; + std::string MethodNameColonStripped = MethodName; + std::replace(MethodNameColonStripped.begin(), MethodNameColonStripped.end(), + ':', '_'); + return std::string(isClassMethod ? "_c_" : "_i_") + ClassName + "_" + + CategoryName + "_" + MethodNameColonStripped; } CGObjCGNU::CGObjCGNU(CodeGen::CodeGenModule &cgm) |

