PERFORCE change 167541 for review
Stanislav Sedov
stas at FreeBSD.org
Thu Aug 20 15:27:03 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=167541
Change 167541 by stas at stas_yandex on 2009/08/20 15:26:15
- Implement resolve_pathname.
Affected files ...
.. //depot/projects/valgrind/coregrind/m_aspacemgr/aspacemgr-common.c#6 edit
.. //depot/projects/valgrind/include/vki/vki-freebsd.h#16 edit
Differences ...
==== //depot/projects/valgrind/coregrind/m_aspacemgr/aspacemgr-common.c#6 (text+ko) ====
@@ -332,6 +332,11 @@
return False;
}
+#if defined(VGO_freebsd)
+#define M_FILEDESC_BUF 1000000
+static Char filedesc_buf[M_FILEDESC_BUF];
+#endif
+
Bool ML_(am_resolve_filename) ( Int fd, /*OUT*/HChar* buf, Int nbuf )
{
#if defined(VGO_linux)
@@ -345,9 +350,38 @@
return False;
#elif defined(VGO_freebsd)
- I_die_here; /* maybe just return False? */
- return False;
+ Int mib[4];
+ SysRes sres;
+ vki_size_t len;
+ Int cnt;
+ Char *bp, *eb;
+ struct vki_kinfo_file *kf;
+ mib[0] = VKI_CTL_KERN;
+ mib[1] = VKI_KERN_PROC;
+ mib[2] = VKI_KERN_PROC_FILEDESC;
+ mib[3] = sr_Res(VG_(do_syscall0)(__NR_getpid));
+ len = sizeof(filedesc_buf);
+ sres = VG_(do_syscall6)(__NR___sysctl, (UWord)mib, 4, (UWord)filedesc_buf,
+ (UWord)&len, 0, 0);
+ if (sr_isError(sres)) {
+ VG_(debugLog)(0, "sysctl(kern.proc.filedesc)", "%s\n", VG_(strerror)(sr_Err(sres)));
+ ML_(am_exit)(1);
+ }
+ /* Walk though the list. */
+ bp = filedesc_buf;
+ eb = filedesc_buf + len;
+ while (bp < eb) {
+ kf = (struct vki_kinfo_file *)bp;
+ if (kf->kf_fd == fd)
+ break;
+ bp += kf->kf_structsize;
+ }
+ if (bp >= eb || *kf->kf_path == '\0')
+ return False;
+ VG_(strncpy)( buf, kf->kf_path, nbuf );
+ VG_(debugLog)(0, "aspacem", "Valgrind: found %s for %d\n", kf->kf_path, fd);
+ return True;
#elif defined(VGO_aix5)
I_die_here; /* maybe just return False? */
return False;
==== //depot/projects/valgrind/include/vki/vki-freebsd.h#16 (text+ko) ====
@@ -1897,6 +1897,25 @@
int kve_ispare[3];
};
+struct vki_kinfo_file {
+ int kf_structsize; /* Variable size of record. */
+ int kf_type; /* Descriptor type. */
+ int kf_fd; /* Array index. */
+ int kf_ref_count; /* Reference count. */
+ int kf_flags; /* Flags. */
+ int _kf_pad0; /* Round to 64 bit alignment */
+ Off64T kf_offset; /* Seek location. */
+ int kf_vnode_type; /* Vnode type. */
+ int kf_sock_domain; /* Socket domain. */
+ int kf_sock_type; /* Socket type. */
+ int kf_sock_protocol; /* Socket protocol. */
+ char kf_sa_local[128]; /* Socket address. */
+ char kf_sa_peer[128]; /* Peer address. */
+ int _kf_ispare[16]; /* Space for more stuff. */
+ /* Truncated before copyout in sysctl */
+ char kf_path[VKI_PATH_MAX]; /* Path to file, if any. */
+};
+
#if defined(VGP_x86_freebsd)
/* Special case.. adapt to what the 64 bit kernel gives us */
struct vki_kinfo_vmentry_32on64 {
@@ -1927,6 +1946,7 @@
#define VKI_CTL_HW 6
#define VKI_KERN_PROC 14
#define VKI_KERN_PROC_VMMAP 13
+#define VKI_KERN_PROC_FILEDESC 33
#define VKI_HW_MACHINE 1
//----------------------------------------------------------------------
More information about the p4-projects
mailing list