mips32: When we are accessing elements via double pointer MIPS compiler can
generate two consecutive 32bit loads instead of one 64bit load. Because of that
in error log we have two conflict loads of size 4 instead of one conflict load
of size 8.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13883 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/drd/tests/Makefile.am b/drd/tests/Makefile.am
index 007b7b2..a3d1110 100644
--- a/drd/tests/Makefile.am
+++ b/drd/tests/Makefile.am
@@ -91,10 +91,14 @@
 	custom_alloc_fiw.stderr.exp		    \
 	custom_alloc_fiw.vgtest			    \
 	fp_race.stderr.exp                          \
+	fp_race.stderr.exp-mips32-be                \
+	fp_race.stderr.exp-mips32-le                \
 	fp_race.vgtest                              \
 	fp_race2.stderr.exp                         \
 	fp_race2.vgtest                             \
 	fp_race_xml.stderr.exp                      \
+	fp_race_xml.stderr.exp-mips32-be            \
+	fp_race.xml.stderr.exp-mips32-le            \
 	fp_race_xml.vgtest                          \
 	free_is_write.stderr.exp		    \
 	free_is_write.vgtest			    \
@@ -211,16 +215,24 @@
 	rwlock_type_checking.stderr.exp	            \
 	rwlock_type_checking.vgtest                 \
 	sem_as_mutex.stderr.exp                     \
+	sem_as_mutex.stderr.exp-mips32-be           \
+	sem_as_mutex.stderr.exp-mips32-le           \
 	sem_as_mutex.vgtest                         \
 	sem_as_mutex2.stderr.exp                    \
 	sem_as_mutex2.vgtest                        \
 	sem_as_mutex3.stderr.exp                    \
+	sem_as_mutex3.stderr.exp-mips32-be          \
+	sem_as_mutex3.stderr.exp-mips32-le          \
 	sem_as_mutex3.vgtest                        \
 	sem_open.stderr.exp                         \
+	sem_open.stderr.exp-mips32-be               \
+	sem_open.stderr.exp-mips32-le               \
 	sem_open.vgtest                             \
 	sem_open2.stderr.exp                        \
 	sem_open2.vgtest                            \
 	sem_open3.stderr.exp                        \
+	sem_open3.stderr.exp-mips32-be              \
+	sem_open3.stderr.exp-mips32-le              \
 	sem_open3.vgtest                            \
 	sem_open_traced.stderr.exp                  \
 	sem_open_traced.vgtest                      \
