[Lldb-commits] [PATCH] D15175: Fix breakpoint language filtering for other C variants (like C99) and Pascal.
Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Fri Dec 4 11:37:07 PST 2015
This revision was automatically updated to reflect the committed changes.
Closed by commit rL254753: Fix breakpoint language filtering for other C variants (like C99) and Pascal. (authored by dperchik).
Changed prior to commit:
@@ -279,8 +279,9 @@
const char *name = sc.GetFunctionName(Mangled::ePreferMangled).AsCString();
- LanguageType sym_language = LanguageRuntime::GetLanguageForSymbolByName(target, name);
- if (m_language == eLanguageTypeC)
+ LanguageType sym_language = LanguageRuntime::GuessLanguageForSymbolByName(target, name);
+ if (Language::LanguageIsC(m_language) ||
// We don't currently have a way to say "This symbol name is C" so for now, C means
// not ObjC and not C++, etc...
@@ -293,6 +294,12 @@
else if (sym_language != m_language)
+ // Note: This code prevents us from being able to find symbols
+ // like 'printf' if the target language's option is set. It
+ // would be better to limit this filtering to only when the
+ // breakpoint's language option is set (and not the target's),
+ // but we can't know if m_language was set from the target or
+ // breakpoint option.
remove_it = true;
@@ -347,15 +347,20 @@
-LanguageRuntime::GetLanguageForSymbolByName (Target &target, const char *symbol_name)
+LanguageRuntime::GuessLanguageForSymbolByName (Target &target, const char *symbol_name)
- // This is not the right way to do this. Different targets could have different ways of mangling names
- // from a given language. So we should ask the various LanguageRuntime plugin instances for this target
- // to recognize the name. But right now the plugin instances depend on the process, not the target.
- // That is unfortunate, because I want to use this for filtering breakpoints by language, and so I need to know
- // the "language for symbol-name" prior to running. So we'd have to make a "LanguageRuntimeTarget" and
- // "LanguageRuntimeProcess", and direct the questions that don't need a running process to the former, and that
- // do to the latter.
+ // We "guess" the language because we can't determine a symbol's language from it's name.
+ // For example, a Pascal symbol can be mangled using the C++ Itanium scheme, and defined
+ // in a compilation unit within the same module as other C++ units.
+ // In addition, different targets could have different ways of mangling names from a given
+ // language, likewise compilation units within those targets. It would help to be able to
+ // ask the various LanguageRuntime plugin instances for this target to recognize the name,
+ // but right now the plugin instances depend on the process, not the target. That is
+ // unfortunate, because to use this for filtering breakpoints by language, we need to know
+ // the "language for symbol-name" prior to running. So we'd have to make a
+ // "LanguageRuntimeTarget" and "LanguageRuntimeProcess", and direct the questions that don't
+ // need a running process to the former, and that do to the latter.
// That's more work than I want to do for this feature.
if (CPlusPlusLanguage::IsCPPMangledName (symbol_name))
@@ -118,7 +118,7 @@
- GetLanguageForSymbolByName (Target &target, const char *symbol_name);
+ GuessLanguageForSymbolByName (Target &target, const char *symbol_name);
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 4439 bytes
Desc: not available
More information about the lldb-commits