Date: Tue, 15 Jul 2008 16:18:01 +0300 From: Kostik Belousov <kostikbel@gmail.com> To: Stacey Son <sson@freebsd.org> Cc: Andrew Gallatin <gallatin@cs.duke.edu>, freebsd-arch@freebsd.org Subject: Re: ksyms pseudo driver Message-ID: <20080715131801.GS17123@deviant.kiev.zoral.com.ua> In-Reply-To: <487CA2B4.7070604@freebsd.org> References: <4875A5D2.8030902@freebsd.org> <20080711155232.A96384@grasshopper.cs.duke.edu> <48780661.5050002@freebsd.org> <20080712045837.GD17123@deviant.kiev.zoral.com.ua> <487AD49F.6040304@freebsd.org> <20080715093402.GO17123@deviant.kiev.zoral.com.ua> <487CA2B4.7070604@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--kR01/VAbwQaE53Z3 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Jul 15, 2008 at 08:14:28AM -0500, Stacey Son wrote: > Kostik Belousov wrote: > >>The snapshot of the consolidated symbol table is made when /dev/ksyms is > >>opened. The storage for the snapshot is allocated in the memory map of > >>the calling process. No kernel address space is used for the snapshot. > >> =20 > >Again, why this is done this way ? Why not creating snapshot when the > >user process issues ioctl that supplies neccessary usermode memory > >to the driver ? > > =20 >=20 > The main reason it is written as a pseudo driver is so it can be used=20 > with standard command-line utilities. For example, see the ksyms=20 > example in the dtrace manual=20 > (http://wikis.sun.com/display/DTrace/Structs+and+Unions). I guess it=20 > could still be possible to do in the way you are suggesting but it would= =20 > require a special 'cat', or something, to allocate the user space buffer= =20 > and then pass that in driver before it starts reading the symbol table. = =20 > You could then pipe the output of the "special ksyms cat" to the actual= =20 > command-line program you wanted to use. Of course, if you had to use= =20 > a "special ksyms cat" then there would be no reason to make this a=20 > pseudo driver. You could simply make it a system call and eliminate a= =20 > lot of code and calls into the kernel. Would dd bs=3D<some large value> work as the "special cat" ? procfs' /proc/pid/map has the similar problem, and there was a procmap program in ports. I believe dd is enough. --kR01/VAbwQaE53Z3 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEARECAAYFAkh8o4gACgkQC3+MBN1Mb4gk6wCgudTjZWHagF5Xyr8kkJhDno0l iKAAoLZCuZpw2ZNArz/qAyNzHZeh6Ryg =10Cr -----END PGP SIGNATURE----- --kR01/VAbwQaE53Z3--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080715131801.GS17123>