diff --git a/coregrind/m_ume.c b/coregrind/m_ume.c
index 8151267..5a1f74b 100644
--- a/coregrind/m_ume.c
+++ b/coregrind/m_ume.c
@@ -30,15 +30,11 @@
 */
 
 
-#define _GNU_SOURCE
-#define _FILE_OFFSET_BITS 64
-
-// It seems that on SuSE 9.1 (x86) something in <fcntl.h> messes up stuff
-// acquired indirectly from vki-x86-linux.h.  Therefore our headers must be
-// included ahead of the glibc ones.  This fix is a kludge;  the right
-// solution is to entirely remove the glibc dependency.
 #include "pub_core_basics.h"
 #include "pub_core_vki.h"
+
+#if defined(VGO_linux)
+
 #include "pub_core_aspacemgr.h"   // various mapping fns
 #include "pub_core_debuglog.h"
 #include "pub_core_libcbase.h"
@@ -49,9 +45,14 @@
 #include "pub_core_libcassert.h"  // VG_(exit), vg_assert
 #include "pub_core_mallocfree.h"  // VG_(malloc), VG_(free)
 #include "pub_core_syscall.h"     // VG_(strerror)
-#include "pub_core_vkiscnums.h"   // mmap-related constants
+#include "pub_core_ume.h"         // self
 
-#include "pub_core_ume.h"
+/* --- !!! --- EXTERNAL HEADERS start --- !!! --- */
+#define _GNU_SOURCE
+#define _FILE_OFFSET_BITS 64
+/* This is for ELF types etc, and also the AT_ constants. */
+#include <elf.h>
+/* --- !!! --- EXTERNAL HEADERS end --- !!! --- */
 
 
 #if	VG_WORDSIZE == 8
@@ -73,7 +74,7 @@
 {
    if (res.isError) {
       VG_(printf)("valgrind: mmap(0x%llx, %lld) failed in UME with error %d.\n", 
-                  (ULong)base, (Long)len, res.val);
+                  (ULong)base, (Long)len, res.err);
       VG_(exit)(1);
    }
 }
@@ -119,9 +120,9 @@
    e->fd = fd;
 
    sres = VG_(pread)(fd, &e->e, sizeof(e->e), 0);
-   if (sres.isError || sres.val != sizeof(e->e)) {
+   if (sres.isError || sres.res != sizeof(e->e)) {
       VG_(printf)("valgrind: %s: can't read ELF header: %s\n", 
-                  filename, VG_(strerror)(sres.val));
+                  filename, VG_(strerror)(sres.err));
       goto bad;
    }
 
@@ -159,9 +160,9 @@
    vg_assert(e->p);
 
    sres = VG_(pread)(fd, e->p, phsz, e->e.e_phoff);
-   if (sres.isError || sres.val != phsz) {
+   if (sres.isError || sres.res != phsz) {
       VG_(printf)("valgrind: can't read phdr: %s\n", 
-                  VG_(strerror)(sres.val));
+                  VG_(strerror)(sres.err));
       VG_(free)(e->p);
       goto bad;
    }
@@ -384,7 +385,7 @@
 	    VG_(printf)("valgrind: m_ume.c: can't open interpreter\n");
 	    VG_(exit)(1);
 	 }
-         intfd = sres.val;
+         intfd = sres.res;
 
 	 interp = readelf(intfd, buf);
 	 if (interp == NULL) {
@@ -573,7 +574,7 @@
       VG_(close)(fd);
       return VKI_EACCES;
    } else {
-      len = res.val;
+      len = res.res;
    }
 
    vg_assert('#' == hdr[0] && '!' == hdr[1]);
@@ -641,7 +642,7 @@
    if (res.isError) {
       return res;
    }
-   fd = res.val;
+   fd = res.res;
 
    // Check we have execute permissions
    ret = VG_(check_executable)((HChar*)exe_name);
@@ -655,11 +656,11 @@
       bufsz = fsz;
 
    res = VG_(pread)(fd, buf, bufsz, 0);
-   if (res.isError || res.val != bufsz) {
+   if (res.isError || res.res != bufsz) {
       VG_(close)(fd);
       return VG_(mk_SysRes_Error)(VKI_EACCES);
    }
-   bufsz = res.val;
+   bufsz = res.res;
 
    if (match_ELF(buf, bufsz)) {
       res = VG_(mk_SysRes_Success)(VG_EXE_FORMAT_ELF);
@@ -692,9 +693,9 @@
 
    res = VG_(pre_exec_check)(exe, &fd);
    if (res.isError)
-      return res.val;
+      return res.err;
 
-   switch (res.val) {
+   switch (res.res) {
     case VG_EXE_FORMAT_ELF:    ret = load_ELF   (fd, exe, info); break;
     case VG_EXE_FORMAT_SCRIPT: ret = load_script(fd, exe, info); break;
     default:
@@ -712,7 +713,7 @@
    SysRes res = VG_(open)(f, VKI_O_RDONLY, 0);
    if (!res.isError) {
       Char buf[3] = {0,0,0};
-      Int fd = res.val;
+      Int fd = res.res;
       Int n  = VG_(read)(fd, buf, 2); 
       if (n == 2 && VG_STREQ("#!", buf))
          return True;
@@ -728,7 +729,7 @@
    SysRes res = VG_(open)(f, VKI_O_RDONLY, 0);
    if (!res.isError) {
       UChar buf[80];
-      Int fd = res.val;
+      Int fd = res.res;
       Int n  = VG_(read)(fd, buf, 80); 
       Int i;
       for (i = 0; i < n; i++) {
@@ -833,6 +834,8 @@
    return ret;
 }
 
+#endif /* defined(VGO_linux) */
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
diff --git a/coregrind/pub_core_ume.h b/coregrind/pub_core_ume.h
index 1b63756..5d15464 100644
--- a/coregrind/pub_core_ume.h
+++ b/coregrind/pub_core_ume.h
@@ -33,41 +33,9 @@
 
 //--------------------------------------------------------------------
 // PURPOSE: This module implements user-mode execve, ie. program loading
-// and exec'ing.  It is shared between stage1 and stage2.
+// and exec'ing.
 //--------------------------------------------------------------------
 
-#include <elf.h>
-#include <sys/types.h>
-
-/*------------------------------------------------------------*/
-/*--- General stuff                                        ---*/
-/*------------------------------------------------------------*/
-
-/* This is only here so it can be shared between stage1 and stage2 */
-
-/* JRS 9 Aug 05: both of these are apparently unused, except by
-   memcheck/tests/vgtest_ume.c. */
-//zz extern
-//zz void VG_(foreach_map)(int (*fn)(char *start, char *end,
-//zz 			        const char *perm, off_t offset,
-//zz 			        int maj, int min, int ino, void* extra),
-//zz                       void* extra);
-//zz 
-//zz /* Jump to 'dst', but first set the stack pointer to 'stack'.  Also,
-//zz    clear all the integer registers before entering 'dst'.  It's
-//zz    important that the stack pointer is set to exactly 'stack' and not
-//zz    (eg) stack - apparently_harmless_looking_small_offset.  Basically
-//zz    because the code at 'dst' might be wanting to scan the area above
-//zz    'stack' (viz, the auxv array), and putting spurious words on the
-//zz    stack confuses it.
-//zz 
-//zz    This is only exported so that vgtest_ume.c can use it.
-//zz */
-//zz extern
-//zz __attribute__((noreturn))
-//zz void VG_(jump_and_switch_stacks) ( Addr stack, Addr dst );
-
-
 /*------------------------------------------------------------*/
 /*--- Loading ELF files                                    ---*/
 /*------------------------------------------------------------*/
