SysRes res = VG_(do_syscall2)(__NR_fstat, fd, (UWord)&buf);
#endif
if (!sr_isError(res)) {
- *dev = (ULong)buf.st_dev;
+ /*
+ * This gets compared to the value obtained by sysctl KERN_PROC_VMMAP.
+ * For some reson that only uses 32bits, so truncate this to match
+ */
+ *dev = (UInt)buf.st_dev;
*ino = (ULong)buf.st_ino;
*mode = (UInt) buf.st_mode;
return True;
if (nsegments[i].hasW) seg_prot |= VKI_PROT_WRITE;
if (nsegments[i].hasX) seg_prot |= VKI_PROT_EXEC;
-#if defined(VGO_darwin) || defined(VGO_freebsd)
+#if defined(VGO_darwin)
// GrP fixme kernel info doesn't have dev/inode
cmp_devino = False;
// GrP fixme V and kernel don't agree on offsets
cmp_offsets = False;
+#elif defined(VGO_freebsd)
+ cmp_offsets
+ = nsegments[i].kind == SkFileC || nsegments[i].kind == SkFileV;
+ cmp_offsets &= ignore_offset;
+
+ cmp_devino
+ = nsegments[i].dev != 0 || nsegments[i].ino != 0;
+ cmp_devino &= ignore_offset;
#else
cmp_offsets
= nsegments[i].kind == SkFileC || nsegments[i].kind == SkFileV;