PERFORCE change 127910 for review

John Birrell jb at FreeBSD.org
Sun Oct 21 18:20:39 PDT 2007


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

Change 127910 by jb at jb_freebsd1 on 2007/10/22 01:19:46

	Implement version 2 of kld_file_stat which contains the
	full path name to the module loaded. DTrace needs to get
	to this to read the CTF data. Solaris uses a module
	file system instead. I am not allowed to say that I don't
	like that.

Affected files ...

.. //depot/projects/dtrace6/src/sys/kern/kern_linker.c#2 edit

Differences ...

==== //depot/projects/dtrace6/src/sys/kern/kern_linker.c#2 (text+ko) ====

@@ -492,6 +492,7 @@
 	lf->userrefs = 0;
 	lf->flags = 0;
 	lf->filename = linker_strdup(filename);
+	lf->pathname = linker_strdup(pathname);
 	LINKER_GET_NEXT_FILE_ID(lf->id);
 	lf->ndeps = 0;
 	lf->deps = NULL;
@@ -590,6 +591,10 @@
 		free(file->filename, M_LINKER);
 		file->filename = NULL;
 	}
+	if (file->pathname) {
+		free(file->pathname, M_LINKER);
+		file->pathname = NULL;
+	}
 	kobj_delete((kobj_t) file, M_LINKER);
 out:
 	return (error);
@@ -972,7 +977,7 @@
 {
 	linker_file_t lf;
 	int error = 0;
-	int namelen, version;
+	int namelen, version, version_num;
 	struct kld_file_stat *stat;
 
 #ifdef MAC
@@ -995,10 +1000,16 @@
 	 */
 	if ((error = copyin(&stat->version, &version, sizeof(version))) != 0)
 		goto out;
-	if (version != sizeof(struct kld_file_stat)) {
+	if (version == sizeof(struct kld_file_stat_1))
+		version_num = 1;
+	else if (version == sizeof(struct kld_file_stat))
+		version_num = 2;
+	else {
 		error = EINVAL;
 		goto out;
 	}
+
+	/* Version 1 fields: */
 	namelen = strlen(lf->filename) + 1;
 	if (namelen > MAXPATHLEN)
 		namelen = MAXPATHLEN;
@@ -1013,6 +1024,15 @@
 		goto out;
 	if ((error = copyout(&lf->size, &stat->size, sizeof(size_t))) != 0)
 		goto out;
+	if (version_num > 1) {
+		/* Version 2 fields: */
+		namelen = strlen(lf->pathname) + 1;
+		if (namelen > MAXPATHLEN)
+			namelen = MAXPATHLEN;
+		if ((error = copyout(lf->pathname, &stat->pathname[0],
+		    namelen)) != 0)
+			goto out;
+	}
 
 	td->td_retval[0] = 0;
 out:


More information about the p4-projects mailing list