diff --git a/drd/tests/fp_race.stderr.exp-mips32-be b/drd/tests/fp_race.stderr.exp-mips32-be
new file mode 100644
index 0000000..9de5982
--- /dev/null
+++ b/drd/tests/fp_race.stderr.exp-mips32-be
@@ -0,0 +1,39 @@
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (fp_race.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at fp_race.c:24
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (fp_race.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at fp_race.c:24
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+   at 0x........: main (fp_race.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at fp_race.c:24
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+   at 0x........: main (fp_race.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at fp_race.c:24
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+
+ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/fp_race.stderr.exp-mips32-le b/drd/tests/fp_race.stderr.exp-mips32-le
new file mode 100644
index 0000000..960f344
--- /dev/null
+++ b/drd/tests/fp_race.stderr.exp-mips32-le
@@ -0,0 +1,39 @@
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (fp_race.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at fp_race.c:24
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (fp_race.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at fp_race.c:24
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+   at 0x........: main (fp_race.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at fp_race.c:24
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+   at 0x........: main (fp_race.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at fp_race.c:24
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+
+ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/fp_race_xml.stderr.exp-mips32-be b/drd/tests/fp_race_xml.stderr.exp-mips32-be
new file mode 100644
index 0000000..2960a39
--- /dev/null
+++ b/drd/tests/fp_race_xml.stderr.exp-mips32-be
@@ -0,0 +1,158 @@
+<?xml version="1.0"?>
+
+<valgrindoutput>
+
+<protocolversion>4</protocolversion>
+<protocoltool>drd</protocoltool>
+
+<preamble>
+  <line>...</line>
+  <line>...</line>
+  <line>...</line>
+  <line>...</line>
+</preamble>
+
+<pid>...</pid>
+<ppid>...</ppid>
+<tool>drd</tool>
+
+<args>
+  <vargv>...</vargv>
+  <argv>
+    <exe>./fp_race</exe>
+  </argv>
+</args>
+
+<status>
+  <state>RUNNING</state>
+  <time>...</time>
+</status>
+
+  <trace><text>drd_pre_thread_create creator = 0, created = 1</text></trace>
+  <trace><text>drd_post_thread_create created = 1</text></trace>
+  <trace><text>drd_pre_thread_create creator = 1, created = 2</text></trace>
+  <trace><text>drd_post_thread_create created = 2</text></trace>
+  <trace><text>drd_thread_finished tid = 2</text></trace>
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>ConflictingAccess</kind>
+  <what>Conflicting load by thread x at 0x........ size 4</what>
+  <stack>
+    <frame>
+      <ip>0x........</ip>
+      <obj>...</obj>
+      <fn>main</fn>
+      <dir>...</dir>
+      <file>fp_race.c</file>
+      <line>...</line>
+    </frame>
+  </stack>
+  <auxwhat>Location 0x........ is 4 bytes inside global var "s_d3"</auxwhat>
+  <xauxwhat><text>declared at fp_race.c:24</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
+  <other_segment_start>
+  </other_segment_start>
+  <other_segment_end>
+  </other_segment_end>
+</error>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>ConflictingAccess</kind>
+  <what>Conflicting load by thread x at 0x........ size 4</what>
+  <stack>
+    <frame>
+      <ip>0x........</ip>
+      <obj>...</obj>
+      <fn>main</fn>
+      <dir>...</dir>
+      <file>fp_race.c</file>
+      <line>...</line>
+    </frame>
+  </stack>
+  <auxwhat>Location 0x........ is 0 bytes inside global var "s_d3"</auxwhat>
+  <xauxwhat><text>declared at fp_race.c:24</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
+  <other_segment_start>
+  </other_segment_start>
+  <other_segment_end>
+  </other_segment_end>
+</error>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>ConflictingAccess</kind>
+  <what>Conflicting store by thread x at 0x........ size 4</what>
+  <stack>
+    <frame>
+      <ip>0x........</ip>
+      <obj>...</obj>
+      <fn>main</fn>
+      <dir>...</dir>
+      <file>fp_race.c</file>
+      <line>...</line>
+    </frame>
+  </stack>
+  <auxwhat>Location 0x........ is 4 bytes inside global var "s_d3"</auxwhat>
+  <xauxwhat><text>declared at fp_race.c:24</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
+  <other_segment_start>
+  </other_segment_start>
+  <other_segment_end>
+  </other_segment_end>
+</error>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>ConflictingAccess</kind>
+  <what>Conflicting store by thread x at 0x........ size 4</what>
+  <stack>
+    <frame>
+      <ip>0x........</ip>
+      <obj>...</obj>
+      <fn>main</fn>
+      <dir>...</dir>
+      <file>fp_race.c</file>
+      <line>...</line>
+    </frame>
+  </stack>
+  <auxwhat>Location 0x........ is 0 bytes inside global var "s_d3"</auxwhat>
+  <xauxwhat><text>declared at fp_race.c:24</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
+  <other_segment_start>
+  </other_segment_start>
+  <other_segment_end>
+  </other_segment_end>
+</error>
+
+  <trace><text>drd_post_thread_join joiner = 1, joinee = 2, new vc: [ ... ]</text></trace>
+  <trace><text>drd_thread_finished tid = 1</text></trace>
+
+<status>
+  <state>FINISHED</state>
+  <time>...</time>
+</status>
+
+<errorcounts>
+  <pair>
+    <count>...</count>
+    <unique>0x........</unique>
+  </pair>
+  <pair>
+    <count>...</count>
+    <unique>0x........</unique>
+  </pair>
+  <pair>
+    <count>...</count>
+    <unique>0x........</unique>
+  </pair>
+  <pair>
+    <count>...</count>
+    <unique>0x........</unique>
+  </pair>
+</errorcounts>
+
+<suppcounts>...</suppcounts>
+
+</valgrindoutput>
+
diff --git a/drd/tests/fp_race_xml.stderr.exp-mips32-le b/drd/tests/fp_race_xml.stderr.exp-mips32-le
new file mode 100644
index 0000000..a0edb5e
--- /dev/null
+++ b/drd/tests/fp_race_xml.stderr.exp-mips32-le
@@ -0,0 +1,158 @@
+<?xml version="1.0"?>
+
+<valgrindoutput>
+
+<protocolversion>4</protocolversion>
+<protocoltool>drd</protocoltool>
+
+<preamble>
+  <line>...</line>
+  <line>...</line>
+  <line>...</line>
+  <line>...</line>
+</preamble>
+
+<pid>...</pid>
+<ppid>...</ppid>
+<tool>drd</tool>
+
+<args>
+  <vargv>...</vargv>
+  <argv>
+    <exe>./fp_race</exe>
+  </argv>
+</args>
+
+<status>
+  <state>RUNNING</state>
+  <time>...</time>
+</status>
+
+  <trace><text>drd_pre_thread_create creator = 0, created = 1</text></trace>
+  <trace><text>drd_post_thread_create created = 1</text></trace>
+  <trace><text>drd_pre_thread_create creator = 1, created = 2</text></trace>
+  <trace><text>drd_post_thread_create created = 2</text></trace>
+  <trace><text>drd_thread_finished tid = 2</text></trace>
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>ConflictingAccess</kind>
+  <what>Conflicting load by thread x at 0x........ size 4</what>
+  <stack>
+    <frame>
+      <ip>0x........</ip>
+      <obj>...</obj>
+      <fn>main</fn>
+      <dir>...</dir>
+      <file>fp_race.c</file>
+      <line>...</line>
+    </frame>
+  </stack>
+  <auxwhat>Location 0x........ is 0 bytes inside global var "s_d3"</auxwhat>
+  <xauxwhat><text>declared at fp_race.c:24</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
+  <other_segment_start>
+  </other_segment_start>
+  <other_segment_end>
+  </other_segment_end>
+</error>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>ConflictingAccess</kind>
+  <what>Conflicting load by thread x at 0x........ size 4</what>
+  <stack>
+    <frame>
+      <ip>0x........</ip>
+      <obj>...</obj>
+      <fn>main</fn>
+      <dir>...</dir>
+      <file>fp_race.c</file>
+      <line>...</line>
+    </frame>
+  </stack>
+  <auxwhat>Location 0x........ is 4 bytes inside global var "s_d3"</auxwhat>
+  <xauxwhat><text>declared at fp_race.c:24</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
+  <other_segment_start>
+  </other_segment_start>
+  <other_segment_end>
+  </other_segment_end>
+</error>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>ConflictingAccess</kind>
+  <what>Conflicting store by thread x at 0x........ size 4</what>
+  <stack>
+    <frame>
+      <ip>0x........</ip>
+      <obj>...</obj>
+      <fn>main</fn>
+      <dir>...</dir>
+      <file>fp_race.c</file>
+      <line>...</line>
+    </frame>
+  </stack>
+  <auxwhat>Location 0x........ is 0 bytes inside global var "s_d3"</auxwhat>
+  <xauxwhat><text>declared at fp_race.c:24</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
+  <other_segment_start>
+  </other_segment_start>
+  <other_segment_end>
+  </other_segment_end>
+</error>
+
+<error>
+  <unique>0x........</unique>
+  <tid>...</tid>
+  <kind>ConflictingAccess</kind>
+  <what>Conflicting store by thread x at 0x........ size 4</what>
+  <stack>
+    <frame>
+      <ip>0x........</ip>
+      <obj>...</obj>
+      <fn>main</fn>
+      <dir>...</dir>
+      <file>fp_race.c</file>
+      <line>...</line>
+    </frame>
+  </stack>
+  <auxwhat>Location 0x........ is 4 bytes inside global var "s_d3"</auxwhat>
+  <xauxwhat><text>declared at fp_race.c:24</text> <file>fp_race.c</file> <line>...</line> </xauxwhat>
+  <other_segment_start>
+  </other_segment_start>
+  <other_segment_end>
+  </other_segment_end>
+</error>
+
+  <trace><text>drd_post_thread_join joiner = 1, joinee = 2, new vc: [ ... ]</text></trace>
+  <trace><text>drd_thread_finished tid = 1</text></trace>
+
+<status>
+  <state>FINISHED</state>
+  <time>...</time>
+</status>
+
+<errorcounts>
+  <pair>
+    <count>...</count>
+    <unique>0x........</unique>
+  </pair>
+  <pair>
+    <count>...</count>
+    <unique>0x........</unique>
+  </pair>
+  <pair>
+    <count>...</count>
+    <unique>0x........</unique>
+  </pair>
+  <pair>
+    <count>...</count>
+    <unique>0x........</unique>
+  </pair>
+</errorcounts>
+
+<suppcounts>...</suppcounts>
+
+</valgrindoutput>
+
diff --git a/drd/tests/sem_as_mutex.stderr.exp-mips32-be b/drd/tests/sem_as_mutex.stderr.exp-mips32-be
new file mode 100644
index 0000000..1248c20
--- /dev/null
+++ b/drd/tests/sem_as_mutex.stderr.exp-mips32-be
@@ -0,0 +1,39 @@
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_as_mutex.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at sem_as_mutex.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_as_mutex.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at sem_as_mutex.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+   at 0x........: main (sem_as_mutex.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at sem_as_mutex.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+   at 0x........: main (sem_as_mutex.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at sem_as_mutex.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+
+ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/sem_as_mutex.stderr.exp-mips32-le b/drd/tests/sem_as_mutex.stderr.exp-mips32-le
new file mode 100644
index 0000000..de39e1a
--- /dev/null
+++ b/drd/tests/sem_as_mutex.stderr.exp-mips32-le
@@ -0,0 +1,39 @@
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_as_mutex.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at sem_as_mutex.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_as_mutex.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at sem_as_mutex.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+   at 0x........: main (sem_as_mutex.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at sem_as_mutex.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+   at 0x........: main (sem_as_mutex.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at sem_as_mutex.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+
+ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/sem_as_mutex3.stderr.exp-mips32-be b/drd/tests/sem_as_mutex3.stderr.exp-mips32-be
new file mode 100644
index 0000000..b2f2a3a
--- /dev/null
+++ b/drd/tests/sem_as_mutex3.stderr.exp-mips32-be
@@ -0,0 +1,21 @@
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_as_mutex.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at sem_as_mutex.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_as_mutex.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at sem_as_mutex.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/sem_as_mutex3.stderr.exp-mips32-le b/drd/tests/sem_as_mutex3.stderr.exp-mips32-le
new file mode 100644
index 0000000..91692de
--- /dev/null
+++ b/drd/tests/sem_as_mutex3.stderr.exp-mips32-le
@@ -0,0 +1,21 @@
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_as_mutex.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at sem_as_mutex.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_as_mutex.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at sem_as_mutex.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/sem_open.stderr.exp-mips32-be b/drd/tests/sem_open.stderr.exp-mips32-be
new file mode 100644
index 0000000..f5d73c4
--- /dev/null
+++ b/drd/tests/sem_open.stderr.exp-mips32-be
@@ -0,0 +1,39 @@
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_open.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at sem_open.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_open.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at sem_open.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+   at 0x........: main (sem_open.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at sem_open.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+   at 0x........: main (sem_open.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at sem_open.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+
+ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/sem_open.stderr.exp-mips32-le b/drd/tests/sem_open.stderr.exp-mips32-le
new file mode 100644
index 0000000..9a9d844
--- /dev/null
+++ b/drd/tests/sem_open.stderr.exp-mips32-le
@@ -0,0 +1,39 @@
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_open.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at sem_open.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_open.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at sem_open.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+   at 0x........: main (sem_open.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at sem_open.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting store by thread 1 at 0x........ size 4
+   at 0x........: main (sem_open.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at sem_open.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+
+ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/sem_open3.stderr.exp-mips32-be b/drd/tests/sem_open3.stderr.exp-mips32-be
new file mode 100644
index 0000000..bb3a5dd
--- /dev/null
+++ b/drd/tests/sem_open3.stderr.exp-mips32-be
@@ -0,0 +1,21 @@
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_open.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at sem_open.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_open.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at sem_open.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/sem_open3.stderr.exp-mips32-le b/drd/tests/sem_open3.stderr.exp-mips32-le
new file mode 100644
index 0000000..a4ad764
--- /dev/null
+++ b/drd/tests/sem_open3.stderr.exp-mips32-le
@@ -0,0 +1,21 @@
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_open.c:?)
+Location 0x........ is 0 bytes inside global var "s_d3"
+declared at sem_open.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+Conflicting load by thread 1 at 0x........ size 4
+   at 0x........: main (sem_open.c:?)
+Location 0x........ is 4 bytes inside global var "s_d3"
+declared at sem_open.c:25
+Other segment start (thread 2)
+   (thread finished, call stack no longer available)
+Other segment end (thread 2)
+   (thread finished, call stack no longer available)
+
+
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am
index c78eea6..1874fc4 100644
--- a/memcheck/tests/Makefile.am
+++ b/memcheck/tests/Makefile.am
@@ -109,7 +109,8 @@
 	execve1.stderr.exp execve1.vgtest execve1.stderr.exp-kfail \
 	execve2.stderr.exp execve2.vgtest execve2.stderr.exp-kfail \
 	file_locking.stderr.exp file_locking.vgtest \
-	fprw.stderr.exp fprw.vgtest \
+	fprw.stderr.exp fprw.stderr.exp-mips32-be fprw.stderr.exp-mips32-le \
+		fprw.vgtest \
 	fwrite.stderr.exp fwrite.vgtest fwrite.stderr.exp-kfail \
 	holey_buffer_too_small.vgtest holey_buffer_too_small.stdout.exp \
 	holey_buffer_too_small.stderr.exp \
diff --git a/memcheck/tests/fprw.stderr.exp-mips32-be b/memcheck/tests/fprw.stderr.exp-mips32-be
new file mode 100644
index 0000000..230bb07
--- /dev/null
+++ b/memcheck/tests/fprw.stderr.exp-mips32-be
@@ -0,0 +1,53 @@
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (fprw.c:16)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (fprw.c:17)
+
+Invalid read of size 4
+   at 0x........: main (fprw.c:20)
+ Address 0x........ is 4 bytes inside a block of size 8 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:18)
+
+Invalid read of size 4
+   at 0x........: main (fprw.c:20)
+ Address 0x........ is 0 bytes inside a block of size 8 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:18)
+
+Invalid write of size 4
+   at 0x........: main (fprw.c:20)
+ Address 0x........ is 4 bytes inside a block of size 8 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:18)
+
+Invalid write of size 4
+   at 0x........: main (fprw.c:20)
+ Address 0x........ is 0 bytes inside a block of size 8 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:18)
+
+Invalid read of size 4
+   at 0x........: main (fprw.c:21)
+ Address 0x........ is 0 bytes inside a block of size 4 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:19)
+
+Invalid write of size 4
+   at 0x........: main (fprw.c:21)
+ Address 0x........ is 0 bytes inside a block of size 4 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:19)
+
+Invalid free() / delete / delete[] / realloc()
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:22)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Invalid write of size 4
+   at 0x........: main (fprw.c:24)
+ Address 0x........ is 0 bytes after a block of size 4 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:23)
+
diff --git a/memcheck/tests/fprw.stderr.exp-mips32-le b/memcheck/tests/fprw.stderr.exp-mips32-le
new file mode 100644
index 0000000..67c77f7
--- /dev/null
+++ b/memcheck/tests/fprw.stderr.exp-mips32-le
@@ -0,0 +1,53 @@
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (fprw.c:16)
+
+Conditional jump or move depends on uninitialised value(s)
+   at 0x........: main (fprw.c:17)
+
+Invalid read of size 4
+   at 0x........: main (fprw.c:20)
+ Address 0x........ is 0 bytes inside a block of size 8 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:18)
+
+Invalid read of size 4
+   at 0x........: main (fprw.c:20)
+ Address 0x........ is 4 bytes inside a block of size 8 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:18)
+
+Invalid write of size 4
+   at 0x........: main (fprw.c:20)
+ Address 0x........ is 0 bytes inside a block of size 8 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:18)
+
+Invalid write of size 4
+   at 0x........: main (fprw.c:20)
+ Address 0x........ is 4 bytes inside a block of size 8 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:18)
+
+Invalid read of size 4
+   at 0x........: main (fprw.c:21)
+ Address 0x........ is 0 bytes inside a block of size 4 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:19)
+
+Invalid write of size 4
+   at 0x........: main (fprw.c:21)
+ Address 0x........ is 0 bytes inside a block of size 4 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:19)
+
+Invalid free() / delete / delete[] / realloc()
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:22)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Invalid write of size 4
+   at 0x........: main (fprw.c:24)
+ Address 0x........ is 0 bytes after a block of size 4 alloc'd
+   at 0x........: malloc (vg_replace_malloc.c:...)
+   by 0x........: main (fprw.c:23)
+