diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRegistersTest.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRegistersTest.java index dc81c1f9beb..62645532a69 100644 --- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRegistersTest.java +++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRegistersTest.java @@ -65,13 +65,18 @@ import org.junit.runner.RunWith; @RunWith(BackgroundRunner.class) public class MIRegistersTest extends BaseTestCase { - - static final List X86_REGS = new LinkedList(Arrays.asList("eax","ecx","edx","ebx","esp","ebp","esi","edi","eip","eflags","cs","ss","ds","es","fs","gs","st0","st1","st2","st3","st4","st5","st6","st7","fctrl","fstat","ftag","fiseg","fioff","foseg","fooff","fop","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7","mxcsr","orig_eax","mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7")); - static { + + protected List get_X86_REGS() { + List list = new LinkedList(Arrays.asList("eax","ecx","edx","ebx","esp","ebp","esi","edi","eip","eflags", + "cs","ss","ds","es","fs","gs","st0","st1","st2","st3", + "st4","st5","st6","st7","fctrl","fstat","ftag","fiseg","fioff","foseg", + "fooff","fop","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7", + "mxcsr","orig_eax","mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7")); // On Windows, gdb doesn't report "orig_eax" as a register. Apparently it does on Linux - if (Platform.getOS().equals(Platform.OS_WIN32)) { - X86_REGS.remove("orig_eax"); + if (Platform.getOS().equals(Platform.OS_WIN32)) { + list.remove("orig_eax"); } + return list; } /* @@ -195,7 +200,7 @@ public class MIRegistersTest extends BaseTestCase { fWait.waitReset(); - assertEquals("Wrong number of registers", X86_REGS.size(), regContexts.length); + assertEquals("Wrong number of registers", get_X86_REGS().size(), regContexts.length); return(regContexts); } @@ -230,7 +235,7 @@ public class MIRegistersTest extends BaseTestCase { MIStoppedEvent stoppedEvent = getInitialStoppedEvent(); IFrameDMContext frameDmc = SyncUtil.getStackFrame(stoppedEvent.getDMContext(), 0); final IRegisterDMContext[] regDMCs = getRegisters(frameDmc); - assertEquals("Wrong number of registers", X86_REGS.size(), regDMCs.length); + assertEquals("Wrong number of registers", get_X86_REGS().size(), regDMCs.length); } @Test @@ -238,7 +243,7 @@ public class MIRegistersTest extends BaseTestCase { MIStoppedEvent stoppedEvent = getInitialStoppedEvent(); IFrameDMContext frameDmc = SyncUtil.getStackFrame(stoppedEvent.getDMContext(), 0); final IRegisterDMContext[] regDMCs = getRegisters(frameDmc); - List regNames = X86_REGS; + List regNames = get_X86_REGS(); Query query = new Query() { @Override diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_2/MIRegistersTest_7_2.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_2/MIRegistersTest_7_2.java index 0e81ce9bb3e..b47a54714a8 100644 --- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_2/MIRegistersTest_7_2.java +++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_2/MIRegistersTest_7_2.java @@ -10,9 +10,14 @@ *******************************************************************************/ package org.eclipse.cdt.tests.dsf.gdb.tests.tests_7_2; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + import org.eclipse.cdt.tests.dsf.gdb.framework.BackgroundRunner; import org.eclipse.cdt.tests.dsf.gdb.tests.ITestConstants; import org.eclipse.cdt.tests.dsf.gdb.tests.MIRegistersTest; +import org.eclipse.core.runtime.Platform; import org.junit.BeforeClass; import org.junit.runner.RunWith; @@ -22,4 +27,23 @@ public class MIRegistersTest_7_2 extends MIRegistersTest { public static void beforeClassMethod_7_2() { setGdbProgramNamesLaunchAttributes(ITestConstants.SUFFIX_GDB_7_2); } + + // GDB's list of registers is different with GDB 7.2 + @Override + protected List get_X86_REGS() { + List list = new LinkedList(Arrays.asList("eax","ecx","edx","ebx","esp","ebp","esi","edi","eip","eflags", + "cs","ss","ds","es","fs","gs","st0","st1","st2","st3", + "st4","st5","st6","st7","fctrl","fstat","ftag","fiseg","fioff","foseg", + "fooff","fop","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7", + "mxcsr",/*"","","","","","","","",*/"orig_eax", + "al","cl","dl","bl","ah","ch","dh","bh","ax","cx", + "dx","bx",/*"",*/"bp","si","di","mm0","mm1","mm2","mm3", + "mm4","mm5","mm6","mm7")); + // On Windows, gdb doesn't report "orig_eax" as a register. Apparently it does on Linux + if (Platform.getOS().equals(Platform.OS_WIN32)) { + list.remove("orig_eax"); + } + return list; + } + }