PERFORCE change 152765 for review

Peter Wemm peter at FreeBSD.org
Mon Nov 10 13:17:50 PST 2008


http://perforce.freebsd.org/chv.cgi?CH=152765

Change 152765 by peter at peter_freefall on 2008/11/10 21:17:30

	Make the 64 bit to 32 bit sysctl converter work.  I think I may have set
	a new personal best in number of errors per line of code.

Affected files ...

.. //depot/projects/valgrind/coregrind/m_aspacemgr/aspacemgr-freebsd.c#13 edit
.. //depot/projects/valgrind/coregrind/m_ume.c#6 edit

Differences ...

==== //depot/projects/valgrind/coregrind/m_aspacemgr/aspacemgr-freebsd.c#13 (text+ko) ====

@@ -2920,7 +2920,7 @@
 static Char procmap_buf[M_PROCMAP_BUF];
 
 #if defined(VGP_x86_freebsd)
-static Bool is32on64(void)
+static Bool test_is32on64(void)
 {
    Int oid[2];
    vki_size_t len;
@@ -2954,24 +2954,27 @@
 {
    struct vki_kinfo_vmentry_32on64 *kve64, t;
    struct vki_kinfo_vmentry *kve32;
+   Int i;
 
-   aspacem_assert(sizeof(vki_kinfo_vmentry) < sizeof(vki_kinfo_vmentry_32on64));
+   aspacem_assert(sizeof(struct vki_kinfo_vmentry) < sizeof(struct vki_kinfo_vmentry_32on64));
    kve64 = (struct vki_kinfo_vmentry_32on64 *)procmap_buf;
    kve32 = (struct vki_kinfo_vmentry *)procmap_buf;
-   for (i = 0; i < *len / sizeof(vki_kinfo_vmentry_32on64); i++, kve32++, kve64++) {
+   aspacem_assert(sizeof(kve32->kve_path) == sizeof(kve64->kve_path));
+   for (i = 0; i < *len / sizeof(struct vki_kinfo_vmentry_32on64); i++, kve32++, kve64++) {
       t = *kve64;
-      aspacem_assert(t.kve_start < 0x100000000ul);
-      aspacem_assert(t.kve_end < 0x100000000ul);
-      kve32->kve_structsize = t.kve_structsize;
-      kve32->kve_start = t.kve_start;
-      kve32->kve_end = t.kve_end;
+      aspacem_assert(t.kve_start < 0x100000000ull);
+      aspacem_assert(t.kve_end < 0x100000000ull);
+      aspacem_assert(t.kve_structsize == sizeof(struct vki_kinfo_vmentry_32on64));
+      kve32->kve_structsize = sizeof(struct vki_kinfo_vmentry);
+      kve32->kve_start = (void *)(UWord)t.kve_start;
+      kve32->kve_end = (void *)(UWord)t.kve_end;
       kve32->kve_protection = t.kve_protection;
-      kve32->kve_path = t.kve_path;
+      VG_(memcpy)(kve32->kve_path, t.kve_path, sizeof(t.kve_path));
       kve32->kve_offset = t.kve_offset;
       kve32->kve_fsid = t.kve_fsid;
       kve32->kve_fileid = t.kve_fileid;
    }
-   *len = *len * sizeof(vki_kinfo_vmentry) / sizeof(vki_kinfo_vmentry_32on64);
+   *len = *len * sizeof(struct vki_kinfo_vmentry) / sizeof(struct vki_kinfo_vmentry_32on64);
 }
 #endif
 
@@ -3007,7 +3010,7 @@
       ML_(am_exit)(1);
    }
 #if defined(VGP_x86_freebsd)
-   if (is32on64())
+   if (test_is32on64())
       fix_32on64(&len);
 #endif
 

==== //depot/projects/valgrind/coregrind/m_ume.c#6 (text+ko) ====

@@ -402,6 +402,7 @@
 
 //VG_(printf)("interpreter is %s\n", buf);
 #if defined(VGP_x86_freebsd)
+         sres.isError = True;
          /* Hack.  FreeBSD's kernel overloads the interpreter name. */
          if (VG_(strcmp)(buf, "/libexec/ld-elf.so.1") == 0 ||
 	     VG_(strcmp)(buf, "/usr/libexec/ld-elf.so.1") == 0) {


More information about the p4-projects mailing list