Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc-Andre Laperle2016-05-13 02:20:00 +0000
committerMarc-Andre Laperle2016-08-18 14:47:33 +0000
commit5e32334aa01341525ffc24c88cacb23eaf963ba8 (patch)
tree936ec4537710e0dca1422635f2e2464e6485d04d
parent461639d4ee2533f9961e07b42477c26c7439c1e1 (diff)
downloadorg.eclipse.cdt-5e32334aa01341525ffc24c88cacb23eaf963ba8.tar.gz
org.eclipse.cdt-5e32334aa01341525ffc24c88cacb23eaf963ba8.tar.xz
org.eclipse.cdt-5e32334aa01341525ffc24c88cacb23eaf963ba8.zip
LLDB: Add support for local debugging of new processes
This commit adds support for debugging new processes launched locally using the LLDB debugger (lldb-mi). The minimum version supported is LLDB 3.8. Preliminary documentation on how to set it up is available here: https://github.com/MarkZ3/Eclipse-CDT-WIP/issues/9#issuecomment-236483223 Bug: 405670 Change-Id: If46543e974e2f19c45ab3bba088eab35fe737077 Signed-off-by: Marc-Andre Laperle <marc-andre.laperle@ericsson.com>
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.classpath7
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.gitignore1
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.project34
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.settings/org.eclipse.jdt.core.prefs125
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.settings/org.eclipse.jdt.ui.prefs64
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/META-INF/MANIFEST.MF22
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/about.html24
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/build.properties8
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/plugin.properties12
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/plugin.xml23
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/pom.xml17
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/ILLDBDebugPreferenceConstants.java32
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/ILLDBLaunchConfigurationConstants.java31
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/LLDBCorePlugin.java50
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/LLDBPreferenceInitializer.java43
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/LLDBFinalLaunchSequence.java47
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/LLDBLaunch.java109
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/LLDBLaunchDelegate.java63
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/Messages.java27
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/messages.properties9
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBBreakpoints.java59
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBControl.java48
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBRunControl.java51
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBServiceFactory.java50
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.classpath7
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.gitignore1
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.project34
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.settings/org.eclipse.jdt.core.prefs125
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.settings/org.eclipse.jdt.ui.prefs64
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/META-INF/MANIFEST.MF22
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/about.html24
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/build.properties8
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/plugin.properties19
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/plugin.xml55
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/pom.xml17
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/LLDBCDebuggerPage.java128
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/LLDBLocalApplicationCDebuggerTab.java102
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/LLDBUIPlugin.java75
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/Messages.java31
-rw-r--r--llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/messages.properties12
-rw-r--r--pom.xml4
41 files changed, 1683 insertions, 1 deletions
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.classpath b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.classpath
new file mode 100644
index 00000000000..eca7bdba8f0
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.gitignore b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.gitignore
new file mode 100644
index 00000000000..ae3c1726048
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.project b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.project
new file mode 100644
index 00000000000..d81ae092e86
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.cdt.llvm.dsf.lldb.core</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ </natures>
+</projectDescription>
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.settings/org.eclipse.jdt.core.prefs b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..9b563851191
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,125 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=f
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=s
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.settings/org.eclipse.jdt.ui.prefs b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 00000000000..d977bdd17b5
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,64 @@
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+org.eclipse.jdt.ui.exception.name=e
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.overrideannotation=true
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=false
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/META-INF/MANIFEST.MF b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..1420d5574f1
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-SymbolicName: org.eclipse.cdt.llvm.dsf.lldb.core;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.debug.core,
+ org.eclipse.cdt.dsf.gdb,
+ org.eclipse.cdt.launch,
+ org.eclipse.core.runtime,
+ org.eclipse.cdt.dsf,
+ org.eclipse.cdt.debug.core,
+ org.eclipse.core.variables,
+ org.eclipse.cdt.core
+Export-Package: org.eclipse.cdt.llvm.dsf.lldb.core,
+ org.eclipse.cdt.llvm.dsf.lldb.core.internal;x-friends:="org.eclipse.cdt.llvm.dsf.lldb.ui",
+ org.eclipse.cdt.llvm.dsf.lldb.core.internal.launching;x-internal:=true,
+ org.eclipse.cdt.llvm.dsf.lldb.core.internal.service;x-internal:=true
+Bundle-Activator: org.eclipse.cdt.llvm.dsf.lldb.core.internal.LLDBCorePlugin
+Bundle-ActivationPolicy: lazy
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/about.html b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/about.html
new file mode 100644
index 00000000000..cb740ae8bc8
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/about.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>About</title></head><body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body></html> \ No newline at end of file
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/build.properties b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/build.properties
new file mode 100644
index 00000000000..2b63999577f
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/build.properties
@@ -0,0 +1,8 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ about.html,\
+ plugin.properties
+src.includes = about.html
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/plugin.properties b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/plugin.properties
new file mode 100644
index 00000000000..b42673bcb3a
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2016 Ericsson
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+pluginName=LLDB Debugger Integration Core
+providerName=Eclipse CDT
+
+launchDelegate.localApplication.name=LLDB-MI Debug Process
+launchDelegate.localApplication.description=Start new application under control of LLBM-MI debugger
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/plugin.xml b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/plugin.xml
new file mode 100644
index 00000000000..81b79e5d4ff
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/plugin.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.debug.core.launchDelegates">
+ <launchDelegate
+ delegate="org.eclipse.cdt.llvm.dsf.lldb.core.internal.launching.LLDBLaunchDelegate"
+ delegateDescription="%launchDelegate.localApplication.description"
+ id="org.eclipse.cdt.llvm.dsf.lldb.launch.localCLaunch"
+ modes="debug"
+ name="%launchDelegate.localApplication.name"
+ sourceLocatorId="org.eclipse.cdt.debug.core.sourceLocator"
+ sourcePathComputerId="org.eclipse.cdt.debug.core.sourcePathComputer"
+ type="org.eclipse.cdt.launch.applicationLaunchType">
+ </launchDelegate>
+ </extension>
+ <extension
+ point="org.eclipse.core.runtime.preferences">
+ <initializer
+ class="org.eclipse.cdt.llvm.dsf.lldb.core.internal.LLDBPreferenceInitializer">
+ </initializer>
+ </extension>
+</plugin>
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/pom.xml b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/pom.xml
new file mode 100644
index 00000000000..384dd7cf825
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.cdt</groupId>
+ <artifactId>cdt-parent</artifactId>
+ <version>9.0.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <version>1.0.0-SNAPSHOT</version>
+ <artifactId>org.eclipse.cdt.llvm.dsf.lldb.core</artifactId>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/ILLDBDebugPreferenceConstants.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/ILLDBDebugPreferenceConstants.java
new file mode 100644
index 00000000000..30621fefd01
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/ILLDBDebugPreferenceConstants.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.cdt.llvm.dsf.lldb.core;
+
+/**
+ * Preference constants that affect behavior in the core LLDB plugin.
+ *
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface ILLDBDebugPreferenceConstants {
+
+ /**
+ * The default command for lldb-mi
+ */
+ public static final String PREF_DEFAULT_LLDB_COMMAND = "defaultLLDBCommand"; //$NON-NLS-1$
+
+ /**
+ * The value is a boolean specifying the default for whether to stop at main().
+ */
+ public static final String PREF_DEFAULT_STOP_AT_MAIN = "defaultStopAtMain"; //$NON-NLS-1$
+
+ /**
+ * The value is a string specifying the default symbol to use for the main breakpoint.
+ */
+ public static final String PREF_DEFAULT_STOP_AT_MAIN_SYMBOL = "defaultStopAtMainSymbol"; //$NON-NLS-1$
+}
+
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/ILLDBLaunchConfigurationConstants.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/ILLDBLaunchConfigurationConstants.java
new file mode 100644
index 00000000000..6a778e45683
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/ILLDBLaunchConfigurationConstants.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.core;
+
+import org.eclipse.cdt.llvm.dsf.lldb.core.internal.LLDBCorePlugin;
+
+/**
+ * Preference constants that are used in some ways by the LLDB launch
+ * configuration.
+ *
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public class ILLDBLaunchConfigurationConstants {
+
+ /**
+ * Launch configuration attribute key. The value is the name of
+ * the Debuger associated with a C/C++ launch configuration.
+ */
+ public static final String ATTR_DEBUG_NAME = LLDBCorePlugin.PLUGIN_ID + ".DEBUG_NAME"; //$NON-NLS-1$
+
+ /**
+ * Launch configuration attribute value. The key is ATTR_DEBUG_NAME.
+ */
+ public static final String DEBUGGER_DEBUG_NAME_DEFAULT = "lldb-mi"; //$NON-NLS-1$
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/LLDBCorePlugin.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/LLDBCorePlugin.java
new file mode 100644
index 00000000000..9dbcc9cb190
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/LLDBCorePlugin.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2014 Wind River Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ * Abeer Bagul (Tensilica) - Updated error message (Bug 339048)
+ * Jason Litton (Sage Electronic Engineering, LLC) - Added support for dynamic tracing option (Bug 379169)
+ * Alvaro Sanchez-Leon (Ericsson AB) - Each memory context needs a different MemoryRetrieval (Bug 250323)
+ *******************************************************************************/
+package org.eclipse.cdt.llvm.dsf.lldb.core.internal;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class LLDBCorePlugin extends Plugin {
+
+ /**
+ * LLDB Core Plug-in ID
+ */
+ public static final String PLUGIN_ID = "org.eclipse.cdt.llvm.dsf.lldb.core"; //$NON-NLS-1$
+ private static LLDBCorePlugin plugin;
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static LLDBCorePlugin getDefault() {
+ return plugin;
+ }
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/LLDBPreferenceInitializer.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/LLDBPreferenceInitializer.java
new file mode 100644
index 00000000000..3697e76d950
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/LLDBPreferenceInitializer.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.core.internal;
+
+import java.io.File;
+
+import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
+import org.eclipse.cdt.llvm.dsf.lldb.core.ILLDBDebugPreferenceConstants;
+import org.eclipse.cdt.llvm.dsf.lldb.core.ILLDBLaunchConfigurationConstants;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+
+/**
+ * Initializes default values for LLDB preferences.
+ */
+public class LLDBPreferenceInitializer extends AbstractPreferenceInitializer {
+
+ private static final String XCODE_BUNDLED_LLDB_PATH = "/Applications/Xcode.app/Contents/Developer/usr/bin/lldb-mi"; //$NON-NLS-1$
+
+ private static String getDefaultCommand() {
+ if (Platform.getOS().equals(Platform.OS_MACOSX) && new File(XCODE_BUNDLED_LLDB_PATH).exists()) {
+ return XCODE_BUNDLED_LLDB_PATH;
+ }
+ return ILLDBLaunchConfigurationConstants.DEBUGGER_DEBUG_NAME_DEFAULT;
+ }
+
+ @Override
+ public void initializeDefaultPreferences() {
+ IEclipsePreferences node = DefaultScope.INSTANCE.getNode(LLDBCorePlugin.PLUGIN_ID);
+ node.put(ILLDBDebugPreferenceConstants.PREF_DEFAULT_LLDB_COMMAND, getDefaultCommand());
+ node.putBoolean(ILLDBDebugPreferenceConstants.PREF_DEFAULT_STOP_AT_MAIN, ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_DEFAULT);
+ node.put(ILLDBDebugPreferenceConstants.PREF_DEFAULT_STOP_AT_MAIN_SYMBOL, ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_SYMBOL_DEFAULT);
+ }
+
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/LLDBFinalLaunchSequence.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/LLDBFinalLaunchSequence.java
new file mode 100644
index 00000000000..e94fc2cf70e
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/LLDBFinalLaunchSequence.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.core.internal.launching;
+
+import java.util.Map;
+
+import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
+import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
+import org.eclipse.cdt.dsf.gdb.launching.FinalLaunchSequence_7_2;
+import org.eclipse.cdt.dsf.service.DsfSession;
+
+/**
+ * A LLDB-specific launch sequence that was initially created to work around the
+ * fact that LLDB always has to run in async mode, even in all-stop.
+ */
+public class LLDBFinalLaunchSequence extends FinalLaunchSequence_7_2 {
+
+ /**
+ * Constructs the {@link LLDBFinalLaunchSequence}.
+ *
+ * @param session
+ * The debugging session
+ * @param attributes
+ * the launch configuration attributes
+ * @param rm
+ * a request monitor that will indicate when the sequence is
+ * completed
+ */
+ public LLDBFinalLaunchSequence(DsfSession session, Map<String, Object> attributes, RequestMonitorWithProgress rm) {
+ super(session, attributes, rm);
+ }
+
+ @Execute
+ @Override
+ public void stepSetNonStop(RequestMonitor requestMonitor) {
+ // LLDB doesn't support non-stop and target-async cannot be disabled so
+ // do not do anything in this step
+ requestMonitor.done();
+ }
+
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/LLDBLaunch.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/LLDBLaunch.java
new file mode 100644
index 00000000000..06e76cdabc4
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/LLDBLaunch.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.core.internal.launching;
+
+import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch;
+import org.eclipse.cdt.llvm.dsf.lldb.core.ILLDBDebugPreferenceConstants;
+import org.eclipse.cdt.llvm.dsf.lldb.core.ILLDBLaunchConfigurationConstants;
+import org.eclipse.cdt.llvm.dsf.lldb.core.internal.LLDBCorePlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.variables.VariablesPlugin;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.model.ISourceLocator;
+
+/**
+ * LLDB specific launch. It mostly deals with setting up the paths correctly.
+ */
+public class LLDBLaunch extends GdbLaunch {
+
+ /**
+ * Constructs a launch.
+ *
+ * @param launchConfiguration
+ * the launch configuration
+ * @param mode
+ * the launch mode, i.e., debug, profile, etc.
+ * @param locator
+ */
+ public LLDBLaunch(ILaunchConfiguration launchConfiguration, String mode, ISourceLocator locator) {
+ super(launchConfiguration, mode, locator);
+ }
+
+ /*
+ * TODO: GdbLaunch.getGDBPath() and setGDBPath() should reference each other
+ * in the javadoc to make sure extenders override both.
+ */
+ public IPath getGDBPath() {
+ String lldbPath = getAttribute(ILLDBLaunchConfigurationConstants.ATTR_DEBUG_NAME);
+ if (lldbPath != null) {
+ return new Path(lldbPath);
+ }
+
+ return getLLDBPath(getLaunchConfiguration());
+ }
+
+ public void setGDBPath(String path) {
+ setAttribute(ILLDBLaunchConfigurationConstants.ATTR_DEBUG_NAME, path);
+ }
+
+ /**
+ * Get the LLDB path based on a launch configuration.
+ *
+ * @param configuration
+ * the launch configuration.
+ * @return the LLDB path
+ */
+ public static IPath getLLDBPath(ILaunchConfiguration configuration) {
+ String defaultLLdbCommand = getDefaultLLDBPath();
+
+ IPath retVal = new Path(defaultLLdbCommand);
+ try {
+ String lldbPath = configuration.getAttribute(ILLDBLaunchConfigurationConstants.ATTR_DEBUG_NAME, defaultLLdbCommand);
+ lldbPath = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(lldbPath, false);
+ retVal = new Path(lldbPath);
+ } catch (CoreException e) {
+ LLDBCorePlugin.getDefault().getLog().log(e.getStatus());
+ }
+ return retVal;
+ }
+
+ protected String getDefaultGDBPath() {
+ return getDefaultLLDBPath();
+ }
+
+ private static String getDefaultLLDBPath() {
+ return Platform.getPreferencesService().getString(LLDBCorePlugin.PLUGIN_ID,
+ ILLDBDebugPreferenceConstants.PREF_DEFAULT_LLDB_COMMAND,
+ ILLDBLaunchConfigurationConstants.DEBUGGER_DEBUG_NAME_DEFAULT, null);
+ }
+
+ @Override
+ public String getGDBInitFile() throws CoreException {
+ // Not supported by LLDB-MI right now. There is also no MI command in
+ // GDB to source a file. We should look into adding this in GDB first.
+ return null;
+ }
+
+ @Override
+ public String getProgramPath() throws CoreException {
+ IPath path = new Path(super.getProgramPath());
+
+ // FIXME: LLDB-MI only accepts absolute paths for the program. But this
+ // seems to work with the latest version in SVN trunk (Mac) so we will
+ // need to find out in which version this was or will be fixed and stop
+ // doing this work-around if possible.
+ if (!path.isAbsolute()) {
+ path = getGDBWorkingDirectory().append(path);
+ }
+ return path.toOSString();
+ }
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/LLDBLaunchDelegate.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/LLDBLaunchDelegate.java
new file mode 100644
index 00000000000..13daba28439
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/LLDBLaunchDelegate.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.core.internal.launching;
+
+import org.eclipse.cdt.dsf.debug.service.IDsfDebugServicesFactory;
+import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch;
+import org.eclipse.cdt.dsf.gdb.launching.GdbLaunchDelegate;
+import org.eclipse.cdt.llvm.dsf.lldb.core.internal.service.LLDBServiceFactory;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.model.ISourceLocator;
+
+/**
+ * A specific LLDB launch delegate that allows customization such as setting the
+ * LLDB path, using LLDB-specific preferences and creating a service factory
+ * (mostly used to work around the current LLDB-MI limitations)
+ */
+public class LLDBLaunchDelegate extends GdbLaunchDelegate {
+
+ /**
+ * Constructs the {@link LLDBLaunchDelegate}.
+ *
+ * This is meant to be called by the plug-in registry (plugin.xml)
+ */
+ public LLDBLaunchDelegate() {
+ super();
+ }
+
+ /**
+ * Constructs the {@link LLDBLaunchDelegate}.
+ *
+ * @param requireCProject whether or not debugging requires a C/C++ project. For example, in attach mode is is not required.
+ */
+ public LLDBLaunchDelegate(boolean requireCProject) {
+ super(requireCProject);
+ }
+
+ /*
+ * TODO: The fact that both getCLILabel and GdbLaunch.getGDBPath have to be
+ * overridden and made consistent seems error prone. getCLILabel should call
+ * GdbLaunch.getGDBPath somehow by default. This is something that should be
+ * looked into in dsf-gdb.
+ */
+ @Override
+ protected String getCLILabel(ILaunchConfiguration config, String gdbVersion) throws CoreException {
+ return LLDBLaunch.getLLDBPath(config).toString().trim() + " (" + Messages.LLDBLaunchDelegate_mimicking_gdb + " gdb " + gdbVersion + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+
+ @Override
+ protected IDsfDebugServicesFactory newServiceFactory(ILaunchConfiguration config, String version) {
+ return new LLDBServiceFactory(version, config);
+ }
+
+ protected GdbLaunch createGdbLaunch(ILaunchConfiguration configuration, String mode, ISourceLocator locator) throws CoreException {
+ return new LLDBLaunch(configuration, mode, locator);
+ }
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/Messages.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/Messages.java
new file mode 100644
index 00000000000..52e630d874d
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/Messages.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.core.internal.launching;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Messages related to launching LLDB.
+ */
+@SuppressWarnings("javadoc")
+public class Messages extends NLS {
+ private static final String BUNDLE_NAME = "org.eclipse.cdt.llvm.dsf.lldb.core.internal.launching.messages"; //$NON-NLS-1$
+ public static String LLDBLaunchDelegate_mimicking_gdb;
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/messages.properties b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/messages.properties
new file mode 100644
index 00000000000..d0cd1c9abad
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/launching/messages.properties
@@ -0,0 +1,9 @@
+###############################################################################
+# Copyright (c) 2016 Ericsson.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+
+LLDBLaunchDelegate_mimicking_gdb=mimicking
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBBreakpoints.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBBreakpoints.java
new file mode 100644
index 00000000000..c78855c0cce
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBBreakpoints.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.core.internal.service;
+
+import java.util.Map;
+
+import org.eclipse.cdt.dsf.debug.service.IBreakpoints;
+import org.eclipse.cdt.dsf.gdb.service.GDBBreakpoints_7_4;
+import org.eclipse.cdt.dsf.service.DsfSession;
+import org.eclipse.core.runtime.Path;
+
+/**
+ * Provides service for breakpoint operations. See {@link IBreakpoints}
+ *
+ * This LLDB specific implementation was initially created in order to work
+ * around a bug with absolute paths when specifying the breakpoint location.
+ */
+public class LLDBBreakpoints extends GDBBreakpoints_7_4 {
+
+ /**
+ * Constructs the {@link LLDBBreakpoints} service.
+ *
+ * @param session
+ * The debugging session
+ */
+ public LLDBBreakpoints(DsfSession session) {
+ super(session);
+ }
+
+ @Override
+ protected String formatLocation(Map<String, Object> attributes) {
+ // FIXME: ***Big hack*** lldb-mi's -breakpoint-insert doesn't handle
+ // locations that look like absolute paths (leading /). This will have
+ // to be fixed upstream because the work-around is not ideal: we only
+ // use the last segment to insert the breakpoint. This is not good if
+ // there are two files of the same name in the inferior.
+ // See https://llvm.org/bugs/show_bug.cgi?id=28709
+ String location = super.formatLocation(attributes);
+ return adjustDebuggerPath(location);
+ }
+
+ @Override
+ public String adjustDebuggerPath(String originalPath) {
+ // FIXME: See also #formatLocation for hack explanation. This one needs
+ // to be overridden for moveToLine, runToLine and stepIntoSelection
+ // (Once this hack is removed, they should be tested).
+ Path path = new Path(originalPath);
+ if (path.isAbsolute()) {
+ return path.lastSegment();
+ }
+ return super.adjustDebuggerPath(originalPath);
+ }
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBControl.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBControl.java
new file mode 100644
index 00000000000..bb50da9428e
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBControl.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.core.internal.service;
+
+import java.util.Map;
+
+import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
+import org.eclipse.cdt.dsf.concurrent.Sequence;
+import org.eclipse.cdt.dsf.debug.service.command.ICommandControl;
+import org.eclipse.cdt.dsf.gdb.service.command.GDBControl_7_4;
+import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
+import org.eclipse.cdt.dsf.service.DsfSession;
+import org.eclipse.cdt.llvm.dsf.lldb.core.internal.launching.LLDBFinalLaunchSequence;
+import org.eclipse.debug.core.ILaunchConfiguration;
+
+/**
+ * Provides service for controlling sending and receiving commands. See
+ * {@link ICommandControl}
+ *
+ * This LLDB specific implementation was initially created in order to be able
+ * to control the launch sequence of LLDB.
+ */
+public class LLDBControl extends GDBControl_7_4 {
+
+ /**
+ * Constructs the {@link LLDBControl} service.
+ *
+ * @param session
+ * The debugging session
+ * @param config
+ * the launch configuration
+ * @param factory
+ * the command factory used to send commands
+ */
+ public LLDBControl(DsfSession session, ILaunchConfiguration config, CommandFactory factory) {
+ super(session, config, factory);
+ }
+
+ protected Sequence getCompleteInitializationSequence(Map<String,Object> attributes, RequestMonitorWithProgress rm) {
+ return new LLDBFinalLaunchSequence(getSession(), attributes, rm);
+ }
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBRunControl.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBRunControl.java
new file mode 100644
index 00000000000..001e3716c5e
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBRunControl.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.core.internal.service;
+
+import org.eclipse.cdt.core.IAddress;
+import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
+import org.eclipse.cdt.dsf.debug.service.IRunControl;
+import org.eclipse.cdt.dsf.gdb.service.GDBRunControl_7_0;
+import org.eclipse.cdt.dsf.service.DsfSession;
+
+/**
+ * Provides service for controlling the process. See {@link IRunControl}
+ *
+ * This LLDB specific implementation was initially created in order to disable
+ * "move to line" and "resume at line" because the -exec-jump MI command was not
+ * implemented.
+ */
+public class LLDBRunControl extends GDBRunControl_7_0 {
+
+ /**
+ * Constructs the {@link LLDBRunControl} service.
+ *
+ * @param session
+ * The debugging session
+ */
+ public LLDBRunControl(DsfSession session) {
+ super(session);
+ }
+
+ @Override
+ public void canMoveToAddress(IExecutionDMContext context, IAddress address, boolean resume,
+ DataRequestMonitor<Boolean> rm) {
+ // FIXME: LLDB-MI doesn't implement -exec-jump so it will fail. So
+ // disable "move to address" (disassembly) for now.
+ rm.setData(false);
+ }
+
+ @Override
+ public void canMoveToLine(IExecutionDMContext context, String sourceFile, int lineNumber, boolean resume,
+ DataRequestMonitor<Boolean> rm) {
+ // FIXME: LLDB-MI doesn't implement -exec-jump so it will fail. So
+ // disable "move to line" for now.
+ rm.setData(false);
+ }
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBServiceFactory.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBServiceFactory.java
new file mode 100644
index 00000000000..6af98c79837
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBServiceFactory.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.core.internal.service;
+
+import org.eclipse.cdt.dsf.debug.service.IBreakpoints;
+import org.eclipse.cdt.dsf.debug.service.IRunControl;
+import org.eclipse.cdt.dsf.debug.service.command.ICommandControl;
+import org.eclipse.cdt.dsf.gdb.service.GdbDebugServicesFactory;
+import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
+import org.eclipse.cdt.dsf.service.DsfSession;
+import org.eclipse.debug.core.ILaunchConfiguration;
+
+/**
+ * A service factor specific to LLDB that replaces some services in order to
+ * offer a more tailored experience and mostly work around some issues with
+ * LLDB-MI.
+ */
+public class LLDBServiceFactory extends GdbDebugServicesFactory {
+
+ /**
+ * Constructs the {@link LLDBServiceFactory}.
+ *
+ * @param version the GDB-equivalent version of LLDB
+ * @param config the launch configuration
+ */
+ public LLDBServiceFactory(String version, ILaunchConfiguration config) {
+ super(version, config);
+ }
+
+ @Override
+ protected ICommandControl createCommandControl(DsfSession session, ILaunchConfiguration config) {
+ return new LLDBControl(session, config, new CommandFactory());
+ }
+
+ @Override
+ protected IBreakpoints createBreakpointService(DsfSession session) {
+ return new LLDBBreakpoints(session);
+ }
+
+ @Override
+ protected IRunControl createRunControlService(DsfSession session) {
+ return new LLDBRunControl(session);
+ }
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.classpath b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.classpath
new file mode 100644
index 00000000000..22f30643cba
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.gitignore b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.gitignore
new file mode 100644
index 00000000000..ae3c1726048
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.project b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.project
new file mode 100644
index 00000000000..f26f12b42fd
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.cdt.llvm.dsf.lldb.ui</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ </natures>
+</projectDescription>
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.settings/org.eclipse.jdt.core.prefs b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..9b563851191
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,125 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=f
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=s
+org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.settings/org.eclipse.jdt.ui.prefs b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 00000000000..d977bdd17b5
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,64 @@
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+org.eclipse.jdt.ui.exception.name=e
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.overrideannotation=true
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=false
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/META-INF/MANIFEST.MF b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..1d8f78b08fd
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-SymbolicName: org.eclipse.cdt.llvm.dsf.lldb.ui;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.cdt.debug.ui,
+ org.eclipse.cdt.dsf.gdb.ui,
+ org.eclipse.debug.ui,
+ org.eclipse.swt,
+ org.eclipse.cdt.dsf.gdb,
+ org.eclipse.ui.workbench,
+ org.eclipse.core.runtime,
+ org.eclipse.jface,
+ org.eclipse.cdt.llvm.dsf.lldb.core,
+ org.eclipse.cdt.dsf.ui,
+ org.eclipse.cdt.debug.core
+Bundle-Activator: org.eclipse.cdt.llvm.dsf.lldb.ui.internal.LLDBUIPlugin
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.cdt.llvm.dsf.lldb.ui.internal;x-internal:=true
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/about.html b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/about.html
new file mode 100644
index 00000000000..cb740ae8bc8
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/about.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>About</title></head><body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body></html> \ No newline at end of file
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/build.properties b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/build.properties
new file mode 100644
index 00000000000..2b63999577f
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/build.properties
@@ -0,0 +1,8 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ about.html,\
+ plugin.properties
+src.includes = about.html
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/plugin.properties b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/plugin.properties
new file mode 100644
index 00000000000..db6a84b97d3
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/plugin.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2016 Ericsson
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+pluginName=LLDB Debugger Integration UI
+providerName=Eclipse CDT
+
+lldbPreferencePage.name = LLDB
+
+launchTab.main.name=Main
+launchTab.arguments.name=Arguments
+launchTab.debugger.name=Debugger
+launchTab.sourceLookup.name=Source
+launchTab.common.name=Common
+launchTab.environment.name=Environment
+lldbPreferencePage.name = LLDB
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/plugin.xml b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/plugin.xml
new file mode 100644
index 00000000000..35303bc11f2
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/plugin.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.debug.ui.launchConfigurationTabs">
+ <!-- Local application launch tabs-->
+ <tab
+ id="org.eclipse.cdt.llvm.dsf.lldb.launch.localApplicationLaunch.mainTab"
+ group="org.eclipse.cdt.launch.applicationLaunchTabGroup"
+ name="%launchTab.main.name"
+ class="org.eclipse.cdt.dsf.gdb.internal.ui.launching.CMainTab">
+ <associatedDelegate delegate="org.eclipse.cdt.llvm.dsf.lldb.launch.localCLaunch"/>
+ </tab>
+ <tab id="org.eclipse.cdt.llvm.dsf.lldb.launch.localApplicationLaunch.argumentsTab"
+ group="org.eclipse.cdt.launch.applicationLaunchTabGroup"
+ name="%launchTab.arguments.name"
+ class="org.eclipse.cdt.dsf.gdb.internal.ui.launching.CArgumentsTab">
+ <associatedDelegate delegate="org.eclipse.cdt.llvm.dsf.lldb.launch.localCLaunch"/>
+ <placement after="org.eclipse.cdt.llvm.dsf.lldb.launch.mainTab"/>
+ </tab>
+ <tab
+ id="org.eclipse.cdt.llvm.dsf.lldb.launch.localApplicationLaunch.environmentTab"
+ group="org.eclipse.cdt.launch.applicationLaunchTabGroup"
+ name="%launchTab.environment.name"
+ class="org.eclipse.debug.ui.EnvironmentTab">
+ <associatedDelegate delegate="org.eclipse.cdt.llvm.dsf.lldb.launch.localCLaunch"/>
+ <placement after="org.eclipse.cdt.llvm.dsf.lldb.launch.argumentsTab"/>
+ </tab>
+ <tab
+ id="org.eclipse.cdt.llvm.dsf.lldb.launch.localApplicationLaunch.debuggerTab"
+ group="org.eclipse.cdt.launch.applicationLaunchTabGroup"
+ name="%launchTab.debugger.name"
+ class="org.eclipse.cdt.llvm.dsf.lldb.ui.internal.LLDBLocalApplicationCDebuggerTab">
+ <associatedDelegate delegate="org.eclipse.cdt.llvm.dsf.lldb.launch.localCLaunch"/>
+ <placement after="org.eclipse.debug.ui.environmentTab"/>
+ </tab>
+ <tab
+ id="org.eclipse.cdt.llvm.dsf.lldb.launch.localApplicationLaunch.sourceLookupTab"
+ group="org.eclipse.cdt.launch.applicationLaunchTabGroup"
+ name="%launchTab.sourceLookup.name"
+ class="org.eclipse.debug.ui.sourcelookup.SourceLookupTab">
+ <associatedDelegate delegate="org.eclipse.cdt.llvm.dsf.lldb.launch.localCLaunch"/>
+ <placement after="org.eclipse.cdt.llvm.dsf.lldb.launch.debuggerTab"/>
+ </tab>
+ <tab
+ id="org.eclipse.cdt.llvm.dsf.lldb.launch.localApplicationLaunch.commonTab"
+ group="org.eclipse.cdt.launch.applicationLaunchTabGroup"
+ name="%launchTab.common.name"
+ class="org.eclipse.debug.ui.CommonTab">
+ <associatedDelegate delegate="org.eclipse.cdt.llvm.dsf.lldb.launch.localCLaunch"/>
+ <placement after="org.eclipse.debug.ui.sourceLookupTab"/>
+ </tab>
+ </extension>
+
+</plugin>
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/pom.xml b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/pom.xml
new file mode 100644
index 00000000000..468ae2e6d0f
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.cdt</groupId>
+ <artifactId>cdt-parent</artifactId>
+ <version>9.0.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <version>1.0.0-SNAPSHOT</version>
+ <artifactId>org.eclipse.cdt.llvm.dsf.lldb.ui</artifactId>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/LLDBCDebuggerPage.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/LLDBCDebuggerPage.java
new file mode 100644
index 00000000000..1d5eafa72e4
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/LLDBCDebuggerPage.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.ui.internal;
+
+import java.io.File;
+
+import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
+import org.eclipse.cdt.debug.ui.AbstractCDebuggerPage;
+import org.eclipse.cdt.llvm.dsf.lldb.core.ILLDBDebugPreferenceConstants;
+import org.eclipse.cdt.llvm.dsf.lldb.core.ILLDBLaunchConfigurationConstants;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * A LLDB-specific debugger page that only shows the options currently supported
+ * by LLDB and its integration with CDT.
+ */
+public class LLDBCDebuggerPage extends AbstractCDebuggerPage {
+
+ protected Text fLLDBCommandText;
+
+ @Override
+ public void createControl(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setFont(parent.getFont());
+
+ composite.setLayout(new GridLayout(3, false));
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ Label lbl = new Label(composite, SWT.LEFT);
+ lbl.setFont(parent.getFont());
+ lbl.setText(Messages.LLDBCDebuggerPage_debugger_command);
+ fLLDBCommandText = new Text(composite, SWT.SINGLE | SWT.BORDER);
+ fLLDBCommandText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+ fLLDBCommandText.addModifyListener(new ModifyListener() {
+ @Override
+ public void modifyText(ModifyEvent evt) {
+ updateLaunchConfigurationDialog();
+ }
+ });
+
+ Button button = createPushButton(composite, Messages.LLDBCDebuggerPage_browse, null);
+ button.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent evt) {
+ handleButtonSelected();
+ updateLaunchConfigurationDialog();
+ }
+
+ private void handleButtonSelected() {
+ FileDialog dialog = new FileDialog(getShell(), SWT.NONE);
+ dialog.setText(Messages.LLDBCDebuggerPage_browse_dialog_title);
+ String lldbCommand = fLLDBCommandText.getText().trim();
+ int lastSeparatorIndex = lldbCommand.lastIndexOf(File.separator);
+ if (lastSeparatorIndex != -1) {
+ dialog.setFilterPath(lldbCommand.substring(0, lastSeparatorIndex));
+ }
+ String res = dialog.open();
+ if (res == null) {
+ return;
+ }
+ fLLDBCommandText.setText(res);
+ }
+ });
+ setControl(parent);
+ }
+
+ @Override
+ public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
+ // I'm actually not sure this is needed but it seems this will be called
+ // if this delegate is used when first initializing defaults (i.e. GDB
+ // is not the delegate for this configuration first)
+ IPreferenceStore corePreferenceStore = LLDBUIPlugin.getDefault().getCorePreferenceStore();
+ configuration.setAttribute(ILLDBLaunchConfigurationConstants.ATTR_DEBUG_NAME,
+ corePreferenceStore.getString(ILLDBDebugPreferenceConstants.PREF_DEFAULT_LLDB_COMMAND));
+ configuration.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN,
+ corePreferenceStore.getBoolean(ILLDBDebugPreferenceConstants.PREF_DEFAULT_STOP_AT_MAIN));
+ configuration.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN_SYMBOL,
+ corePreferenceStore.getBoolean(ILLDBDebugPreferenceConstants.PREF_DEFAULT_STOP_AT_MAIN_SYMBOL));
+ }
+
+ @Override
+ public void initializeFrom(ILaunchConfiguration configuration) {
+ IPreferenceStore preferenceStore = LLDBUIPlugin.getDefault().getCorePreferenceStore();
+ String lldbCommand = getStringAttr(configuration, ILLDBLaunchConfigurationConstants.ATTR_DEBUG_NAME,
+ preferenceStore.getString(ILLDBDebugPreferenceConstants.PREF_DEFAULT_LLDB_COMMAND));
+ fLLDBCommandText.setText(lldbCommand);
+ }
+
+ private static String getStringAttr(ILaunchConfiguration config, String attributeName, String defaultValue) {
+ try {
+ return config.getAttribute(attributeName, defaultValue);
+ } catch (CoreException e) {
+ return defaultValue;
+ }
+ }
+
+ @Override
+ public void performApply(ILaunchConfigurationWorkingCopy configuration) {
+ configuration.setAttribute(ILLDBLaunchConfigurationConstants.ATTR_DEBUG_NAME,
+ fLLDBCommandText.getText().trim());
+ }
+
+ @Override
+ public String getName() {
+ return Messages.LLDBCDebuggerPage_tab_name;
+ }
+
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/LLDBLocalApplicationCDebuggerTab.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/LLDBLocalApplicationCDebuggerTab.java
new file mode 100644
index 00000000000..4f50fbb1e31
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/LLDBLocalApplicationCDebuggerTab.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.ui.internal;
+
+import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
+import org.eclipse.cdt.debug.ui.ICDebuggerPage;
+import org.eclipse.cdt.dsf.gdb.internal.ui.launching.LocalApplicationCDebuggerTab;
+import org.eclipse.cdt.llvm.dsf.lldb.core.ILLDBDebugPreferenceConstants;
+import org.eclipse.cdt.llvm.dsf.lldb.core.ILLDBLaunchConfigurationConstants;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * A LLDB-specific debugger tab that allows us to present a different debugger
+ * page.
+ */
+@SuppressWarnings("restriction")
+public class LLDBLocalApplicationCDebuggerTab extends LocalApplicationCDebuggerTab {
+
+ private final static String LOCAL_DEBUGGER_ID = "lldb-mi";//$NON-NLS-1$
+
+ protected void initDebuggerTypes(String selection) {
+ setDebuggerId(LOCAL_DEBUGGER_ID);
+ updateComboFromSelection();
+ }
+
+ /*
+ * This flag it to make sure that setDefaults gets called, even if the configuration is initially created for another delegate (GDB) then switched to LLDB.
+ */
+ private final static String DEFAULTS_SET = "org.eclipse.cdt.llvm.dsf.lldb.ui.internal.LLDBLocalApplicationCDebuggerTab.DEFAULTS_SET"; //$NON-NLS-1$
+
+ @Override
+ public void initializeFrom(ILaunchConfiguration config) {
+ try {
+ if (config.hasAttribute(DEFAULTS_SET) == false) {
+ ILaunchConfigurationWorkingCopy wc;
+ wc = config.getWorkingCopy();
+ setDefaults(wc);
+ wc.doSave();
+ }
+ } catch (CoreException e) {
+ }
+
+ super.initializeFrom(config);
+ }
+
+ @Override
+ public void setDefaults(ILaunchConfigurationWorkingCopy config) {
+ super.setDefaults(config);
+ IPreferenceStore corePreferenceStore = LLDBUIPlugin.getDefault().getCorePreferenceStore();
+ config.setAttribute(ILLDBLaunchConfigurationConstants.ATTR_DEBUG_NAME,
+ corePreferenceStore.getString(ILLDBDebugPreferenceConstants.PREF_DEFAULT_LLDB_COMMAND));
+ config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN,
+ corePreferenceStore.getBoolean(ILLDBDebugPreferenceConstants.PREF_DEFAULT_STOP_AT_MAIN));
+ config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN_SYMBOL,
+ corePreferenceStore.getString(ILLDBDebugPreferenceConstants.PREF_DEFAULT_STOP_AT_MAIN_SYMBOL));
+
+ config.setAttribute(DEFAULTS_SET, true);
+ }
+
+ protected void loadDynamicDebugArea() {
+ Composite dynamicTabHolder = getDynamicTabHolder();
+ // Dispose of any current child widgets in the tab holder area
+ Control[] children = dynamicTabHolder.getChildren();
+ for (int i = 0; i < children.length; i++) {
+ children[i].dispose();
+ }
+
+ String debuggerId = getIdForCurrentDebugger();
+ if (debuggerId == null) {
+ setDynamicTab(null);
+ } else {
+ if (debuggerId.equals(LOCAL_DEBUGGER_ID)) {
+ setDynamicTab(new LLDBCDebuggerPage());
+ } else {
+ assert false : "Unknown debugger id"; //$NON-NLS-1$
+ }
+ }
+ setDebuggerId(debuggerId);
+
+ ICDebuggerPage debuggerPage = getDynamicTab();
+ if (debuggerPage == null) {
+ return;
+ }
+ // Ask the dynamic UI to create its Control
+ debuggerPage.setLaunchConfigurationDialog(getLaunchConfigurationDialog());
+ debuggerPage.createControl(dynamicTabHolder);
+ debuggerPage.getControl().setVisible(true);
+ dynamicTabHolder.layout(true);
+ contentsChanged();
+ }
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/LLDBUIPlugin.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/LLDBUIPlugin.java
new file mode 100644
index 00000000000..849963c73ae
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/LLDBUIPlugin.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.ui.internal;
+
+import org.eclipse.cdt.llvm.dsf.lldb.core.internal.LLDBCorePlugin;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class LLDBUIPlugin extends AbstractUIPlugin {
+
+ /**
+ * LLDB UI Plug-in ID
+ */
+ public static final String PLUGIN_ID = "org.eclipse.cdt.llvm.dsf.lldb.ui"; //$NON-NLS-1$
+ private static LLDBUIPlugin plugin;
+ private static IPreferenceStore fCorePreferenceStore;
+ private static IPreferenceStore fPreferenceStore;
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static LLDBUIPlugin getDefault() {
+ return plugin;
+ }
+
+ /**
+ * Returns the preference store for this plug-in.
+ */
+ @Override
+ public IPreferenceStore getPreferenceStore() {
+ if (fPreferenceStore == null) {
+ fPreferenceStore = new ScopedPreferenceStore(InstanceScope.INSTANCE, PLUGIN_ID);
+ }
+ return fPreferenceStore;
+ }
+
+ /**
+ * Returns the preference store for the Core plug-in.
+ *
+ * @return the Core plug-in preference store
+ */
+ public IPreferenceStore getCorePreferenceStore() {
+ if (fCorePreferenceStore == null) {
+ fCorePreferenceStore = new ScopedPreferenceStore(InstanceScope.INSTANCE, LLDBCorePlugin.PLUGIN_ID);
+ }
+ return fCorePreferenceStore;
+ }
+
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/Messages.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/Messages.java
new file mode 100644
index 00000000000..ec0da087cf3
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/Messages.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.cdt.llvm.dsf.lldb.ui.internal;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Messages related to preferences and launch configuration.
+ */
+@SuppressWarnings("javadoc")
+public class Messages extends NLS {
+ private static final String BUNDLE_NAME = "org.eclipse.cdt.llvm.dsf.lldb.ui.internal.messages"; //$NON-NLS-1$
+ public static String LLDBCDebuggerPage_browse;
+ public static String LLDBCDebuggerPage_browse_dialog_title;
+ public static String LLDBCDebuggerPage_tab_name;
+ public static String LLDBCDebuggerPage_debugger_command;
+
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+}
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/messages.properties b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/messages.properties
new file mode 100644
index 00000000000..3349d030659
--- /dev/null
+++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.ui/src/org/eclipse/cdt/llvm/dsf/lldb/ui/internal/messages.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2016 Ericsson.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+###############################################################################
+
+LLDBCDebuggerPage_browse=&Browse...
+LLDBCDebuggerPage_browse_dialog_title=LLDB-MI Debugger
+LLDBCDebuggerPage_tab_name=LLDB Debugger Options
+LLDBCDebuggerPage_debugger_command=LLDB command:
diff --git a/pom.xml b/pom.xml
index f80a47a54c2..a5c09fbc07a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -205,7 +205,9 @@
<module>llvm/org.eclipse.cdt.managedbuilder.llvm.ui</module>
<module>llvm/org.eclipse.cdt.managedbuilder.llvm-feature</module>
-
+ <module>llvm/org.eclipse.cdt.llvm.dsf.lldb.core</module>
+ <module>llvm/org.eclipse.cdt.llvm.dsf.lldb.ui</module>
+
<module>qt/org.eclipse.cdt.qt.core</module>
<module>qt/org.eclipse.cdt.qt.ui</module>
<!--module>qt/org.eclipse.cdt.qt.core.tests</module-->

Back to the top