diff --git a/core/org.eclipse.cdt.ui.tests/.classpath b/core/org.eclipse.cdt.ui.tests/.classpath
index 9fb20c1d6fd..a067b89762f 100644
--- a/core/org.eclipse.cdt.ui.tests/.classpath
+++ b/core/org.eclipse.cdt.ui.tests/.classpath
@@ -3,6 +3,7 @@
+
diff --git a/core/org.eclipse.cdt.ui.tests/build.properties b/core/org.eclipse.cdt.ui.tests/build.properties
index 1eab93ac3d4..36df47cc74a 100644
--- a/core/org.eclipse.cdt.ui.tests/build.properties
+++ b/core/org.eclipse.cdt.ui.tests/build.properties
@@ -1 +1 @@
-source.cdttests.jar = src/
+source.cdttests.jar = src/, ui/, core/, model/
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java
new file mode 100644
index 00000000000..962e93ad87c
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java
@@ -0,0 +1,44 @@
+package org.eclipse.cdt.core.model.tests;
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+
+import org.eclipse.cdt.internal.core.model.TranslationUnit;
+import org.eclipse.cdt.testplugin.util.*;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+
+/**
+ *
+ * AllTests.java
+ * This is the main entry point for running this suite of JUnit tests
+ * for all tests within the package "org.eclipse.cdt.core.model"
+ *
+ * @author Judy N. Green
+ * @since Jul 19, 2002
+ */
+public class AllCoreTests {
+
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+
+ // Just add more test cases here as you create them for
+ // each class being tested
+
+ suite.addTest(CModelTests.suite());
+ suite.addTest(CModelExceptionTest.suite());
+ suite.addTest(FlagTests.suite());
+ suite.addTest(ArchiveTests.suite());
+ suite.addTest(TranslationUnitTests.suite());
+ return suite;
+
+ }
+} // End of AllCoreTests.java
+
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/ArchiveTests.java b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/ArchiveTests.java
new file mode 100644
index 00000000000..1bd4e9be66f
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/ArchiveTests.java
@@ -0,0 +1,305 @@
+package org.eclipse.cdt.core.model.tests;
+
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.eclipse.cdt.testplugin.*;
+import org.eclipse.cdt.testplugin.util.*;
+import org.eclipse.cdt.core.model.*;
+import org.eclipse.core.internal.runtime.Log;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.CCProjectNature;
+import org.eclipse.cdt.core.CProjectNature;
+import org.eclipse.cdt.internal.core.model.*;
+
+
+/**
+ * @author Peter Graves
+ *
+ * This file contains a set of generic tests for the core C model's Archive
+ * class. There is nothing exotic here, mostly just sanity type tests
+ *
+ */
+public class ArchiveTests extends TestCase {
+ IWorkspace workspace;
+ IWorkspaceRoot root;
+ ICProject testProject;
+ IFile cfile, exefile, libfile, archfile, objfile;
+ Path cpath, exepath, libpath, archpath, objpath;
+ NullProgressMonitor monitor;
+
+
+ /**
+ * Constructor for ArchiveTests
+ * @param name
+ */
+ public ArchiveTests(String name) {
+ super(name);
+ /***
+ * The assume that they have a working workspace
+ * and workspace root object to use to create projects/files in,
+ * so we need to get them setup first.
+ */
+ workspace= ResourcesPlugin.getWorkspace();
+ root= workspace.getRoot();
+ monitor = new NullProgressMonitor();
+ if (workspace==null)
+ fail("Workspace was not setup");
+ if (root==null)
+ fail("Workspace root was not setup");
+
+ }
+
+ /**
+ * Sets up the test fixture.
+ *
+ * Called before every test case method.
+ *
+ * Example code test the packages in the project
+ * "com.qnx.tools.ide.cdt.core"
+ */
+ protected void setUp() throws CoreException,FileNotFoundException {
+
+ /***
+ * Setup the various files, paths and projects that are needed by the
+ * tests
+ */
+ String pluginRoot=org.eclipse.core.runtime.Platform.getPlugin("org.eclipse.cdt.ui.tests").find(new Path("/")).getFile();
+ testProject=CProjectHelper.createCProject("filetest", "none");
+ if (testProject==null)
+ fail("Unable to create project");
+
+ cfile = testProject.getProject().getFile("exetest.c");
+ if (!cfile.exists()) {
+ cfile.create(new FileInputStream(pluginRoot+"model/org/eclipse/cdt/core/model/tests/resources/exe/main.c"),false, monitor);
+
+ }
+ cpath=new Path(workspace.getRoot().getLocation()+"/filetest/main.c");
+
+ objfile = testProject.getProject().getFile("exetest.o");
+ if (!objfile.exists()) {
+ objfile.create(new FileInputStream(pluginRoot+"model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/main.o"),false, monitor);
+
+ }
+ objpath=new Path(workspace.getRoot().getLocation()+"/filetest/main.o");
+
+ exefile = testProject.getProject().getFile("test_g");
+ if (!exefile.exists()) {
+ exefile.create(new FileInputStream(pluginRoot+"model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/exe_g"),false, monitor);
+
+ }
+ exepath=new Path(workspace.getRoot().getLocation()+"/filetest/exe_g");
+
+ archfile = testProject.getProject().getFile("libtestlib_g.a");
+ if (!archfile.exists()) {
+ archfile.create(new FileInputStream(pluginRoot+"model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/libtestlib_g.a"),false, monitor);
+
+ }
+ libpath=new Path(workspace.getRoot().getLocation()+"/filetest/libtestlib_g.so");
+
+ libfile = testProject.getProject().getFile("libtestlib_g.so");
+ if (!libfile.exists()) {
+ libfile.create(new FileInputStream(pluginRoot+"model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/libtestlib_g.so"),false, monitor);
+
+ }
+ archpath=new Path(workspace.getRoot().getLocation()+"/filetest/libtestlib_g.a");
+
+
+ }
+
+ /**
+ * Tears down the test fixture.
+ *
+ * Called after every test case method.
+ */
+ protected void tearDown() throws CoreException {
+ CProjectHelper.delete(testProject);
+ }
+
+ public static TestSuite suite() {
+ return new TestSuite(ArchiveTests.class);
+ }
+
+ public static void main (String[] args){
+ junit.textui.TestRunner.run(suite());
+ }
+
+
+ /***
+ * This is a simple test to make sure we can not create an Archive with
+ * a non-archive Ifile/IPath
+ * Note: This test is of questionable merit, as people should always be
+ * getting their binaries from the project, not creating them themselves
+
+ */
+ public void testArchive() throws CoreException {
+ Archive myArchive;
+ boolean caught;
+
+ myArchive=null;
+ caught=false;
+ try {
+ myArchive=new Archive(testProject, cfile);
+ } catch (IllegalArgumentException e) {
+ caught=true;
+ }
+ assertTrue("PR:12037 Created an archive with a C file", caught);
+ myArchive=null;
+ caught=false;
+ try {
+ myArchive=new Archive(testProject, cpath);
+ } catch (IllegalArgumentException e) {
+ caught=true;
+ }
+ assertTrue("Created an archive with a C file", caught);
+
+ myArchive=null;
+ caught=false;
+ try {
+ myArchive=new Archive(testProject, objfile);
+ } catch (IllegalArgumentException e) {
+ caught=true;
+ }
+ assertTrue("Created an archive with a .o file", caught);
+ myArchive=null;
+ caught=false;
+ try {
+ myArchive=new Archive(testProject, objpath);
+ } catch (IllegalArgumentException e) {
+ caught=true;
+ }
+ assertTrue("Created an archive with a .o file", caught);
+
+ myArchive=null;
+ caught=false;
+ try {
+ myArchive=new Archive(testProject, exefile);
+ } catch (IllegalArgumentException e) {
+ caught=true;
+ }
+ assertTrue("Created an archive with a exe file", caught);
+ myArchive=null;
+ caught=false;
+ try {
+ myArchive=new Archive(testProject, exepath);
+ } catch (IllegalArgumentException e) {
+ caught=true;
+ }
+ assertTrue("Created an archive with a exe file", caught);
+
+ myArchive=null;
+ caught=false;
+ try {
+ myArchive=new Archive(testProject, libfile);
+ } catch (IllegalArgumentException e) {
+ caught=true;
+ }
+ assertTrue("Created an archive with a .so file", caught);
+ myArchive=null;
+ caught=false;
+ try {
+ myArchive=new Archive(testProject, libpath);
+ } catch (IllegalArgumentException e) {
+ caught=true;
+ }
+ assertTrue("Created an archive with a .so file", caught);
+
+ myArchive=null;
+ caught=false;
+ try {
+ myArchive=new Archive(testProject, archfile);
+ } catch (IllegalArgumentException e) {
+ caught=true;
+ }
+ assertTrue("Created an archive with a .a file", !caught);
+ myArchive=null;
+ caught=false;
+ try {
+ myArchive=new Archive(testProject, archpath);
+ } catch (IllegalArgumentException e) {
+ caught=true;
+ }
+ assertTrue("Created an archive with a .a file", !caught);
+
+
+ }
+
+
+
+ public void testGetBinaries() throws CoreException,FileNotFoundException {
+ Archive myArchive;
+ IBinary[] bins;
+ ICElement[] elements;
+ ExpectedStrings expBin, expObj[];
+ String[] myStrings;
+ int x;
+ IArchive[] myArchives;
+
+
+ /****
+ * Setup the expected strings for the binaries, and the elements within
+ * the binaries
+ */
+ myStrings=new String[2];
+ myStrings[0]="test.o";
+ myStrings[1]="test2.o";
+ expBin=new ExpectedStrings(myStrings);
+
+ expObj=new ExpectedStrings[2];
+ myStrings[0]="func1";
+ myStrings[1]="func2";
+ expObj[0]=new ExpectedStrings(myStrings);
+ myStrings[0]="test2func1";
+ myStrings[1]="test2func2";
+ expObj[1]=new ExpectedStrings(myStrings);
+
+ /***
+ * Grab the archive we want to test, and find all the binaries and
+ * all the elements in all the binaries and make sure we get
+ * everything we expect.
+ */
+ myArchive=CProjectHelper.findArchive(testProject, "libtestlib_g.a");
+ if (myArchive==null)
+ fail("Could not find archive");
+ bins=myArchive.getBinaries();
+ for (x=0;x
+#include
+
+/* A function prototype */
+int func2p(void);
+
+/* A global variable */
+int globalvar;
+
+/* A enumeration */
+enum myenum {ENUM_A=1, ENUM_B=2, ENUM_C=3, ENUM_D=4};
+
+/* A structure. This also includes a typedef around the strcture def
+ * which at the time of writing was not picked up.
+ */
+typedef struct mystruct {
+ int a;
+ char b;
+ long c;
+} mystruct_t;
+
+/* A union */
+union myunion {
+ int x;
+ char y;
+ long z;
+};
+
+/* A typedef */
+typedef struct mystruct mytype;
+
+
+/* A couple functions */
+
+void * func1(void)
+{
+ return(NULL);
+}
+
+
+int func2(void)
+{
+ return(0);
+}
+
+int main(int argc, char ** argv)
+{
+ int var1;
+ printf("Hello world\n");
+}
+
+
+void func3()
+{
+ printf("This is not really here\n");
+}
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/Makefile
new file mode 100644
index 00000000000..0e22650c04c
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/Makefile
@@ -0,0 +1,8 @@
+LIST=VARIANT
+ifndef QRECURSE
+QRECURSE=recurse.mk
+ifdef QCONFIG
+QRDIR=$(dir $(QCONFIG))
+endif
+endif
+include $(QRDIR)$(QRECURSE)
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/common.mk b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/common.mk
new file mode 100644
index 00000000000..6e21c521623
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/common.mk
@@ -0,0 +1,7 @@
+ifndef QCONFIG
+QCONFIG=qconfig.mk
+endif
+include $(QCONFIG)
+USEFILE=
+LIBS+=socket
+include $(MKFILES_ROOT)/qtargets.mk
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/main.c b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/main.c
new file mode 100644
index 00000000000..62952639754
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/main.c
@@ -0,0 +1,7 @@
+#include
+
+int main()
+{
+ printf("Hello there\n");
+ return(0);
+}
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/Makefile
new file mode 100644
index 00000000000..0e22650c04c
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/Makefile
@@ -0,0 +1,8 @@
+LIST=VARIANT
+ifndef QRECURSE
+QRECURSE=recurse.mk
+ifdef QCONFIG
+QRDIR=$(dir $(QCONFIG))
+endif
+endif
+include $(QRDIR)$(QRECURSE)
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/Makefile
new file mode 100644
index 00000000000..2c760893e32
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/Makefile
@@ -0,0 +1 @@
+include ../../common.mk
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/exe_g b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/exe_g
new file mode 100644
index 00000000000..1c54db11d20
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/exe_g differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/main.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/main.o
new file mode 100644
index 00000000000..41e9e97110e
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/main.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/test.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/test.o
new file mode 100644
index 00000000000..9a35dfb2cf9
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/test.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/test2.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/test2.o
new file mode 100644
index 00000000000..bae3191b475
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/ppc/be.g/test2.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/test.c b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/test.c
new file mode 100644
index 00000000000..23baffafb31
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/test.c
@@ -0,0 +1,14 @@
+#include
+
+
+int func1 (void)
+{
+ printf("This is func1\n");
+ return(1);
+}
+
+char * func2(void)
+{
+ printf("This is func2\n");
+ return(0);
+}
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/test2.c b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/test2.c
new file mode 100644
index 00000000000..7b26241b059
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/test2.c
@@ -0,0 +1,13 @@
+#include
+
+int test2func1(void)
+{
+ printf("This is a function in the second object\n");
+ return(1);
+}
+
+int test2func2(void)
+{
+ printf("This is another function in the second object\n");
+ return(2);
+}
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/Makefile
new file mode 100644
index 00000000000..0e22650c04c
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/Makefile
@@ -0,0 +1,8 @@
+LIST=VARIANT
+ifndef QRECURSE
+QRECURSE=recurse.mk
+ifdef QCONFIG
+QRDIR=$(dir $(QCONFIG))
+endif
+endif
+include $(QRDIR)$(QRECURSE)
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/Makefile
new file mode 100644
index 00000000000..2c760893e32
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/Makefile
@@ -0,0 +1 @@
+include ../../common.mk
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/exe_g b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/exe_g
new file mode 100644
index 00000000000..465e16de33d
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/exe_g differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/main.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/main.o
new file mode 100644
index 00000000000..8c61c21f50d
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/main.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/test.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/test.o
new file mode 100644
index 00000000000..5f956885cbf
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/test.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/test2.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/test2.o
new file mode 100644
index 00000000000..aa8de348603
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o.g/test2.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/Makefile
new file mode 100644
index 00000000000..2c760893e32
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/Makefile
@@ -0,0 +1 @@
+include ../../common.mk
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/exe b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/exe
new file mode 100644
index 00000000000..d13631162d7
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/exe differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/main.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/main.o
new file mode 100644
index 00000000000..a5c78c1ca4e
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/main.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/test.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/test.o
new file mode 100644
index 00000000000..357c3985ea1
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/test.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/test2.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/test2.o
new file mode 100644
index 00000000000..52e88a7397b
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exe/x86/o/test2.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/Makefile
new file mode 100644
index 00000000000..0e22650c04c
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/Makefile
@@ -0,0 +1,8 @@
+LIST=VARIANT
+ifndef QRECURSE
+QRECURSE=recurse.mk
+ifdef QCONFIG
+QRDIR=$(dir $(QCONFIG))
+endif
+endif
+include $(QRDIR)$(QRECURSE)
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/common.mk b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/common.mk
new file mode 100644
index 00000000000..80c1e67f6f8
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/common.mk
@@ -0,0 +1,7 @@
+ifndef QCONFIG
+QCONFIG=qconfig.mk
+endif
+include $(QCONFIG)
+USEFILE=
+
+include $(MKFILES_ROOT)/qtargets.mk
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/main.c b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/main.c
new file mode 100644
index 00000000000..ce93b899e09
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/main.c
@@ -0,0 +1,8 @@
+#include
+int bigArray[100];
+int x[10]={1,2,3,4,5,6,7,8,9,0};
+int main()
+{
+ printf("Hello there\n");
+ return(0);
+}
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/x86/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/x86/Makefile
new file mode 100644
index 00000000000..0e22650c04c
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/x86/Makefile
@@ -0,0 +1,8 @@
+LIST=VARIANT
+ifndef QRECURSE
+QRECURSE=recurse.mk
+ifdef QCONFIG
+QRDIR=$(dir $(QCONFIG))
+endif
+endif
+include $(QRDIR)$(QRECURSE)
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/x86/o.g/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/x86/o.g/Makefile
new file mode 100644
index 00000000000..2c760893e32
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/x86/o.g/Makefile
@@ -0,0 +1 @@
+include ../../common.mk
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/x86/o.g/exebig_g b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/x86/o.g/exebig_g
new file mode 100644
index 00000000000..3aacf6267c5
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/x86/o.g/exebig_g differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/x86/o.g/main.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/x86/o.g/main.o
new file mode 100644
index 00000000000..e7d818de524
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/exebig/x86/o.g/main.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/Makefile
new file mode 100644
index 00000000000..0e22650c04c
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/Makefile
@@ -0,0 +1,8 @@
+LIST=VARIANT
+ifndef QRECURSE
+QRECURSE=recurse.mk
+ifdef QCONFIG
+QRDIR=$(dir $(QCONFIG))
+endif
+endif
+include $(QRDIR)$(QRECURSE)
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/common.mk b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/common.mk
new file mode 100644
index 00000000000..dd99ed569bc
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/common.mk
@@ -0,0 +1,6 @@
+ifndef QCONFIG
+QCONFIG=qconfig.mk
+endif
+include $(QCONFIG)
+
+include $(MKFILES_ROOT)/qtargets.mk
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/test.c b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/test.c
new file mode 100644
index 00000000000..23baffafb31
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/test.c
@@ -0,0 +1,14 @@
+#include
+
+
+int func1 (void)
+{
+ printf("This is func1\n");
+ return(1);
+}
+
+char * func2(void)
+{
+ printf("This is func2\n");
+ return(0);
+}
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/test2.c b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/test2.c
new file mode 100644
index 00000000000..7b26241b059
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/test2.c
@@ -0,0 +1,13 @@
+#include
+
+int test2func1(void)
+{
+ printf("This is a function in the second object\n");
+ return(1);
+}
+
+int test2func2(void)
+{
+ printf("This is another function in the second object\n");
+ return(2);
+}
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/Makefile
new file mode 100644
index 00000000000..0e22650c04c
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/Makefile
@@ -0,0 +1,8 @@
+LIST=VARIANT
+ifndef QRECURSE
+QRECURSE=recurse.mk
+ifdef QCONFIG
+QRDIR=$(dir $(QCONFIG))
+endif
+endif
+include $(QRDIR)$(QRECURSE)
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/Makefile
new file mode 100644
index 00000000000..2c760893e32
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/Makefile
@@ -0,0 +1 @@
+include ../../common.mk
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/libtestlib_g.a b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/libtestlib_g.a
new file mode 100644
index 00000000000..06377b5ef2f
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/libtestlib_g.a differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/test.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/test.o
new file mode 100644
index 00000000000..a12942b1527
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/test.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/test2.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/test2.o
new file mode 100644
index 00000000000..87e730cd7c5
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/a.g/test2.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/Makefile b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/Makefile
new file mode 100644
index 00000000000..2c760893e32
--- /dev/null
+++ b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/Makefile
@@ -0,0 +1 @@
+include ../../common.mk
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/libtestlib_g.so b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/libtestlib_g.so
new file mode 100644
index 00000000000..c0e76f7695b
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/libtestlib_g.so differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/libtestlib_gS.a b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/libtestlib_gS.a
new file mode 100644
index 00000000000..b03c33bdc91
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/libtestlib_gS.a differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/test.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/test.o
new file mode 100644
index 00000000000..c9009cb22dc
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/test.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/test2.o b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/test2.o
new file mode 100644
index 00000000000..a13bcd826b8
Binary files /dev/null and b/core/org.eclipse.cdt.ui.tests/model/org/eclipse/cdt/core/model/tests/resources/testlib/x86/so.g/test2.o differ
diff --git a/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/testplugin/CProjectHelper.java b/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/testplugin/CProjectHelper.java
index 02e0051ab9f..0c295a28bd3 100644
--- a/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/testplugin/CProjectHelper.java
+++ b/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/testplugin/CProjectHelper.java
@@ -13,6 +13,14 @@ import org.eclipse.cdt.core.CProjectNature;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICFolder;
import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.internal.core.model.Archive;
+import org.eclipse.cdt.internal.core.model.Binary;
+import org.eclipse.cdt.internal.core.model.BinaryContainer;
+import org.eclipse.cdt.internal.core.model.TranslationUnit;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.internal.core.model.ArchiveContainer;
+import org.eclipse.cdt.core.model.IArchive;
+import org.eclipse.cdt.core.model.IBinary;
import org.eclipse.cdt.internal.core.model.CModelManager;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
@@ -135,7 +143,132 @@ public class CProjectHelper {
//IClasspathEntry cpe= JavaCore.newProjectEntry(required.getProject().getFullPath());
//addToClasspath(cproject, cpe);
}
-
+
+ /**
+ * Attempts to find an archive with the given name in the workspace
+ */
+ public static Archive findArchive(ICProject testProject,String name) {
+ Archive myArchive;
+ int x;
+ IArchive[] myArchives;
+ ArchiveContainer archCont;
+ /***
+ * Since ArchiveContainer.getArchives does not wait until
+ * all the archives in the project have been parsed before
+ * returning the list, we have to do a sync ArchiveContainer.getChildren
+ * first to make sure we find all the archives.
+ */
+ archCont=(ArchiveContainer)testProject.getArchiveContainer();
+ archCont.getChildren(true);
+ myArchives=testProject.getArchiveContainer().getArchives();
+ if (myArchives.length<1)
+ return(null);
+ myArchive=null;
+ for (x=0;x