More Watchpoint support.
diff --git a/org.eclipse.cdt.debug.edc.windows.agent/.cproject b/org.eclipse.cdt.debug.edc.windows.agent/.cproject
index 8529c4d..21ee09a 100644
--- a/org.eclipse.cdt.debug.edc.windows.agent/.cproject
+++ b/org.eclipse.cdt.debug.edc.windows.agent/.cproject
@@ -98,255 +98,6 @@
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
- <storageModule moduleId="scannerConfiguration">
- <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="makefileGenerator">
- <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.1644349601;cdt.managedbuild.config.gnu.mingw.exe.debug.1644349601.;cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.debug.472286202;cdt.managedbuild.tool.gnu.cpp.compiler.input.843378569">
- <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="makefileGenerator">
- <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- </scannerConfigBuildInfo>
- <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.1644349601;cdt.managedbuild.config.gnu.mingw.exe.debug.1644349601.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.1347372394;cdt.managedbuild.tool.gnu.c.compiler.input.1194206575">
- <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="makefileGenerator">
- <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- </scannerConfigBuildInfo>
- </storageModule>
</cconfiguration>
<cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.release.757224056">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.exe.release.757224056" moduleId="org.eclipse.cdt.core.settings" name="Release">
@@ -435,255 +186,6 @@
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
- <storageModule moduleId="scannerConfiguration">
- <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="makefileGenerator">
- <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.1644349601;cdt.managedbuild.config.gnu.mingw.exe.debug.1644349601.;cdt.managedbuild.tool.gnu.cpp.compiler.mingw.exe.debug.472286202;cdt.managedbuild.tool.gnu.cpp.compiler.input.843378569">
- <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="makefileGenerator">
- <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- </scannerConfigBuildInfo>
- <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.1644349601;cdt.managedbuild.config.gnu.mingw.exe.debug.1644349601.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.1347372394;cdt.managedbuild.tool.gnu.c.compiler.input.1194206575">
- <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="makefileGenerator">
- <runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/${specs_file}"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'g++ -E -P -v -dD "${plugin_state_location}/specs.cpp"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- <profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
- <buildOutputProvider>
- <openAction enabled="true" filePath=""/>
- <parser enabled="true"/>
- </buildOutputProvider>
- <scannerInfoProvider id="specsFile">
- <runAction arguments="-c 'gcc -E -P -v -dD "${plugin_state_location}/specs.c"'" command="sh" useDefault="true"/>
- <parser enabled="true"/>
- </scannerInfoProvider>
- </profile>
- </scannerConfigBuildInfo>
- </storageModule>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
diff --git a/org.eclipse.cdt.debug.edc.windows.agent/src/win_agent/WinHWPageProtMgr.cpp b/org.eclipse.cdt.debug.edc.windows.agent/src/win_agent/WinHWPageProtMgr.cpp
new file mode 100644
index 0000000..9f8664f
--- /dev/null
+++ b/org.eclipse.cdt.debug.edc.windows.agent/src/win_agent/WinHWPageProtMgr.cpp
@@ -0,0 +1,267 @@
+/*
+ * Copyright (c) 2011 Nokia 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:
+ * Nokia - Initial API and implementation
+ */
+
+/*
+ * WinHWPageProtMgr.cpp
+ *
+ *
+ * Created on: Aug 23, 2011
+ * Author: bkirk
+ */
+
+#include "WinHWPageProtMgr.h"
+
+#include "BreakpointsService.h"
+#include "WinProcess.h"
+
+#include <winbase.h>
+#include <winnt.h>
+
+#define PAGE_INVALID 0
+
+inline
+DWORD WinHWPageProtMgr::sPageProtModeMap(unsigned char i) {
+static const DWORD map[9]
+ = { PAGE_INVALID, PAGE_NOACCESS, PAGE_READONLY, PAGE_NOACCESS,
+ PAGE_INVALID, PAGE_INVALID, PAGE_INVALID, PAGE_INVALID, PAGE_INVALID
+ };
+ return map[i];
+}
+
+WinHWPageProtMgr::WinHWPageProtMgr() {
+}
+
+bool WinHWPageProtMgr::IsAddressInProtectedPage(const ContextAddress& address) {
+ ProtectedPages::iterator p;
+ for (p = protectedPages.begin(); p != protectedPages.end(); ++p ) {
+ ProtectedPage& page = p->second;
+ if (address >= (ContextAddress)page.baseAddr
+ && address < (ContextAddress)page.baseAddr + page.size)
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+TBreakpoint* WinHWPageProtMgr::FindWatchpointForAddress(
+ const HANDLE& procHandle, const ContextAddress& address) {
+ ProtectedPageWatchpoints::iterator w;
+ for (w = watchpoints.begin(); w != watchpoints.end(); ++w) {
+ TBreakpoint*& wp = w->second;
+ if (address >= wp->address && address < wp->address + wp->size) {
+ return wp;
+ }
+ }
+ return NULL;
+}
+
+int WinHWPageProtMgr::SetPageProtectWatchpoint(TBreakpoint* wp) {
+ if (!wp || !wp->process)
+ return ERR_INV_CONTEXT;
+ DWORD mode = sPageProtModeMap(wp->accessMode);
+ if (mode == PAGE_INVALID)
+ return ERR_PGPRO_INVALID_MODE;
+ int err = ProtectPageForWatchpointAddress(wp->process->GetProcessHandle(),
+ wp->address, wp->size, mode);
+ if (err != 0)
+ return err;
+
+ watchpoints.insert(AddressWatchpointPair(wp->address, wp));
+ return 0;
+}
+
+int WinHWPageProtMgr::ClearPageProtectWatchpoint(TBreakpoint* wp) {
+ if (!wp || !wp->process)
+ return ERR_INV_CONTEXT;
+ int err = UnProtectPageForWatchpoint(wp);
+ if (err != 0)
+ return err;
+
+ watchpoints.erase(wp->address);
+ return 0;
+}
+
+
+int WinHWPageProtMgr::ProtectPageForWatchpointAddress(const HANDLE& procHandle,
+ const ContextAddress& address, const size_t size, const DWORD mode) {
+ if (mode != PAGE_NOACCESS && mode != PAGE_READONLY)
+ return ERR_PGPRO_INVALID_MODE;
+ // use an already protected page if appropriate
+ ProtectedPages::iterator iter;
+ for (iter = protectedPages.begin(); iter != protectedPages.end(); ++iter ) {
+ ProtectedPage& page = iter->second;
+ if (address+size >= (ContextAddress)page.baseAddr
+ && address < (ContextAddress)page.baseAddr + page.size) {
+ // if the incoming mode is stronger, it must be enforced.
+ if (page.protectMode > mode) {
+ DWORD priorDebugProtection;
+ if (FAILED(::VirtualProtectEx(procHandle, page.baseAddr, page.size,
+ mode, &priorDebugProtection)))
+ return ::GetLastError();
+ }
+ page.AddRef();
+ return 0;
+ }
+ }
+
+ MEMORY_BASIC_INFORMATION mbi;
+ if (FAILED(::VirtualQueryEx(procHandle, (LPVOID)address, &mbi, sizeof(MEMORY_BASIC_INFORMATION))))
+ return ::GetLastError();
+ if (mbi.State != MEM_COMMIT)
+ return ERR_PGPRO_UNSET;
+
+ DWORD originalProtection;
+ if (FAILED(::VirtualProtectEx(procHandle, mbi.BaseAddress, mbi.RegionSize,
+ mode, &originalProtection)))
+ return ::GetLastError();
+
+ protectedPages.insert(AddressPagePair((ContextAddress)mbi.BaseAddress,
+ ProtectedPage(mbi.BaseAddress, mbi.RegionSize, originalProtection, mode)));
+
+ return 0;
+}
+
+int WinHWPageProtMgr::DisableForPagesContainingAddress(const HANDLE& procH,
+ const ContextAddress& addr, const DWORD size, const DWORD mode) {
+ bool found = false;
+ ProtectedPages::iterator p;
+ for (p = protectedPages.begin(); p != protectedPages.end(); ++p ) {
+ ProtectedPage& pg = p->second;
+ const ContextAddress pgLo = (ContextAddress)pg.baseAddr;
+ const ContextAddress pgHi = pgLo + pg.size;
+ if (((addr + size) >= pgLo) && (addr < pgHi)) {
+ if (!(mode == PAGE_READONLY && pg.protectMode == PAGE_READONLY)) {
+ DWORD oldP;
+ if (FAILED(::VirtualProtectEx(procH, pg.baseAddr, pg.size,
+ pg.origProtectMode, &oldP)))
+ return ::GetLastError();
+ found = true;
+ }
+ if (size == 0 || ((addr >= pgLo) && ((addr + size) < pgHi)))
+ return 0;
+ }
+ }
+ return found ? 0 : ERR_PGPRO_NO_ADDR;
+}
+
+int WinHWPageProtMgr::EnableForPagesContainingAddress(const HANDLE& procH,
+ const ContextAddress& addr, const DWORD size, const DWORD mode) {
+ bool found = false;
+ ProtectedPages::iterator p;
+ for (p = protectedPages.begin(); p != protectedPages.end(); ++p ) {
+ ProtectedPage& pg = p->second;
+ const ContextAddress pgLo = (ContextAddress)pg.baseAddr;
+ const ContextAddress pgHi = pgLo + pg.size;
+ if (((addr + size) >= pgLo) && (addr < pgHi)) {
+ if (!(mode == PAGE_READONLY && pg.protectMode == PAGE_READONLY)) {
+ DWORD oldP;
+ if (FAILED(::VirtualProtectEx(procH, pg.baseAddr, pg.size,
+ pg.protectMode, &oldP)))
+ return ::GetLastError();
+ found = true;
+ }
+ if (size == 0 || ((addr >= pgLo) && ((addr + size) < pgHi)))
+ return 0;
+ }
+ }
+ return ERR_PGPRO_NO_ADDR;
+}
+
+int WinHWPageProtMgr::UnProtectPageForWatchpoint(const TBreakpoint* wp) {
+ const HANDLE& procH = wp->process->GetProcessHandle();
+ const ContextAddress& address = wp->address;
+ const size_t size = wp->size;
+
+ ProtectedPages::iterator p;
+ for (p = protectedPages.begin(); p != protectedPages.end(); ++p ) {
+ ProtectedPage& pg = p->second;
+ if (address+size >= (ContextAddress)pg.baseAddr
+ && address < (ContextAddress)pg.baseAddr + pg.size)
+ {
+ int err = 0;
+ DWORD priorDebugProtection;
+ if (0 == pg.DecRef()) {
+ if (FAILED(::VirtualProtectEx(procH, pg.baseAddr, pg.size,
+ pg.origProtectMode, &priorDebugProtection)))
+ err = ::GetLastError();
+ else
+ protectedPages.erase(p);
+ } else {
+ err = ChangePageProtection(procH, wp, pg);
+ }
+ return err;
+ }
+ }
+ return ERR_PGPRO_NO_ADDR;
+}
+
+
+/*
+ * contract: call only if refCount on passed page is non-0 and if
+ * watchpoint for page being unprotected has valid process
+ * see if all remaining watchpoints in the passed page have a weaker
+ * access setting than the watchpoint that's going away, and if so
+ * change the protection.
+ */
+int WinHWPageProtMgr::ChangePageProtection(const HANDLE& procH,
+ const TBreakpoint* wpGone, ProtectedPage& pg) {
+
+ if (pg.refCount == 0)
+ return ERR_PGPRO_UNCHANGED;
+
+ if (!wpGone)
+ return ERR_INV_CONTEXT;
+
+ if (PAGE_READONLY == sPageProtModeMap(wpGone->accessMode))
+ return 0;
+
+ DWORD otherProt = PAGE_INVALID;
+ ProtectedPageWatchpoints::iterator w;
+ for (w = watchpoints.begin(); w != watchpoints.end(); ++w) {
+ TBreakpoint*& wp = w->second;
+ if (wp == wpGone // looking for other WPs; skip "this" one
+ || wp->process != wpGone->process
+ || wp->address + wp->size <= (ContextAddress)pg.baseAddr
+ || wp->address >= (ContextAddress)pg.baseAddr + pg.size)
+ continue;
+
+ DWORD wpProt = sPageProtModeMap(wp->accessMode);
+ if (PAGE_INVALID == otherProt) {
+ otherProt = wpProt; // first "other-WP" in this page
+ } else if (wpProt < otherProt) {
+ otherProt = PAGE_NOACCESS;
+ break; // another WP in same page w/different access
+ } else if (otherProt < wpProt) {
+ break; // another WP in same page w/different access
+ }
+ // getting here means all remaining WPs have the
+ // the same protection as one another so far
+ }
+
+ // at this point, otherProt value possibilities are:
+ // PAGE_NOACCESS:
+ // some other WP on this pg was already forcing NOACCESS
+ // PAGE_READONLY:
+ // all other WPs on this pg were read-only; mode can be relaxed
+ // PAGE_INVALID:
+ // well ... shouldn't happen w/refCount check at the top
+ if (otherProt != PAGE_READONLY)
+ return 0;
+
+ DWORD dw;
+ if (FAILED(::VirtualProtectEx(wpGone->process->GetProcessHandle(),
+ pg.baseAddr, pg.size, PAGE_READONLY, &dw)))
+ return ::GetLastError();
+ pg.protectMode = PAGE_READONLY;
+
+ return 0;
+}
diff --git a/org.eclipse.cdt.debug.edc.windows.agent/src/win_agent/WinHWPageProtMgr.h b/org.eclipse.cdt.debug.edc.windows.agent/src/win_agent/WinHWPageProtMgr.h
new file mode 100644
index 0000000..3280d3b
--- /dev/null
+++ b/org.eclipse.cdt.debug.edc.windows.agent/src/win_agent/WinHWPageProtMgr.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2011 Nokia 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:
+ * Nokia - Initial API and implementation
+ */
+
+/* WinHWPageProtMgr.h
+ *
+ * Created on: Aug 23, 2011
+ * Author: bkirk
+ */
+
+#ifndef WINHWPAGEPROTMGR_H_
+#define WINHWPAGEPROTMGR_H_
+
+#include <map>
+
+#include "TCFContext.h"
+
+#define MAX_HWBP 4
+
+struct TBreakpoint;
+
+class WinHWPageProtMgr {
+
+ friend class WinProcess;
+ friend class WinThread;
+
+ WinHWPageProtMgr();
+
+ int SetPageProtectWatchpoint(TBreakpoint*);
+ int ClearPageProtectWatchpoint(TBreakpoint*);
+
+ struct ProtectedPage {
+ LPVOID baseAddr;
+ DWORD size;
+ DWORD origProtectMode;
+ DWORD protectMode;
+
+ unsigned char refCount;
+
+ ProtectedPage(const LPVOID& inBaseAddr, const DWORD& inSize,
+ const DWORD& inOrigProtect, const DWORD& newProtect)
+ : baseAddr(inBaseAddr), size(inSize), origProtectMode(inOrigProtect),
+ protectMode(newProtect), refCount(1)
+ {}
+
+ inline void AddRef() { ++refCount; }
+ inline unsigned char DecRef() { return --refCount; }
+ };
+
+ bool IsAddressInProtectedPage(const ContextAddress& addr);
+
+ TBreakpoint* FindWatchpointForAddress(const HANDLE& procH,
+ const ContextAddress&);
+
+ int ProtectPageForWatchpointAddress(const HANDLE& procHandle,
+ const ContextAddress&, const size_t, const DWORD mode);
+ int UnProtectPageForWatchpoint(const TBreakpoint*);
+ int ChangePageProtection(const HANDLE& procH, const TBreakpoint*,
+ ProtectedPage&);
+
+ int EnableForPagesContainingAddress(const HANDLE& procH,
+ const ContextAddress&, const DWORD size = 0,
+ const DWORD mode = PAGE_NOACCESS);
+ int DisableForPagesContainingAddress(const HANDLE& procH,
+ const ContextAddress&, const DWORD size = 0,
+ const DWORD mode = PAGE_NOACCESS);
+
+ typedef std::map<ContextAddress, ProtectedPage> ProtectedPages;
+ typedef std::map<ContextAddress, TBreakpoint*> ProtectedPageWatchpoints;
+
+ typedef std::pair<ContextAddress, ProtectedPage> AddressPagePair;
+ typedef std::pair<ContextAddress, TBreakpoint*> AddressWatchpointPair;
+
+ ProtectedPages protectedPages;
+ ProtectedPageWatchpoints watchpoints;
+
+ static DWORD sPageProtModeMap(unsigned char i);
+};
+
+#endif /* WINHWPAGEPROTMGR_H_ */