Compare commits
	
		
			271 Commits
		
	
	
		
			libgtop-GN
			...
			LIBGTOP_1_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					ebbeb1a058 | ||
| 
						 | 
					afeb4d50a5 | ||
| 
						 | 
					7fb4f43469 | ||
| 
						 | 
					ca0cdbae5a | ||
| 
						 | 
					879b173ae4 | ||
| 
						 | 
					58b341ceec | ||
| 
						 | 
					98981183d8 | ||
| 
						 | 
					2747d6bd2a | ||
| 
						 | 
					e76df47af0 | ||
| 
						 | 
					04fbf58c18 | ||
| 
						 | 
					10dcb079f7 | ||
| 
						 | 
					8da7856780 | ||
| 
						 | 
					78a6bcd553 | ||
| 
						 | 
					66dd76be8f | ||
| 
						 | 
					2174194bbd | ||
| 
						 | 
					d58d11fa29 | ||
| 
						 | 
					20bc40ac18 | ||
| 
						 | 
					7881e4212f | ||
| 
						 | 
					aaca4e7cd6 | ||
| 
						 | 
					3250583253 | ||
| 
						 | 
					be4c952542 | ||
| 
						 | 
					5656ad7f6c | ||
| 
						 | 
					ed3ab3d31d | ||
| 
						 | 
					7c0f91b7f5 | ||
| 
						 | 
					8619b3a79b | ||
| 
						 | 
					f71e60619d | ||
| 
						 | 
					3274a72cda | ||
| 
						 | 
					c285171500 | ||
| 
						 | 
					16156b8e27 | ||
| 
						 | 
					56f34dd385 | ||
| 
						 | 
					4d910a33fc | ||
| 
						 | 
					e0ec7f5c67 | ||
| 
						 | 
					886896137c | ||
| 
						 | 
					e0a91cb479 | ||
| 
						 | 
					bc51f8c734 | ||
| 
						 | 
					a396e42fa8 | ||
| 
						 | 
					009c491b9b | ||
| 
						 | 
					9667d88e60 | ||
| 
						 | 
					de68843eda | ||
| 
						 | 
					cb52909ded | ||
| 
						 | 
					52c9bb06c7 | ||
| 
						 | 
					2957ec5b57 | ||
| 
						 | 
					f384aae3a4 | ||
| 
						 | 
					3a3899fda1 | ||
| 
						 | 
					9cba48fbc9 | ||
| 
						 | 
					86fbcede24 | ||
| 
						 | 
					6e7ba4a9ca | ||
| 
						 | 
					8f02d15fb9 | ||
| 
						 | 
					cecae08c13 | ||
| 
						 | 
					9152479981 | ||
| 
						 | 
					2814206ffa | ||
| 
						 | 
					a5c839da3a | ||
| 
						 | 
					e3c3db72e2 | ||
| 
						 | 
					1318d89456 | ||
| 
						 | 
					68f97794bd | ||
| 
						 | 
					9bd351abae | ||
| 
						 | 
					60a6d0876e | ||
| 
						 | 
					6b11b4b581 | ||
| 
						 | 
					58cfb44e52 | ||
| 
						 | 
					df3fb1c6fa | ||
| 
						 | 
					71bda8b99d | ||
| 
						 | 
					331e128116 | ||
| 
						 | 
					69de36e70f | ||
| 
						 | 
					b9cbea40e7 | ||
| 
						 | 
					7654d547d7 | ||
| 
						 | 
					995e9ffd47 | ||
| 
						 | 
					11e6109a4a | ||
| 
						 | 
					9e79025aef | ||
| 
						 | 
					c1ea6cd689 | ||
| 
						 | 
					4322ef4b37 | ||
| 
						 | 
					e56d9e3fb0 | ||
| 
						 | 
					833170d18c | ||
| 
						 | 
					9ef8c5739b | ||
| 
						 | 
					b8cdd9e090 | ||
| 
						 | 
					cad4a8da0d | ||
| 
						 | 
					432adade05 | ||
| 
						 | 
					e9baa3543e | ||
| 
						 | 
					d5c8af57f3 | ||
| 
						 | 
					deeadb6648 | ||
| 
						 | 
					f8f0ee6882 | ||
| 
						 | 
					76be244662 | ||
| 
						 | 
					d97a151695 | ||
| 
						 | 
					c9dfc76155 | ||
| 
						 | 
					506023c898 | ||
| 
						 | 
					0e9245ba28 | ||
| 
						 | 
					091811a4d6 | ||
| 
						 | 
					18f4bccb37 | ||
| 
						 | 
					37af4964cc | ||
| 
						 | 
					f248d99d7a | ||
| 
						 | 
					ca80d88a74 | ||
| 
						 | 
					56765d966f | ||
| 
						 | 
					d169afcafa | ||
| 
						 | 
					1f4b738639 | ||
| 
						 | 
					981668a56b | ||
| 
						 | 
					b55257d0d3 | ||
| 
						 | 
					ae6f746cf2 | ||
| 
						 | 
					68e7b7a1d4 | ||
| 
						 | 
					7b7071cf6d | ||
| 
						 | 
					b1e908e6b6 | ||
| 
						 | 
					f91050a7c7 | ||
| 
						 | 
					e3f9aa526b | ||
| 
						 | 
					7db0c756d6 | ||
| 
						 | 
					c1bd844673 | ||
| 
						 | 
					914354adb2 | ||
| 
						 | 
					2ac4fb92c2 | ||
| 
						 | 
					0c1dd954eb | ||
| 
						 | 
					116767b8b8 | ||
| 
						 | 
					3eb5394474 | ||
| 
						 | 
					953f59195f | ||
| 
						 | 
					309f3998d7 | ||
| 
						 | 
					887c4013a0 | ||
| 
						 | 
					f232ddcdcb | ||
| 
						 | 
					bd0424ee7d | ||
| 
						 | 
					62824e1537 | ||
| 
						 | 
					36e7d3133b | ||
| 
						 | 
					20c69951ab | ||
| 
						 | 
					d9d8cdf043 | ||
| 
						 | 
					29fba02b4a | ||
| 
						 | 
					1954718e3f | ||
| 
						 | 
					6712cae260 | ||
| 
						 | 
					6ddf213d5d | ||
| 
						 | 
					b700a17efa | ||
| 
						 | 
					bedec591a2 | ||
| 
						 | 
					2c4568119c | ||
| 
						 | 
					efd8e2f343 | ||
| 
						 | 
					f29793c868 | ||
| 
						 | 
					e8bbb15f7e | ||
| 
						 | 
					fdb2e5eb7b | ||
| 
						 | 
					da58e7edb4 | ||
| 
						 | 
					e81b8ba479 | ||
| 
						 | 
					cfbe553724 | ||
| 
						 | 
					17634e05d4 | ||
| 
						 | 
					7d216d364e | ||
| 
						 | 
					9e16f6e88c | ||
| 
						 | 
					f23e8b3d1c | ||
| 
						 | 
					04d988357f | ||
| 
						 | 
					14ed950dad | ||
| 
						 | 
					f107c34f82 | ||
| 
						 | 
					9b5bfd33ef | ||
| 
						 | 
					8fc6c79b6d | ||
| 
						 | 
					2d838b9f09 | ||
| 
						 | 
					c1649507e9 | ||
| 
						 | 
					a246a6390f | ||
| 
						 | 
					6a9317238a | ||
| 
						 | 
					0a45542477 | ||
| 
						 | 
					03be66c857 | ||
| 
						 | 
					777c371be9 | ||
| 
						 | 
					d8bb202fbd | ||
| 
						 | 
					f0f9167682 | ||
| 
						 | 
					6fbde2ea22 | ||
| 
						 | 
					2378f459de | ||
| 
						 | 
					1b4ae67f51 | ||
| 
						 | 
					ec67c56cc7 | ||
| 
						 | 
					393c1dba75 | ||
| 
						 | 
					5b76314ef4 | ||
| 
						 | 
					0ca2053a27 | ||
| 
						 | 
					c2c209d19a | ||
| 
						 | 
					de5137ff28 | ||
| 
						 | 
					ffb4b0fade | ||
| 
						 | 
					bfd03680cc | ||
| 
						 | 
					82280b673e | ||
| 
						 | 
					27dbd28c5c | ||
| 
						 | 
					4d55985151 | ||
| 
						 | 
					2635e545bf | ||
| 
						 | 
					e8a3a40691 | ||
| 
						 | 
					3a7d7778a0 | ||
| 
						 | 
					437c7585cc | ||
| 
						 | 
					507766bff6 | ||
| 
						 | 
					74d11991ab | ||
| 
						 | 
					217a1e92c6 | ||
| 
						 | 
					83bc7b831d | ||
| 
						 | 
					1071b2ee69 | ||
| 
						 | 
					3753ac5ee6 | ||
| 
						 | 
					6120c5e4a8 | ||
| 
						 | 
					b252a80b7e | ||
| 
						 | 
					d67182f411 | ||
| 
						 | 
					fec8f23ad4 | ||
| 
						 | 
					ab7f1cc3be | ||
| 
						 | 
					3f65468299 | ||
| 
						 | 
					333d0c5709 | ||
| 
						 | 
					8c47939ad2 | ||
| 
						 | 
					664d24f258 | ||
| 
						 | 
					f8adb23062 | ||
| 
						 | 
					a2a4b1d170 | ||
| 
						 | 
					aa6f26f9fb | ||
| 
						 | 
					fd2ddf8b50 | ||
| 
						 | 
					0408c86065 | ||
| 
						 | 
					e1555fc335 | ||
| 
						 | 
					75141bdb65 | ||
| 
						 | 
					3951c8863f | ||
| 
						 | 
					bdc1579a9c | ||
| 
						 | 
					8e1c6601af | ||
| 
						 | 
					1c634bd736 | ||
| 
						 | 
					2868191440 | ||
| 
						 | 
					a567adcce5 | ||
| 
						 | 
					5db1ee8fc4 | ||
| 
						 | 
					a6729d9454 | ||
| 
						 | 
					57f7039795 | ||
| 
						 | 
					5c3775c6ee | ||
| 
						 | 
					1cec9b70a2 | ||
| 
						 | 
					eca34c37d9 | ||
| 
						 | 
					58acfc4042 | ||
| 
						 | 
					feab865203 | ||
| 
						 | 
					754f09cdad | ||
| 
						 | 
					fac354623b | ||
| 
						 | 
					5967e6c3e4 | ||
| 
						 | 
					174f316a62 | ||
| 
						 | 
					c9651a012e | ||
| 
						 | 
					3130d7db33 | ||
| 
						 | 
					30af079f99 | ||
| 
						 | 
					3ccae8efee | ||
| 
						 | 
					5b946cb261 | ||
| 
						 | 
					885045ca55 | ||
| 
						 | 
					01d728ac6b | ||
| 
						 | 
					f9e670f464 | ||
| 
						 | 
					868e1677e3 | ||
| 
						 | 
					84407de2aa | ||
| 
						 | 
					7011b04cb2 | ||
| 
						 | 
					ede4594dd9 | ||
| 
						 | 
					3a7f02352a | ||
| 
						 | 
					e2cb4ed031 | ||
| 
						 | 
					24a1fe55bb | ||
| 
						 | 
					66dddd9799 | ||
| 
						 | 
					b3b2411cb7 | ||
| 
						 | 
					eb71d82ecc | ||
| 
						 | 
					298fc043ff | ||
| 
						 | 
					63f678210a | ||
| 
						 | 
					7a38246284 | ||
| 
						 | 
					5390903a22 | ||
| 
						 | 
					4b9e977fdc | ||
| 
						 | 
					6a9a681559 | ||
| 
						 | 
					a6e919767c | ||
| 
						 | 
					290e9ac767 | ||
| 
						 | 
					cd8ac36e9b | ||
| 
						 | 
					3068969b51 | ||
| 
						 | 
					e947e72169 | ||
| 
						 | 
					86a53dbfc9 | ||
| 
						 | 
					aa5c5c4553 | ||
| 
						 | 
					1f93237ee3 | ||
| 
						 | 
					3d248e9ad2 | ||
| 
						 | 
					ec9aedea0b | ||
| 
						 | 
					33021311b2 | ||
| 
						 | 
					2a3d9e080a | ||
| 
						 | 
					b528d0b1db | ||
| 
						 | 
					a429e9c3f9 | ||
| 
						 | 
					b90d2c1c90 | ||
| 
						 | 
					27dc7ef79a | ||
| 
						 | 
					76441b1d5f | ||
| 
						 | 
					d2e3577784 | ||
| 
						 | 
					4a0344182f | ||
| 
						 | 
					ddc496cdaa | ||
| 
						 | 
					746981611b | ||
| 
						 | 
					c1beefce3a | ||
| 
						 | 
					1667cc8a8d | ||
| 
						 | 
					0aea46a643 | ||
| 
						 | 
					820ab2210e | ||
| 
						 | 
					f40e8a57b4 | ||
| 
						 | 
					005357e821 | ||
| 
						 | 
					5fcfc95280 | ||
| 
						 | 
					dfc9e912b5 | ||
| 
						 | 
					a6385288aa | ||
| 
						 | 
					2f6457b3f7 | ||
| 
						 | 
					ba2f0f753b | ||
| 
						 | 
					38554dbcbe | ||
| 
						 | 
					fe98fde338 | ||
| 
						 | 
					c3ea69f26a | ||
| 
						 | 
					367e1f047c | ||
| 
						 | 
					7db1ed695c | ||
| 
						 | 
					26b4615262 | ||
| 
						 | 
					c4ccf53aad | ||
| 
						 | 
					8fe9163e6b | 
@@ -21,6 +21,7 @@ ltconfig
 | 
			
		||||
ltmain.sh
 | 
			
		||||
macros
 | 
			
		||||
stamp-h
 | 
			
		||||
stamp-h.in
 | 
			
		||||
sun4
 | 
			
		||||
sun4sol2
 | 
			
		||||
support
 | 
			
		||||
@@ -32,3 +33,10 @@ ABOUT-NLS
 | 
			
		||||
libgtop.spec
 | 
			
		||||
libgtop-0.99.*.tar.gz
 | 
			
		||||
libgtop-0.99.*
 | 
			
		||||
install-sh
 | 
			
		||||
mkinstalldirs
 | 
			
		||||
missing
 | 
			
		||||
INSTALL
 | 
			
		||||
COPYING
 | 
			
		||||
glibtop-config.h
 | 
			
		||||
stamp-gc-h
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								AUTHORS
									
									
									
									
									
								
							@@ -1,2 +1,2 @@
 | 
			
		||||
Martin Baulig (martin@home-of-linux.org)
 | 
			
		||||
Josh Sled <jsled@scam.XCF.Berkeley.EDU>
 | 
			
		||||
Drazen Kacar (dave@srce.hr)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										263
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										263
									
								
								ChangeLog
									
									
									
									
									
								
							@@ -1,3 +1,266 @@
 | 
			
		||||
1999-10-19  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Released LibGTop 1.1.2 "Hardangervidda".
 | 
			
		||||
 | 
			
		||||
1999-10-18  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* RELNOTES-1.1.x: New file. We also track all changes since
 | 
			
		||||
	1.0.x here.
 | 
			
		||||
 | 
			
		||||
	* NEWS: We start maintaining a NEWS file now :)
 | 
			
		||||
 | 
			
		||||
	* NEWS.old: Removed obsolete file.
 | 
			
		||||
 | 
			
		||||
	* TODO: Nuked it. We may need this file later ...
 | 
			
		||||
 | 
			
		||||
1999-10-17  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in (DL_LIB): Check for dlopen() and AC_SUBST this.
 | 
			
		||||
 | 
			
		||||
1999-10-17  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in: Fixed typedef syntax for glibtop-config.h.
 | 
			
		||||
	Thanks to Drazen Kacar for pointing this out.
 | 
			
		||||
 | 
			
		||||
1999-10-16  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* LIBGTOP-VERSION: Set version number to 1.1.2, binary age 2,
 | 
			
		||||
	interface age 2.
 | 
			
		||||
 | 
			
		||||
1999-09-29  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in (libgtop_top_builddir): AC_SUBST this.
 | 
			
		||||
 | 
			
		||||
1999-09-27  Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br>
 | 
			
		||||
 | 
			
		||||
	* configure.in: Added "pt_BR" to ALL_LINGUAS.
 | 
			
		||||
	
 | 
			
		||||
1999-09-22  Kjartan Maraas  <kmaraas@online.no>
 | 
			
		||||
 | 
			
		||||
	* configure.in: Added "da" to ALL_LINGUAS.
 | 
			
		||||
	
 | 
			
		||||
1999-09-19  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* libgtopConf.sh.in: Added MODULE_VERSION on Miguel's
 | 
			
		||||
	request (set it to "libgtop-@LIBGTOP_VERSION@").
 | 
			
		||||
 | 
			
		||||
1999-09-18  Pablo Saratxaga <pablo@mandrakesoft.com>
 | 
			
		||||
 | 
			
		||||
	* configure.in, po/pl.po: copied pl.po from stable CVS tree
 | 
			
		||||
 | 
			
		||||
1999-09-17  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in: Make it work if we have GNOME and the user
 | 
			
		||||
	gave use --without-gnome (fixes bug #1735).
 | 
			
		||||
 | 
			
		||||
1999-07-29  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* include/glibtop/error.h: Use G_GNUC_UNUSED.
 | 
			
		||||
 | 
			
		||||
	* configure.in (ENABLE_STATIC, ENABLE_SHARED): New automake
 | 
			
		||||
	conditionals.
 | 
			
		||||
 | 
			
		||||
1999-07-27  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in (LT_VERSION_INFO): Add `-release ${LT_RELEASE}'.
 | 
			
		||||
	This way you can have both 1.0.x and 1.1.x libraries under the
 | 
			
		||||
	same ${prefix}.
 | 
			
		||||
 | 
			
		||||
1999-07-27  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* LIBGTOP-VERSION: Set version number to 1.1.1 binary age 1,
 | 
			
		||||
	interface age 1.
 | 
			
		||||
 | 
			
		||||
1999-07-11  Tomas Ogren  <stric@ing.umu.se>
 | 
			
		||||
 | 
			
		||||
	* configure.in: Added sv to ALL_LINGUAS
 | 
			
		||||
 | 
			
		||||
1999-07-11  Tomas Ogren  <stric@ing.umu.se>
 | 
			
		||||
 | 
			
		||||
	* sysdeps/names/procmem.c: Fixed a tyop
 | 
			
		||||
 | 
			
		||||
1999-06-22  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in: Some versions of Solaris require -lelf for -lkvm;
 | 
			
		||||
	added appropriate check for this situation.
 | 
			
		||||
 | 
			
		||||
1999-05-28  Martin Baulig  <baulig@Stud.Informatik.Uni-Trier.DE>
 | 
			
		||||
 | 
			
		||||
	* include/glibtop/sysdeps.h: Remove the `GLIBTOP_SYSDEPS_FEATURES'
 | 
			
		||||
	and `GLIBTOP_SYSDEPS_POINTER_SIZE' constants and let numbering
 | 
			
		||||
	start at zero for `GLIBTOP_SYSDEPS_CPU'.
 | 
			
		||||
 | 
			
		||||
1999-05-28  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* glibtop.h (GLIBTOP_MOUNTENTRY_LEN): Move this
 | 
			
		||||
	* include/glibtop/limits.h: here.
 | 
			
		||||
 | 
			
		||||
1999-05-26  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in (INCLUDES): Define `LIBGTOP_VERSION_CODE' here so we
 | 
			
		||||
	can use version conditionals in the sysdeps code.
 | 
			
		||||
 | 
			
		||||
1999-05-25  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* libgtop-sysdeps.m4: Make the I4B check work for NetBSD.
 | 
			
		||||
 | 
			
		||||
1999-05-15  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* libgtop-sysdeps.m4: Remove the `--enable-hacker-mode' requirement
 | 
			
		||||
	for the BSDI, Solaris and Digital Unix ports.
 | 
			
		||||
 | 
			
		||||
1999-05-13  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* libgtop-sysdeps.m4 (GLIBTOP_SOLARIS_RELEASE): Define this on Solaris;
 | 
			
		||||
	we use version codes like 270 for SunOS 5.7 and 251 for SunOS 2.5.1.
 | 
			
		||||
 | 
			
		||||
1999-05-12  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* glibtop-config.h: This is a new generated file which will be
 | 
			
		||||
	included from <glibtop.h>. We define things like `u_int64_t' and
 | 
			
		||||
	LIBGTOP_*_VERSION here so we can compile LibGTop applications with
 | 
			
		||||
	`libgtop-config --cflags`.
 | 
			
		||||
 | 
			
		||||
	* configure.in: Create glibtop-config.h.
 | 
			
		||||
	(GLIBTOP_*_INCS): Added `-I $(pkglibdir)/include'.
 | 
			
		||||
 | 
			
		||||
	* libgtop-config.h.in: Added `--cflags', `--libs' and `--extra-libs'
 | 
			
		||||
	parameter so you can now use LibGTop even in no-autoconf apps.
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Install `glibtop-config.h' in `$(pkglibdir)/include'.
 | 
			
		||||
 | 
			
		||||
1999-05-09  Drazen Kacar  <dave@srce.hr>
 | 
			
		||||
 | 
			
		||||
	* configure.in, acconfig.h: Added checks for <procfs.h>
 | 
			
		||||
	and <sys/procfs.h>
 | 
			
		||||
 | 
			
		||||
1999-05-09  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* doc: One should ship the documentation of a package together with
 | 
			
		||||
	the tarball, so I added this back.
 | 
			
		||||
 | 
			
		||||
1999-05-08  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* include/glibtop/limits.h (GLIBTOP_MAX_GROUPS): Define this here.
 | 
			
		||||
	* include/glibtop/procuid.h (GLIBTOP_MAX_GROUPS): Moved to limits.h.
 | 
			
		||||
 | 
			
		||||
	* features.def: We can use constants from <glibtop/limits.h> here.
 | 
			
		||||
 | 
			
		||||
1999-05-08  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* libgtop-sysdeps.m4: Use the setgid sys server for Solaris.
 | 
			
		||||
 | 
			
		||||
1999-05-06  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* include/glibtop/sysdeps.h (glibtop_sysdeps): Added `pointer_size'
 | 
			
		||||
	which is the number of bits of a `void *'.
 | 
			
		||||
 | 
			
		||||
1999-05-03  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Set version number to 1.1.0. Also made a `LIBGTOP_STABLE_1_0'
 | 
			
		||||
	branch in CVS while development will go on here in the HEAD.
 | 
			
		||||
 | 
			
		||||
	* LIBGTOP-VERSION: Set version number to 1.1.0 binary age 0,
 | 
			
		||||
	interface age 0. Set LIBGTOP_SERVER_VERSION to 50.
 | 
			
		||||
 | 
			
		||||
1999-04-18  Tuomas J. Lukka <lukka@iki.fi>
 | 
			
		||||
 | 
			
		||||
	* Add missing comma in sysdeps/names/proctime.c
 | 
			
		||||
 | 
			
		||||
1999-04-18  Tuomas J. Lukka <lukka@iki.fi>
 | 
			
		||||
 | 
			
		||||
	* Add missing comma in sysdeps/names/cpu.c
 | 
			
		||||
 | 
			
		||||
1999-04-18  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Thanks to Drazen Kacar for pointing out that not all processors must
 | 
			
		||||
	be running all the time under Solaris, so we need to have some flag
 | 
			
		||||
	to find out which processors are running.
 | 
			
		||||
 | 
			
		||||
	* (glibtop_cpu): Added `xcpu_flags' bitmask of running processors.
 | 
			
		||||
	* (glibtop_proc_time): Added `xcpu_flags'.
 | 
			
		||||
 | 
			
		||||
1999-04-18  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* include/glibtop/limits.h: New file.
 | 
			
		||||
	(GLIBTOP_NCPU): Define this here and increase it to 64.
 | 
			
		||||
 | 
			
		||||
1999-03-30  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Added some new features.
 | 
			
		||||
 | 
			
		||||
	* (glibtop_uptime): Added `boot_time', boot time in seconds
 | 
			
		||||
	since the epoch.
 | 
			
		||||
	
 | 
			
		||||
	* (glibtop_proc_state): Changed `state' from char to unsigned.
 | 
			
		||||
	`uid' and `gid' are effective uid and gid; added comment.
 | 
			
		||||
	Added `ruid' and `rgid' for guaranteed-to-be-correct real uid/gid.
 | 
			
		||||
	For SMP systems: added `has_cpu', `processor' and `last_processor'.
 | 
			
		||||
 | 
			
		||||
	* (glibtop_proc_uid): Added suid, sgid, fsuid, fsgid, ngroups, groups.
 | 
			
		||||
 | 
			
		||||
	* (glibtop_proc_segment): Added start_data, end_data, start_brk,
 | 
			
		||||
	end_brk, start_mmap, arg_start, arg_end, env_start, env_end.
 | 
			
		||||
 | 
			
		||||
	* include/glibtop/procstate.h: Define some constants for the `state'
 | 
			
		||||
	field of glibtop_proc_state.
 | 
			
		||||
 | 
			
		||||
	* include/glibtop/prockernel.h: Define some constants for the
 | 
			
		||||
	`k_flags' field of glibtop_proc_kernel.
 | 
			
		||||
	
 | 
			
		||||
1999-03-24  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in: Check for getloadavg () and swapctl () for
 | 
			
		||||
	Solaris.
 | 
			
		||||
 | 
			
		||||
1999-03-23  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* glibtop.h (glibtop): Added `wanted'. Applications can set the
 | 
			
		||||
	features they are interested in here. This way we don't waste CPU
 | 
			
		||||
	getting expensive data that aren't really needed.
 | 
			
		||||
 | 
			
		||||
	* LIBGTOP-VERSION: This breaks backward compatibility and also
 | 
			
		||||
	added new functions; set binary	age and interface age to 0.
 | 
			
		||||
 | 
			
		||||
1999-03-21  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Added a new sysctl () interface to the Linux Kernel.
 | 
			
		||||
	
 | 
			
		||||
	* kernel/sysctl: Imported.
 | 
			
		||||
	
 | 
			
		||||
	* libgtop-sysdeps.m4: If `--enable-hacker-mode' is given, check
 | 
			
		||||
	for my new sysctl () interface.
 | 
			
		||||
 | 
			
		||||
1999-03-20  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Removed all traces of my old table () Linux kernel hack.
 | 
			
		||||
 | 
			
		||||
	* kernel: Removed.
 | 
			
		||||
	* sysdeps/kernel: Removed.
 | 
			
		||||
	* libgtop-sysdeps.m4: Don't check for table (); it does not
 | 
			
		||||
	exist any longer.
 | 
			
		||||
 | 
			
		||||
1999-03-19  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	This is *untested* - please read "sysdeps/freebsd/ChangeLog" !
 | 
			
		||||
 | 
			
		||||
	* libgtop-sysdeps.m4: Use the `freebsd' sysdeps directory for
 | 
			
		||||
	BSDI as well if the `--enable-hacker-mode' parameter was given.
 | 
			
		||||
 | 
			
		||||
1999-03-18  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* LIBGTOP-VERSION: Set version number to 1.0.2 binary age 1,
 | 
			
		||||
	intergace age 1.
 | 
			
		||||
 | 
			
		||||
1999-03-17  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Imported first version of my Solaris port.
 | 
			
		||||
 | 
			
		||||
	* configure.in: Check for `kstat_open' in `-lkstat'.
 | 
			
		||||
 | 
			
		||||
	* libgtop-sysdeps.m4: Recognize the `solaris' sysdeps directory
 | 
			
		||||
	when the `--enable-hacker-mode' parameter was given.
 | 
			
		||||
 | 
			
		||||
1999-03-01  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Released LibGTop 1.0.1.
 | 
			
		||||
 
 | 
			
		||||
@@ -7,14 +7,14 @@
 | 
			
		||||
# set LIBGTOP_BINARY_AGE and LIBGTOP_INTERFACE_AGE to 0.
 | 
			
		||||
#
 | 
			
		||||
LIBGTOP_MAJOR_VERSION=1
 | 
			
		||||
LIBGTOP_MINOR_VERSION=0
 | 
			
		||||
LIBGTOP_MICRO_VERSION=1
 | 
			
		||||
LIBGTOP_MINOR_VERSION=1
 | 
			
		||||
LIBGTOP_MICRO_VERSION=2
 | 
			
		||||
 | 
			
		||||
LIBGTOP_INTERFACE_AGE=0
 | 
			
		||||
LIBGTOP_BINARY_AGE=0
 | 
			
		||||
LIBGTOP_INTERFACE_AGE=2
 | 
			
		||||
LIBGTOP_BINARY_AGE=2
 | 
			
		||||
 | 
			
		||||
# Increase each time you change the client/server protocol.
 | 
			
		||||
LIBGTOP_SERVER_VERSION=5
 | 
			
		||||
LIBGTOP_SERVER_VERSION=50
 | 
			
		||||
 | 
			
		||||
# Don't change this
 | 
			
		||||
LIBGTOP_VERSION=$LIBGTOP_MAJOR_VERSION.$LIBGTOP_MINOR_VERSION.$LIBGTOP_MICRO_VERSION
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								MAINTAINERS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								MAINTAINERS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
Email: martin@home-of-linux.org
 | 
			
		||||
Email: dave@srce.hr
 | 
			
		||||
							
								
								
									
										20
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								Makefile.am
									
									
									
									
									
								
							@@ -11,15 +11,27 @@ support = support
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
SUBDIRS = po intl $(support) macros misc include sysdeps lib src \
 | 
			
		||||
	  $(examples_SUBDIRS)
 | 
			
		||||
	  $(examples_SUBDIRS) doc
 | 
			
		||||
 | 
			
		||||
include_HEADERS = glibtop.h
 | 
			
		||||
configincludedir = $(pkglibdir)/include
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = autogen.sh libgtop.spec.in copyright.txt libgtopConf.sh.in \
 | 
			
		||||
	LIBGTOP-VERSION features.def libgtop-config.in RELNOTES-0.25 \
 | 
			
		||||
	RELNOTES-1.0 libgtop-sysdeps.m4 README NEWS.old libgtop-mirror.sh
 | 
			
		||||
	RELNOTES-1.0 RELNOTES-1.1.x libgtop-sysdeps.m4 README \
 | 
			
		||||
	libgtop-mirror.sh
 | 
			
		||||
 | 
			
		||||
dist-hook:
 | 
			
		||||
configinclude_DATA = \
 | 
			
		||||
	glibtop-config.h
 | 
			
		||||
 | 
			
		||||
BUILT_SOURCES = stamp-gc-h #note: not glibtop-config.h
 | 
			
		||||
glibtop-config.h: stamp-gc-h
 | 
			
		||||
	@:
 | 
			
		||||
stamp-gc-h: config.status
 | 
			
		||||
	CONFIG_FILES= CONFIG_HEADERS= CONFIG_OTHER=glibtop-config.h ./config.status
 | 
			
		||||
	echo timestamp > stamp-gc-h
 | 
			
		||||
 | 
			
		||||
dist-hook: libgtop.spec
 | 
			
		||||
	cp libgtop.spec $(distdir)
 | 
			
		||||
 | 
			
		||||
release:
 | 
			
		||||
@@ -31,6 +43,8 @@ confexecdir	= $(libdir)
 | 
			
		||||
confexec_DATA	= $(top_builddir)/libgtopConf.sh \
 | 
			
		||||
		  $(top_builddir)/libgtop-features.def
 | 
			
		||||
 | 
			
		||||
CLEANFILES=libgtopConf.sh
 | 
			
		||||
 | 
			
		||||
bin_SCRIPTS = $(top_builddir)/libgtop-config
 | 
			
		||||
 | 
			
		||||
## to automatically rebuild aclocal.m4 if any of the macros in
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								NEWS
									
									
									
									
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
October 19, 1999:
 | 
			
		||||
================
 | 
			
		||||
 | 
			
		||||
* Released LibGTop 1.1.2 "Hardangervidda"
 | 
			
		||||
 | 
			
		||||
  This is a stable release from the development branch
 | 
			
		||||
  of LibGTop for Solaris users of October GNOME.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										244
									
								
								NEWS.old
									
									
									
									
									
								
							
							
						
						
									
										244
									
								
								NEWS.old
									
									
									
									
									
								
							@@ -1,244 +0,0 @@
 | 
			
		||||
$Id$
 | 
			
		||||
 | 
			
		||||
Jun/01/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
	* We have some new ``suffix rules'':
 | 
			
		||||
 | 
			
		||||
	  '__l' is a function defined in the client part;
 | 
			
		||||
	  '__s' is a function defined in the sysdeps part and
 | 
			
		||||
	  '__p' is a function that needs special priviledges.
 | 
			
		||||
	  '__r' is mapped either on '__p' or on '__s'.
 | 
			
		||||
	  the function without suffix is mapped on '__l'.
 | 
			
		||||
 | 
			
		||||
	* We now decide at runtime whether or not using the server
 | 
			
		||||
	is required for a particular function. All user programs
 | 
			
		||||
	now call the '__l' function defined in '-lgtop' (in the lib
 | 
			
		||||
	subdir). These functions either use 'glibtop_call__l' to
 | 
			
		||||
	call the server or call the '__r' function.
 | 
			
		||||
 | 
			
		||||
	* A function in the sysdeps directory now has the '__s' suffix
 | 
			
		||||
	if it do not need any priviledges (and thus can be called directly
 | 
			
		||||
	from client code) and the '__p' suffix otherwise (when it has to
 | 
			
		||||
	be called from the server).
 | 
			
		||||
 | 
			
		||||
	* If you call one of these functions:
 | 
			
		||||
 | 
			
		||||
	  -> use the '__p' suffix to be sure to get the SUID-safe one
 | 
			
		||||
	     (used in the server).
 | 
			
		||||
	  -> use the '__s' suffix to be sure to get a function that
 | 
			
		||||
	     doesn't need any priviledges.
 | 
			
		||||
	  -> use the '__r' suffix otherwise (it is mapped either on the
 | 
			
		||||
	     '__p' or on the '__s' one).
 | 
			
		||||
 | 
			
		||||
	Only use the '__p' and '__s' functions in a 'GLIBTOP_SUID_<feature>'
 | 
			
		||||
	conditional, otherwise you'll get undefined symbols !
 | 
			
		||||
 | 
			
		||||
	* The server is now started from 'glibtop_init__r', but only when
 | 
			
		||||
	it's really needed; for instance on DEC OSF/1 you only need it
 | 
			
		||||
	for the proc* features - if you program only fetches the CPU usage,
 | 
			
		||||
	now server will be started.
 | 
			
		||||
 | 
			
		||||
	* Sorry, at the moment everything is a little bit unstable, I'm doing
 | 
			
		||||
	heavy changes. I've just some great ideas which still need some work:
 | 
			
		||||
 | 
			
		||||
	  -> I want to have a SUID server that only implements those features
 | 
			
		||||
	     that need to be SUID; everything else uses the sysdeps code directly.
 | 
			
		||||
 | 
			
		||||
	  -> If a program only uses stuff that do not need the server, the
 | 
			
		||||
	     server will not be started at all.
 | 
			
		||||
 | 
			
		||||
	  -> I'm working on some kind of proxy server that can be used on a remote
 | 
			
		||||
	     host; in feature one can then use the MDI stuff from ghex in gtop to
 | 
			
		||||
	     have notebook pages displaying processes from different hosts.
 | 
			
		||||
 | 
			
		||||
	* Well it is as much unstable that it only works under Linux at the moment.
 | 
			
		||||
 | 
			
		||||
1998-06-01  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* sysdeps/common/sysdeps.c: now using '__r' functions,
 | 
			
		||||
	they are #defined either as the '__p' or the '__s' ones.
 | 
			
		||||
 | 
			
		||||
	* sysdeps/linux/*.c: changed call of 'glibtop_init__r',
 | 
			
		||||
	it now takes two additional arguments.
 | 
			
		||||
 | 
			
		||||
	* examples/{first.c, second.c}: now using 'glibtop_init'
 | 
			
		||||
	instead of 'glibtop_init__r'.
 | 
			
		||||
 | 
			
		||||
	* include/glibtop/sysdeps.h: added 'dummy' member so
 | 
			
		||||
	'GLIBTOP_SYSDEPS_<feature>' now start with 1.
 | 
			
		||||
 | 
			
		||||
	* include/glibtop/*.h: we now #define 'glibtop_get_<feature>'
 | 
			
		||||
	as 'glibtop_get_<feature>__l' and 'glibtop_get_<feature>__r'
 | 
			
		||||
	either as the '__p' or the '__s' function.
 | 
			
		||||
 | 
			
		||||
	* lib/*.c: removed #if's - we now decide at runtime
 | 
			
		||||
	whether to use the server or to call the appropriate
 | 
			
		||||
	function for the sysdeps directory.
 | 
			
		||||
 | 
			
		||||
1998-05-28  Martin Baulig  <baulig@merkur.uni-trier.de>
 | 
			
		||||
 | 
			
		||||
	* src/server/main.c: we now use the '__p' functions,
 | 
			
		||||
	but only if the appropriate 'GLIBTOP_SUID_<feature>'
 | 
			
		||||
	has a non-zero value.
 | 
			
		||||
	
 | 
			
		||||
	* configure.in (@machine_incs@): always use 
 | 
			
		||||
	`-I$(top_srcdir)/sysdeps/@sysdeps_dir@'; it's no
 | 
			
		||||
	longer conditional.
 | 
			
		||||
 | 
			
		||||
	* examples/Makefile.am: removed the '_linux' examples.
 | 
			
		||||
	
 | 
			
		||||
	* sysdeps/linux/*.c: renamed all functions implementing
 | 
			
		||||
	features to '__s'.
 | 
			
		||||
	
 | 
			
		||||
	* lib/*.c: renamed all functions implementing features
 | 
			
		||||
	to '__l'; we only emit code for those functions if the
 | 
			
		||||
 	corresponding 'GLIBTOP_SUID_<feature>' has a positive value.
 | 
			
		||||
	
 | 
			
		||||
	* include/glibtop/*.h: added some new function suffixes:
 | 
			
		||||
	'__l' is a function defined in the client part;
 | 
			
		||||
	'__s' is a function defined in the sysdeps part and
 | 
			
		||||
	'__p' is a function that needs special priviledges.
 | 
			
		||||
	'__r' is mapped either on '__l' or on '__s'.
 | 
			
		||||
	
 | 
			
		||||
	* sysdeps/linux/glibtop_server.h: New file -
 | 
			
		||||
	defines system dependent constants 'GLIBTOP_SUID_<feature>'
 | 
			
		||||
	being either 'GLIBTOP_SYSDEPS_<feature>'+1 depending upon
 | 
			
		||||
 	whether or not this feature requires using the server.
 | 
			
		||||
 | 
			
		||||
	* lib/sysdeps.c: removed that file; it is no longer
 | 
			
		||||
	needed.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
May/21/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* doc/gnome-hackers.sgml: This is a short intro on how to use libgtop
 | 
			
		||||
  in the GNOME project. It covers especially the use of its 'configure'
 | 
			
		||||
  script and the automatically generated 'gtopConf.sh'.
 | 
			
		||||
 | 
			
		||||
May/20/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* 'gtopConf.sh' now defines 'GTOP_LIBS' and 'GTOP_INCS' in a manner
 | 
			
		||||
  that they contain everything that is needed to link some program with
 | 
			
		||||
  libgtop. It will use '-lgtop' only if the server is really needed and
 | 
			
		||||
  '-lgtop_sysdeps' otherwise;
 | 
			
		||||
 | 
			
		||||
* 'gtopConf.sh' additionally defines 'GTOP_GUILE_LIBS' and 'GTOP_GUILE_INCS'
 | 
			
		||||
  containing everything that is needed to link some program both with
 | 
			
		||||
  libgtop and its guile interface. They are identically to 'GTOP_LIBS'
 | 
			
		||||
  and 'GTOP_INCS' if building the guile interface is disabled or guile
 | 
			
		||||
  cannot be found on the system.
 | 
			
		||||
 | 
			
		||||
* 'configure' takes additional arguments '--enable-libgtop-server' and
 | 
			
		||||
  '--disable-libgtop-server' to use the server even when it's not needed
 | 
			
		||||
  or to disable it's use where it's needed.
 | 
			
		||||
 | 
			
		||||
* 'configure' takes an argument '--without-libgtop-guile' to disable
 | 
			
		||||
  guile support.
 | 
			
		||||
 | 
			
		||||
* 'configure takes an argument '--without-libgtop-names' to remove
 | 
			
		||||
  '-lgtop_names' (and '-lgtop_guile_names' when we have guile) from
 | 
			
		||||
  'GTOP_LIBS'; in this case these libraries are not even built.
 | 
			
		||||
 | 
			
		||||
May/19/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* Libgtop is now in the GNOME CVS Repository.
 | 
			
		||||
 | 
			
		||||
May/17/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* we have now 'const char *glibtop_types_* []' consisting
 | 
			
		||||
  of the C types of the corresponding files of '_glibtop_*'.
 | 
			
		||||
 | 
			
		||||
* added guile function '(glibtop-types-*)' and '(glibtop-descriptions-*)'.
 | 
			
		||||
 | 
			
		||||
May/10/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* Port to DEC OSF1 3.0 has been made:
 | 
			
		||||
 | 
			
		||||
  cpu		(total, user, nice, sys, idle)
 | 
			
		||||
  mem		(total, used, free)
 | 
			
		||||
 | 
			
		||||
  loadavg	(loadavg)
 | 
			
		||||
  uptime	(uptime)
 | 
			
		||||
 | 
			
		||||
  msg_limits	(map, max, mnb, mni, tql)
 | 
			
		||||
  sem_limits	(mni, msl, opm, vmx, aem)
 | 
			
		||||
  shm_limits	(max, min, mni, seg)
 | 
			
		||||
 | 
			
		||||
  The following need the server to be SUID root:
 | 
			
		||||
 | 
			
		||||
  proclist	(total, number, size)
 | 
			
		||||
  procdata	(cmd, state, uid, pid, ppid, pgrp, tty, k_flags,
 | 
			
		||||
		 session, tpgid, sigignore, sigcatch, signal, nice, 
 | 
			
		||||
		 priority, resident, rss, vsize, utime, stime,
 | 
			
		||||
		 cutime, cstime, trs, drs)
 | 
			
		||||
 | 
			
		||||
May/07/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* 'flags' member of sysdeps/linux/procdata.c is now
 | 
			
		||||
  'unsigned long flags [2]'.
 | 
			
		||||
 | 
			
		||||
* When we give glibtop_get_procdata () a pid of zero, only
 | 
			
		||||
  the flags are returned.
 | 
			
		||||
 | 
			
		||||
* We now use static constants instead of #defines for sysdeps flags.
 | 
			
		||||
 | 
			
		||||
May/03/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* VPATH-Build now working; sometimes it's necessary to copy
 | 
			
		||||
  $(top_srcdir)/po/cat-id-tbl.c to $(top_builddir)/po.
 | 
			
		||||
 | 
			
		||||
* The library has been tested on the following systems:
 | 
			
		||||
 | 
			
		||||
  - i686-pc-linux-gnu
 | 
			
		||||
  - sparc-sun-sunos4.1.1
 | 
			
		||||
  - alpha-dec-osf1 (that's DEC OSF1 3.0 and 3.2)
 | 
			
		||||
 | 
			
		||||
* Compilation has been tested on the following systems (I have no root
 | 
			
		||||
  access there and cannot test the library because of this):
 | 
			
		||||
 | 
			
		||||
  - sparc-sun-solaris2
 | 
			
		||||
  - i386-bsdi
 | 
			
		||||
 | 
			
		||||
* Does no longer require Gnome.
 | 
			
		||||
 | 
			
		||||
* Guile-Parts are compiled only if guile can be found.
 | 
			
		||||
 | 
			
		||||
* Some of the executables are statically linked to copy them more easily
 | 
			
		||||
  between machines.
 | 
			
		||||
 | 
			
		||||
May/02/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
 * Global changes to the interfaces, all functions except glibtop_open()
 | 
			
		||||
   and glibtop_close() that took a server argument have now a '__r' suffix;
 | 
			
		||||
   the original name is now a macro that uses glibtop_global_server.
 | 
			
		||||
 | 
			
		||||
Apr/10/1998
 | 
			
		||||
===========
 | 
			
		||||
Added new directory sysdeps/guile/names. It is the guile interface
 | 
			
		||||
to the gtop_names library found in sysdeps/names. Changed
 | 
			
		||||
GLIBTOP_DESCRIPTIONS to GLIBTOP_NAMES and added GLIBTOP_GUILE_NAMES
 | 
			
		||||
to the header files.
 | 
			
		||||
 | 
			
		||||
Apr/09/1998
 | 
			
		||||
===========
 | 
			
		||||
Added new directories guile and names to sysdeps. In names are
 | 
			
		||||
some string constants about the data stored in the structures.
 | 
			
		||||
guile is a guile interface for the library. It is used in
 | 
			
		||||
examples/third (which has been completely rewritten).
 | 
			
		||||
The header files define things from names when GLIBTOP_DESCRIPTIONS
 | 
			
		||||
if defined and/or from guile when HAVE_GUILE is defined.
 | 
			
		||||
 | 
			
		||||
Apr/08/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
Added guile wrapper for the library (see examples/third).
 | 
			
		||||
							
								
								
									
										36
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								README
									
									
									
									
									
								
							@@ -1,8 +1,32 @@
 | 
			
		||||
$Id$
 | 
			
		||||
This is the *development* branch of LibGTop. It is indended
 | 
			
		||||
for people who want to help with the development of LibGTop and
 | 
			
		||||
not for end-users.
 | 
			
		||||
 | 
			
		||||
LATEST NEWS:
 | 
			
		||||
===========
 | 
			
		||||
Please use the LIBGTOP_STABLE_1_0 branch (which is LibGTop 1.0.x)
 | 
			
		||||
unless you're really a developer.
 | 
			
		||||
 | 
			
		||||
Please look also in the file 'NEWS' for latest news.
 | 
			
		||||
 
 | 
			
		||||
Martin
 | 
			
		||||
If you're using LibGTop from CVS simply do a
 | 
			
		||||
 | 
			
		||||
	cvs update -r LIBGTOP_STABLE_1_0
 | 
			
		||||
 | 
			
		||||
to get the latest version from the stable branch.
 | 
			
		||||
 | 
			
		||||
However, I'll periodically make snapshot releases from the development
 | 
			
		||||
branch for Solaris users of LibGTop.
 | 
			
		||||
 | 
			
		||||
They can be found at
 | 
			
		||||
 | 
			
		||||
	ftp://ftp.home-of-linux.org/pub/libgtop/1.1/
 | 
			
		||||
 | 
			
		||||
in near future.
 | 
			
		||||
 | 
			
		||||
Using released tarballs from the development branch is a lot better than
 | 
			
		||||
compiling directly from CVS since things in CVS may not always work as
 | 
			
		||||
expected.
 | 
			
		||||
 | 
			
		||||
Note that releases from the developer branch are neither binary
 | 
			
		||||
nor fully source compatible; you'll normally have to recompile
 | 
			
		||||
everything that use them.
 | 
			
		||||
 | 
			
		||||
October 1999
 | 
			
		||||
Martin Baulig
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										46
									
								
								RELNOTES-1.1.x
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								RELNOTES-1.1.x
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
RELEASE NOTES FOR LIBGTOP 1.1.2
 | 
			
		||||
===============================
 | 
			
		||||
 | 
			
		||||
This is a snapshot release for Solaris users of October GNOME. It contains
 | 
			
		||||
a first version of the Solaris port of LibGTop which works at least on
 | 
			
		||||
Solaris 7.
 | 
			
		||||
 | 
			
		||||
Please use LibGTop 1.0.x if you're not on a Solaris system
 | 
			
		||||
(look at the README file for details).
 | 
			
		||||
 | 
			
		||||
IMPORTANT CHANGES SINCE 1.0:
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
* glibtop_cpu: Added `xcpu_flags'
 | 
			
		||||
 | 
			
		||||
* glibtop_proc_state: Changed `state' from char to unsigned and added
 | 
			
		||||
    GLIBTOP_PROCESS_RUNNING, GLIBTOP_PROCESS_INTERRUPTIBLE,
 | 
			
		||||
    GLIBTOP_PROCESS_UNINTERRUPTIBLE,  GLIBTOP_PROCESS_ZOMBIE,
 | 
			
		||||
    GLIBTOP_PROCESS_STOPPED, GLIBTOP_PROCESS_SWAPPING constants for it.
 | 
			
		||||
 | 
			
		||||
* `GLIBTOP_MOUNTENTRY_LEN' and `GLIBTOP_MAX_GROUPS' are now defined in
 | 
			
		||||
  <glibtop/limits.h>
 | 
			
		||||
 | 
			
		||||
* Removed the `GLIBTOP_SYSDEPS_FEATURES' and `GLIBTOP_SYSDEPS_POINTER_SIZE'
 | 
			
		||||
  constants from <glibtop/sysdeps.h> and let numbering start at zero for
 | 
			
		||||
  `GLIBTOP_SYSDEPS_CPU'.
 | 
			
		||||
 | 
			
		||||
OTHER CHANGES SINCE 1.0:
 | 
			
		||||
-----------------------
 | 
			
		||||
 | 
			
		||||
* Use G_GNUC_UNUSED in <glibtop/error.h> to avoid compiler warnings.
 | 
			
		||||
 | 
			
		||||
* The `libgtop-config' script now accepts `--cflags', `--libs' and
 | 
			
		||||
  `--extra-libs' parameter.
 | 
			
		||||
 | 
			
		||||
* The libraries are now called -lgtop-1.1 etc. so you can use 1.0.x and
 | 
			
		||||
  1.1.x in parallel.
 | 
			
		||||
 | 
			
		||||
CHANGES SINCE 1.0 MAINLY INTERESTING FOR DEVELOPERS:
 | 
			
		||||
---------------------------------------------------
 | 
			
		||||
 | 
			
		||||
* We create a `glibtop-config.h' now which gets included from <glibtop.h>
 | 
			
		||||
  when we're _IN_LIBGTOP. It contains things such as `u_int64_t' etc.
 | 
			
		||||
 | 
			
		||||
October 1999
 | 
			
		||||
Martin Baulig
 | 
			
		||||
							
								
								
									
										46
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								TODO
									
									
									
									
									
								
							@@ -1,46 +0,0 @@
 | 
			
		||||
This is LibGTop 0.99.2,
 | 
			
		||||
 | 
			
		||||
a feature-freezed version of LibGTop for GNOME 1.0.
 | 
			
		||||
 | 
			
		||||
You need to use the latest version of LibGTop from CVS for Gnome, it will
 | 
			
		||||
no longer work with older releases.
 | 
			
		||||
 | 
			
		||||
Martin
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
NOTE:  LibGTop is already feature-freezed for GNOME 1.0, so only bug fixes
 | 
			
		||||
       are ok, no API changes !
 | 
			
		||||
 | 
			
		||||
Sysdeps directory 'linux':
 | 
			
		||||
==========================
 | 
			
		||||
 | 
			
		||||
* Add implementation for `ppp' with modems.
 | 
			
		||||
 | 
			
		||||
Sysdeps directory 'freebsd':
 | 
			
		||||
============================
 | 
			
		||||
 | 
			
		||||
* FreeBSD 3.0: It works fine on this system, so please make sure not
 | 
			
		||||
               to break it here.
 | 
			
		||||
 | 
			
		||||
* FreeBSD 2.2: Make sure it still works here.
 | 
			
		||||
 | 
			
		||||
* NetBSD/OpenBSD: Support was added on Dec 6, but we need to check
 | 
			
		||||
                  whether all data are valid.
 | 
			
		||||
 | 
			
		||||
Sysdeps directories 'kernel', 'osf1' and 'sun4':
 | 
			
		||||
================================================
 | 
			
		||||
 | 
			
		||||
* You need to use the `--enable-hacker-mode' parameter to configure
 | 
			
		||||
  to build this directories.
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Everything except sysdeps directories:
 | 
			
		||||
======================================
 | 
			
		||||
 | 
			
		||||
* Ready for Gnome 1.0. [ALREADY FEATURE FREEZED]
 | 
			
		||||
 | 
			
		||||
January 5, 1999
 | 
			
		||||
 | 
			
		||||
Martin
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								acconfig.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								acconfig.h
									
									
									
									
									
								
							@@ -138,7 +138,7 @@
 | 
			
		||||
 | 
			
		||||
#undef NEED_LIBGTOP
 | 
			
		||||
 | 
			
		||||
#undef HAVE_LINUX_TABLE
 | 
			
		||||
#undef HAVE_LINUX_SYSCTL
 | 
			
		||||
#undef HAVE_LIBGTOP_SMP
 | 
			
		||||
 | 
			
		||||
#undef HAVE_XAUTH
 | 
			
		||||
@@ -156,6 +156,14 @@
 | 
			
		||||
 */
 | 
			
		||||
#undef GLIBTOP_LINUX_VERSION_CODE
 | 
			
		||||
 | 
			
		||||
/* Solaris release code (eg. 251 for Solaris 2.5.1). */
 | 
			
		||||
#undef GLIBTOP_SOLARIS_RELEASE
 | 
			
		||||
 | 
			
		||||
/* Define if you want to use LibGTop without GNOME. */
 | 
			
		||||
#undef WITHOUT_GNOME
 | 
			
		||||
 | 
			
		||||
/* Define if you have the <procfs.h> header file */
 | 
			
		||||
#undef HAVE_PROCFS_H
 | 
			
		||||
 | 
			
		||||
/* Define if you have the <sys/procfs.h> header file */
 | 
			
		||||
#undef HAVE_SYS_PROCFS_H
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										207
									
								
								configure.in
									
									
									
									
									
								
							
							
						
						
									
										207
									
								
								configure.in
									
									
									
									
									
								
							@@ -13,6 +13,12 @@ AC_MSG_ERROR([
 | 
			
		||||
*** The "dc" utility was not found on your system.
 | 
			
		||||
***
 | 
			
		||||
*** When using RedHat Linux, you need to install the "bc" package.
 | 
			
		||||
***
 | 
			
		||||
*** It is now part of the "bc" package, so you should look at
 | 
			
		||||
*** ftp://ftp.gnu.org/pub/gnu/bc/ if you want to compile it yourself.
 | 
			
		||||
***
 | 
			
		||||
*** Other systems and distributions may also have it in their "bc" package,
 | 
			
		||||
*** so if there's no "dc" one, please look for "bc".
 | 
			
		||||
***])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
@@ -33,7 +39,7 @@ LT_RELEASE=$LIBGTOP_MAJOR_VERSION.$LIBGTOP_MINOR_VERSION
 | 
			
		||||
LT_CURRENT=`expr $LIBGTOP_MICRO_VERSION - $LIBGTOP_INTERFACE_AGE`
 | 
			
		||||
LT_REVISION=$LIBGTOP_INTERFACE_AGE
 | 
			
		||||
LT_AGE=`expr $LIBGTOP_BINARY_AGE - $LIBGTOP_INTERFACE_AGE`
 | 
			
		||||
LT_VERSION_INFO='-version-info ${LT_CURRENT}:${LT_REVISION}:${LT_AGE}'
 | 
			
		||||
LT_VERSION_INFO='-version-info ${LT_CURRENT}:${LT_REVISION}:${LT_AGE} -release ${LT_RELEASE}'
 | 
			
		||||
AC_SUBST(LT_VERSION_INFO)
 | 
			
		||||
AC_SUBST(LT_RELEASE)
 | 
			
		||||
AC_SUBST(LT_CURRENT)
 | 
			
		||||
@@ -47,6 +53,10 @@ AC_PROG_CC
 | 
			
		||||
AC_STDC_HEADERS
 | 
			
		||||
AC_ARG_PROGRAM
 | 
			
		||||
 | 
			
		||||
dnl We need this at some places.
 | 
			
		||||
libgtop_top_builddir=`pwd`
 | 
			
		||||
AC_SUBST(libgtop_top_builddir)
 | 
			
		||||
 | 
			
		||||
dnl We don't use `AC_PROG_AWK' since it checks for mawk first which
 | 
			
		||||
dnl does not work for libgtop.
 | 
			
		||||
AC_CHECK_PROGS(AWK, gawk awk, )
 | 
			
		||||
@@ -91,10 +101,15 @@ if test "x$gnome_found" != xyes; then
 | 
			
		||||
  fi
 | 
			
		||||
  GNOME_SUPPORT_CHECKS
 | 
			
		||||
else
 | 
			
		||||
  AM_CONDITIONAL(BUILD_GNOME_SUPPORT, false)
 | 
			
		||||
  AM_CONDITIONAL(CROSS_COMPILING, test "x$cross_compiling" = xyes)
 | 
			
		||||
  if test "x$want_gnome" != xno ; then
 | 
			
		||||
    AM_CONDITIONAL(BUILD_GNOME_SUPPORT, false)
 | 
			
		||||
  else
 | 
			
		||||
    GNOME_SUPPORT_CHECKS
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AM_CONDITIONAL(CROSS_COMPILING, test "x$cross_compiling" = xyes)
 | 
			
		||||
 | 
			
		||||
GNOME_LIBGTOP_SYSDEPS
 | 
			
		||||
GNOME_LIBGTOP_TYPES
 | 
			
		||||
 | 
			
		||||
@@ -147,11 +162,14 @@ else
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "x$enable_static" != xno; then
 | 
			
		||||
  static_targets="first_static second_static mountlist_static procmap_static netload_static sysdeps_static $guile_static_examples $smp_static_examples"
 | 
			
		||||
  static_targets="first_static second_static mountlist_static procmap_static netload_static sysdeps_static timings_static $guile_static_examples $smp_static_examples"
 | 
			
		||||
else
 | 
			
		||||
  static_targets=""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AM_CONDITIONAL(ENABLE_STATIC, test x$enable_static = xyes)
 | 
			
		||||
AM_CONDITIONAL(ENABLE_SHARED, test x$enable_static = xyes)
 | 
			
		||||
 | 
			
		||||
AC_SUBST(static_targets)
 | 
			
		||||
AC_SUBST(smp_examples)
 | 
			
		||||
AC_SUBST(guile_examples)
 | 
			
		||||
@@ -181,7 +199,45 @@ AC_CHECK_TYPE(ssize_t, int)
 | 
			
		||||
AC_CHECK_HEADERS(memory.h)
 | 
			
		||||
AC_CHECK_HEADERS(string.h strings.h, break)
 | 
			
		||||
AC_REPLACE_FUNCS(strerror)
 | 
			
		||||
AC_CHECK_LIB(kvm, kvm_open)
 | 
			
		||||
 | 
			
		||||
dnl dlopen() and dlsym()
 | 
			
		||||
DL_LIB=
 | 
			
		||||
AC_CHECK_FUNCS(dlopen,,[
 | 
			
		||||
  AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", [
 | 
			
		||||
    AC_CHECK_LIB(dld, shl_load, DL_LIB="-ldld", [
 | 
			
		||||
      AC_CHECK_FUNCS(dlopen, DL_LIB="", DL_LIB="")
 | 
			
		||||
    ])
 | 
			
		||||
  ])
 | 
			
		||||
])
 | 
			
		||||
oLIBS="$LIBS"
 | 
			
		||||
LIBS="$LIBS $DL_LIB"
 | 
			
		||||
AC_CHECK_FUNCS(dlerror,,)
 | 
			
		||||
LIBS="$oLIBS"
 | 
			
		||||
AC_SUBST(DL_LIB)
 | 
			
		||||
 | 
			
		||||
dnl Solaris
 | 
			
		||||
AC_CHECK_LIB(kstat, kstat_open)
 | 
			
		||||
AC_CHECK_FUNCS(getloadavg swapctl)
 | 
			
		||||
AC_CHECK_HEADERS(procfs.h sys/procfs.h, break)
 | 
			
		||||
 | 
			
		||||
dnl Some versions of Solaris require -lelf for -lkvm
 | 
			
		||||
AC_CHECK_LIB(kvm, kvm_open,[
 | 
			
		||||
  LIBS="-lkvm $LIBS"
 | 
			
		||||
],[AC_MSG_CHECKING(for kvm_open in -lkvm with -lelf)
 | 
			
		||||
   AC_CACHE_VAL(ac_cv_lib_kvm_with_elf,
 | 
			
		||||
   [ac_save_LIBS="$LIBS"
 | 
			
		||||
    LIBS="-lkvm -lelf $LIBS"
 | 
			
		||||
    AC_TRY_LINK([char kvm_open();], [kvm_open()],
 | 
			
		||||
                ac_cv_lib_kvm_with_elf=yes, ac_cv_lib_kvm_with_elf=no)
 | 
			
		||||
    LIBS="$ac_save_LIBS"
 | 
			
		||||
   ])
 | 
			
		||||
   if test "$ac_cv_lib_kvm_with_elf" = "yes"; then
 | 
			
		||||
     AC_MSG_RESULT(yes)
 | 
			
		||||
     LIBS="-lkvm -lelf $LIBS"
 | 
			
		||||
   else
 | 
			
		||||
     AC_MSG_RESULT(no)
 | 
			
		||||
   fi
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
dnl For DEC OSF1
 | 
			
		||||
AC_CHECK_LIB(mach, vm_statistics)
 | 
			
		||||
@@ -220,7 +276,7 @@ AC_FUNC_STRFTIME
 | 
			
		||||
AC_CHECK_FUNCS(getcwd gettimeofday getwd putenv strdup strtoul uname)
 | 
			
		||||
 | 
			
		||||
dnl ## all 'es_??' are only needed for format numbers different of 'es'
 | 
			
		||||
ALL_LINGUAS="de es es_DO es_GT es_HN es_MX es_PA es_PE es_SV fr ko no ja"
 | 
			
		||||
ALL_LINGUAS="da de es es_DO es_GT es_HN es_MX es_PA es_PE es_SV fi fr ja ko nl no pl pt_BR sv"
 | 
			
		||||
AM_GNOME_GETTEXT
 | 
			
		||||
 | 
			
		||||
AC_PATH_XTRA
 | 
			
		||||
@@ -281,7 +337,7 @@ AC_SUBST(SUPPORTINCS)
 | 
			
		||||
 | 
			
		||||
dnl These definitions are expanded in make.
 | 
			
		||||
LIBGTOP_LIBS='-L$(libdir)'
 | 
			
		||||
LIBGTOP_INCS='-I$(includedir)'
 | 
			
		||||
LIBGTOP_INCS='-I$(includedir) -I$(pkglibdir)/include'
 | 
			
		||||
 | 
			
		||||
if test x$libgtop_use_machine_h = xyes ; then
 | 
			
		||||
  LIBGTOP_INCS="$LIBGTOP_INCS -DHAVE_GLIBTOP_MACHINE_H"
 | 
			
		||||
@@ -354,7 +410,7 @@ else
 | 
			
		||||
  guile_def=""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
INCLUDES="-D_IN_LIBGTOP -D_GNU_SOURCE -DGLIBTOP_NAMES -I\$(top_builddir) -I\$(top_srcdir) -I\$(top_srcdir)/sysdeps/$sysdeps_dir -I\$(top_srcdir)/include -I\$(top_srcdir)/intl $SUPPORTINCS $GLIB_CFLAGS $CFLAGS $X_CFLAGS $guile_def "'-DGTOPLOCALEDIR=\"$(datadir)/locale\" -DLIBGTOP_VERSION=\"'"$LIBGTOP_VERSION"'\" -DLIBGTOP_SERVER_VERSION=\"'"$LIBGTOP_SERVER_VERSION"'\" -DLIBGTOP_SERVER=\"'"$LIBGTOP_SERVER"'\"'
 | 
			
		||||
INCLUDES="-D_IN_LIBGTOP -D_GNU_SOURCE -DGLIBTOP_NAMES -I\$(top_builddir) -I\$(top_srcdir) -I\$(top_srcdir)/sysdeps/$sysdeps_dir -I\$(top_srcdir)/include -I\$(top_srcdir)/intl $SUPPORTINCS $GLIB_CFLAGS $CFLAGS $X_CFLAGS $guile_def "'-DGTOPLOCALEDIR=\"$(datadir)/locale\" -DLIBGTOP_VERSION=\"'"$LIBGTOP_VERSION"'\" -DLIBGTOP_SERVER_VERSION=\"'"$LIBGTOP_SERVER_VERSION"'\" -DLIBGTOP_VERSION_CODE='$LIBGTOP_VERSION_CODE' -DLIBGTOP_SERVER=\"'"$LIBGTOP_SERVER"'\"'
 | 
			
		||||
 | 
			
		||||
AC_SUBST(INCLUDES)
 | 
			
		||||
 | 
			
		||||
@@ -381,6 +437,139 @@ fi
 | 
			
		||||
AC_SUBST(sysdeps_suid_lib)
 | 
			
		||||
AC_SUBST(server_programs)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
dnl The following one is copied from glib/configure.in
 | 
			
		||||
 | 
			
		||||
AC_OUTPUT_COMMANDS([
 | 
			
		||||
 | 
			
		||||
## Generate `glibconfig.h' in two cases
 | 
			
		||||
## 1. `config.status' is run either explicitly, or via configure.
 | 
			
		||||
##     Esp. not when it is run in `Makefile' to generate makefiles and
 | 
			
		||||
##     config.h
 | 
			
		||||
## 2. CONFIG_OTHER is set explicitly
 | 
			
		||||
##
 | 
			
		||||
## Case 1 is difficult.  We know that `automake' sets one of
 | 
			
		||||
## CONFIG_FILES or CONFIG_HEADERS to empty.  This heuristic works
 | 
			
		||||
## only when AM_CONFIG_HEADER is set, however.
 | 
			
		||||
 | 
			
		||||
if test -n "${CONFIG_FILES}" && test -n "${CONFIG_HEADERS}"; then
 | 
			
		||||
  # Both CONFIG_FILES and CONFIG_HEADERS are non-empty ==> Case 1
 | 
			
		||||
  CONFIG_OTHER=${CONFIG_OTHER:-glibtop-config.h}
 | 
			
		||||
fi
 | 
			
		||||
case "$CONFIG_OTHER" in
 | 
			
		||||
*glibtop-config.h*)
 | 
			
		||||
	echo creating glibtop-config.h
 | 
			
		||||
	outfile=glibtop-config.h-tmp
 | 
			
		||||
	cat > $outfile <<\_______EOF
 | 
			
		||||
/* glibtop-config.h
 | 
			
		||||
 *
 | 
			
		||||
 * This is a generated file.  Please modify `configure.in'
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef GLIBTOP_CONFIG_H
 | 
			
		||||
#define GLIBTOP_CONFIG_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif /* __cplusplus */
 | 
			
		||||
_______EOF
 | 
			
		||||
 | 
			
		||||
	did_typedefs=no
 | 
			
		||||
 | 
			
		||||
	if test x$glibtop_uint64_t != xyes ; then
 | 
			
		||||
	  did_typedefs=yes
 | 
			
		||||
	  cat >> $outfile <<\_______EOF
 | 
			
		||||
 | 
			
		||||
#ifndef u_int64_t
 | 
			
		||||
typedef unsigned long long int u_int64_t;
 | 
			
		||||
#endif
 | 
			
		||||
_______EOF
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if test x$glibtop_int64_t != xyes ; then
 | 
			
		||||
	  did_typedefs=yes
 | 
			
		||||
	  cat >> $outfile <<\_______EOF
 | 
			
		||||
 | 
			
		||||
#ifndef int64_t
 | 
			
		||||
typedef signed long long int int64_t;
 | 
			
		||||
#endif
 | 
			
		||||
_______EOF
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if test x$did_typedefs = xyes ; then
 | 
			
		||||
	  cat >>$outfile <<_______EOF
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * NOTE:  If your application checks for "u_int64_t" or "int64_t" in its own
 | 
			
		||||
 *        config.h, you must not include it after any of the LibGTop headers.
 | 
			
		||||
 */
 | 
			
		||||
_______EOF
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	cat >>$outfile <<_______EOF
 | 
			
		||||
 | 
			
		||||
/* Define if we need the LibGTop server. */
 | 
			
		||||
_______EOF
 | 
			
		||||
 | 
			
		||||
	if test x$glibtop_need_libgtop = xyes ; then
 | 
			
		||||
	  echo '#define NEED_LIBGTOP 1' >> $outfile
 | 
			
		||||
	else
 | 
			
		||||
	  echo '#undef NEED_LIBGTOP' >> $outfile
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	cat >>$outfile <<_______EOF
 | 
			
		||||
 | 
			
		||||
/* Define if LibGTop has support for multiple processors. */
 | 
			
		||||
_______EOF
 | 
			
		||||
 | 
			
		||||
	if test x$glibtop_have_smp = xyes ; then
 | 
			
		||||
	  echo '#define HAVE_LIBGTOP_SMP 1' >> $outfile
 | 
			
		||||
	else
 | 
			
		||||
	  echo '#undef HAVE_LIBGTOP_SMP' >> $outfile
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	cat >>$outfile <<_______EOF
 | 
			
		||||
 | 
			
		||||
/* LibGTop major, minor and micro version. */
 | 
			
		||||
#define LIBGTOP_MAJOR_VERSION $libgtop_major_version
 | 
			
		||||
#define LIBGTOP_MINOR_VERSION $libgtop_minor_version
 | 
			
		||||
#define LIBGTOP_MICRO_VERSION $libgtop_micro_version
 | 
			
		||||
 | 
			
		||||
/* LibGTop version and numerical version code ("1.234.567" -> 1234567). */
 | 
			
		||||
#define LIBGTOP_VERSION "$libgtop_version"
 | 
			
		||||
#define LIBGTOP_VERSION_CODE $libgtop_version_code
 | 
			
		||||
 | 
			
		||||
/* LibGTop server version, increased each time the protocol changes. */
 | 
			
		||||
#define LIBGTOP_SERVER_VERSION $libgtop_server_version
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif /* __cplusplus */
 | 
			
		||||
 | 
			
		||||
#endif /* GLIBCONFIG_H */
 | 
			
		||||
_______EOF
 | 
			
		||||
 | 
			
		||||
	if cmp -s $outfile glibtop-config.h; then
 | 
			
		||||
	  echo glibtop-config.h is unchanged
 | 
			
		||||
	  rm -f $outfile
 | 
			
		||||
	else
 | 
			
		||||
	  mv $outfile glibtop-config.h
 | 
			
		||||
	fi ;;
 | 
			
		||||
esac
 | 
			
		||||
],[
 | 
			
		||||
glibtop_uint64_t=$ac_cv_type_u_int64_t
 | 
			
		||||
glibtop_int64_t=$ac_cv_type_int64_t
 | 
			
		||||
libgtop_major_version=$LIBGTOP_MAJOR_VERSION
 | 
			
		||||
libgtop_minor_version=$LIBGTOP_MINOR_VERSION
 | 
			
		||||
libgtop_micro_version=$LIBGTOP_MICRO_VERSION
 | 
			
		||||
libgtop_version_code=$LIBGTOP_VERSION_CODE
 | 
			
		||||
libgtop_server_version=$LIBGTOP_SERVER_VERSION
 | 
			
		||||
libgtop_version=$LIBGTOP_VERSION
 | 
			
		||||
glibtop_need_libgtop=$libgtop_need_server
 | 
			
		||||
glibtop_have_smp=$libgtop_smp
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AC_OUTPUT([
 | 
			
		||||
Makefile
 | 
			
		||||
libgtop.spec
 | 
			
		||||
@@ -401,10 +590,12 @@ sysdeps/osf1/Makefile
 | 
			
		||||
sysdeps/linux/Makefile
 | 
			
		||||
sysdeps/kernel/Makefile
 | 
			
		||||
sysdeps/freebsd/Makefile
 | 
			
		||||
sysdeps/solaris/Makefile
 | 
			
		||||
src/Makefile
 | 
			
		||||
src/daemon/Makefile
 | 
			
		||||
src/inodedb/Makefile
 | 
			
		||||
lib/Makefile
 | 
			
		||||
examples/Makefile
 | 
			
		||||
doc/Makefile
 | 
			
		||||
support/Makefile
 | 
			
		||||
macros/Makefile])
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								doc/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								doc/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
texinfo.tex
 | 
			
		||||
*.info
 | 
			
		||||
Makefile.in
 | 
			
		||||
Makefile
 | 
			
		||||
*.log *.toc *.dvi *.aux *.cp *.fn *.vr *.tp *.ky *.pg
 | 
			
		||||
*.ps
 | 
			
		||||
auto-macros.texi
 | 
			
		||||
version.texi
 | 
			
		||||
stamp-vti
 | 
			
		||||
*.html *.pdf
 | 
			
		||||
							
								
								
									
										53
									
								
								doc/ChangeLog
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								doc/ChangeLog
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
1999-10-18  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* about.texi: Added a note about LibGTop and GNOME.
 | 
			
		||||
 | 
			
		||||
	* reference.texi (glibtop_proc_state): Fix description of the `state'
 | 
			
		||||
 	field for LibGTop 1.0.x.
 | 
			
		||||
 | 
			
		||||
1999-09-29  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Reverted Timur's commit.
 | 
			
		||||
	(MAKEINFO): Add `-I @libgtop_top_builddir@/doc' here. This still
 | 
			
		||||
	creates libgtop.info in srcdir, but that's an automake problem.
 | 
			
		||||
 | 
			
		||||
Tue Jun 15 15:59:50 1999 Timur Bakeyev <mc@bat.ru>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Force `auto-macros.texi' to be created in $(srcdir),
 | 
			
		||||
	as, otherwise, makeinfo is unable to find it, if srcdir != builddir.
 | 
			
		||||
	That's a buggy solution, as spoils srcdir, but, as libgtop.info also
 | 
			
		||||
	created in srcdir - this is acceptable. Both SHOULD be fixed!
 | 
			
		||||
 | 
			
		||||
1999-05-28  Martin Baulig  <baulig@Stud.Informatik.Uni-Trier.DE>
 | 
			
		||||
 | 
			
		||||
	* internals.texi: New file documenting LibGTop internals.
 | 
			
		||||
	* reference.texi: Started to document all library functions and
 | 
			
		||||
	finished the sysdeps and common references.
 | 
			
		||||
 | 
			
		||||
1999-05-16  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* main.texi: This is now the main file which will @include all
 | 
			
		||||
	chapter files so we can use `texinfo-multiple-files-update'.
 | 
			
		||||
 | 
			
		||||
	* reference.texi: Added all missing sections with a "not yet written"
 | 
			
		||||
	notice.
 | 
			
		||||
 | 
			
		||||
1999-05-16  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* white-paper.texi: Initial version of the LibGTop White Paper.
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Create `auto-macros.texi' from `auto-macros.texi.in'
 | 
			
		||||
 	which will contain some `@set' commands for the LibGTop version etc.
 | 
			
		||||
 | 
			
		||||
	* auto-macros.texi.in: New file. This is a template for
 | 
			
		||||
	`auto-macros.texi' which will be automatically generated.
 | 
			
		||||
 | 
			
		||||
1999-05-09  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* about.texi: Split the `libgtop.texi' into one file pro chapter,
 | 
			
		||||
	this is the "About LibGTop".
 | 
			
		||||
 | 
			
		||||
	* reference.texi: The "LibGTop Reference Manual".
 | 
			
		||||
 | 
			
		||||
	* libgtop.texi: Initial version of the new LibGTop Manual.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										45
									
								
								doc/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								doc/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
info_TEXINFOS		= libgtop.texi
 | 
			
		||||
 | 
			
		||||
libgtop_TEXINFOS	= libgtop.texi about.texi reference.texi \
 | 
			
		||||
			  auto-macros.texi version.texi main.texi \
 | 
			
		||||
			  white-paper.texi internals.texi
 | 
			
		||||
 | 
			
		||||
MAKEINFO		+= -I @libgtop_top_builddir@/doc
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST		= auto-macros.texi.in
 | 
			
		||||
 | 
			
		||||
auto-macros.texi: auto-macros.texi.in Makefile
 | 
			
		||||
## Use sed and then mv to avoid problems if the user interrupts.
 | 
			
		||||
	sed -e 's#\%LIBGTOP_LIBDIR\%#$(libdir)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_INCLUDEDIR\%#$(includedir)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_DATADIR\%#$(datadir)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_EXTRA_LIBS\%#$(LIBGTOP_EXTRA_LIBS)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_LIBS\%#$(LIBGTOP_LIBS)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_INCS\%#$(LIBGTOP_INCS)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_NAMES_LIBS\%#$(LIBGTOP_NAMES_LIBS)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_NAMES_INCS\%#$(LIBGTOP_NAMES_INCS)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_GUILE_LIBS\%#$(LIBGTOP_GUILE_LIBS)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_GUILE_INCS\%#$(LIBGTOP_GUILE_INCS)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_GUILE_NAMES_LIBS\%#$(LIBGTOP_GUILE_NAMES_LIBS)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_GUILE_NAMES_INCS\%#$(LIBGTOP_GUILE_NAMES_INCS)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_BINDIR\%#$(LIBGTOP_BINDIR)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_SERVER\%#$(LIBGTOP_SERVER)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_MAJOR_VERSION\%#$(LIBGTOP_MAJOR_VERSION)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_MINOR_VERSION\%#$(LIBGTOP_MINOR_VERSION)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_MICRO_VERSION\%#$(LIBGTOP_MICRO_VERSION)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_VERSION\%#$(LIBGTOP_VERSION)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_VERSION_CODE\%#$(LIBGTOP_VERSION_CODE)#g' \
 | 
			
		||||
	  -e 's#\%LIBGTOP_SERVER_VERSION\%#$(LIBGTOP_SERVER_VERSION)#g' \
 | 
			
		||||
	  -e 's#\%libgtop_sysdeps_dir\%#$(libgtop_sysdeps_dir)#g' \
 | 
			
		||||
	  -e 's#\%libgtop_need_server\%#$(libgtop_need_server)#g' \
 | 
			
		||||
	  -e 's#\%libgtop_use_machine_h\%#$(libgtop_use_machine_h)#g' \
 | 
			
		||||
	  -e 's#\%libgtop_guile_found\%#$(libgtop_guile_found)#g' \
 | 
			
		||||
	  -e 's#\%libgtop_want_examples\%#$(libgtop_want_examples)#g' \
 | 
			
		||||
	      < $(srcdir)/auto-macros.texi.in > auto-macros.tmp
 | 
			
		||||
	echo '@c Set this if this is LibGTop 1.1.x' >> auto-macros.tmp
 | 
			
		||||
	if [ $(LIBGTOP_VERSION_CODE) -ge 1001000 ] ; then \
 | 
			
		||||
	  echo '@set LIBGTOP-1-1' >> auto-macros.tmp ; \
 | 
			
		||||
	else \
 | 
			
		||||
	  echo '@clear LIBGTOP-1-1' >> auto-macros.tmp ; \
 | 
			
		||||
	fi
 | 
			
		||||
	mv auto-macros.tmp auto-macros.texi
 | 
			
		||||
							
								
								
									
										121
									
								
								doc/about.texi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								doc/about.texi
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,121 @@
 | 
			
		||||
@node About, White Paper, Top, Top
 | 
			
		||||
@chapter About LibGTop
 | 
			
		||||
 | 
			
		||||
LibGTop is a library to get system specific data such as CPU and Memory Usage
 | 
			
		||||
and information about running Processes.
 | 
			
		||||
 | 
			
		||||
On Systems like Solaris or Digital Unix where you need special privileges to
 | 
			
		||||
get those data, it uses a setuid/setgid server to do so.
 | 
			
		||||
 | 
			
		||||
Even if LibGTop is a part of the GNOME desktop environment (@uref{http://www.gnome.org}),
 | 
			
		||||
the main interface of LibGTop is totally independent from any particular desktop environment,
 | 
			
		||||
so you can also use it as a standalone library in any piece of GPLed software.
 | 
			
		||||
 | 
			
		||||
@menu
 | 
			
		||||
* Availability::                Where to get LibGTop
 | 
			
		||||
* Supported Platforms::         Supported Platforms
 | 
			
		||||
* Mailing List::                Helping with LibGTop development
 | 
			
		||||
* Thanks::                      People who contributed to LibGTop
 | 
			
		||||
@end menu
 | 
			
		||||
 | 
			
		||||
@node Availability, Supported Platforms, About, About
 | 
			
		||||
@section Availability
 | 
			
		||||
 | 
			
		||||
The master source of LibGTop is the GNOME CVS tree
 | 
			
		||||
(see @uref{http://www.gnome.org} for details), but you can also get the
 | 
			
		||||
latest release tarballs from
 | 
			
		||||
 | 
			
		||||
@display
 | 
			
		||||
@uref{ftp://ftp.gnome.org/pub/GNOME/sources/libgtop/}
 | 
			
		||||
@end display
 | 
			
		||||
 | 
			
		||||
@noindent
 | 
			
		||||
or any of its mirror sites.
 | 
			
		||||
 | 
			
		||||
The latest stable version of LibGTop is 1.0.1 which is also the one that comes
 | 
			
		||||
together with GNOME 1.0. In CVS, there is a @code{LIBGTOP_STABLE_1_0} branch
 | 
			
		||||
which is rooted at the @code{LIBGTOP_1_0_1} tag while actual development occurs
 | 
			
		||||
in the @code{HEAD} which currently has version 1.1.0.
 | 
			
		||||
 | 
			
		||||
@node Supported Platforms, Mailing List, Availability, About
 | 
			
		||||
@section Supported Platforms
 | 
			
		||||
 | 
			
		||||
The stable branch currently supports the following platforms:
 | 
			
		||||
 | 
			
		||||
@itemize @bullet
 | 
			
		||||
@item All versions of Linux
 | 
			
		||||
 | 
			
		||||
LibGTop was tested under Linux 2.0.x and 2.2.x on the ix86 and the alpha, but
 | 
			
		||||
it should also work without problems on SparcLinux.
 | 
			
		||||
 | 
			
		||||
Note: I'm speaking of the Linux kernel here, not the GNU/Linux operating system.
 | 
			
		||||
 | 
			
		||||
@item FreeBSD, NetBSD and OpenBSD
 | 
			
		||||
 | 
			
		||||
LibGTop was tested under FreeBSD 2.2.6 and 3.0, NetBSD 1.3.2 and OpenBSD 2.4.
 | 
			
		||||
Support for NetBSD 1.4 was added in LibGTop 1.0.2.
 | 
			
		||||
 | 
			
		||||
@end itemize
 | 
			
		||||
 | 
			
		||||
The platforms listed above are known to be stable and working. However, if
 | 
			
		||||
you're using the latest development version, you can use it on the following
 | 
			
		||||
platforms as well:
 | 
			
		||||
 | 
			
		||||
@itemize @bullet
 | 
			
		||||
@item BSD/OS
 | 
			
		||||
 | 
			
		||||
There is a port for BSD/OS (aka BSDI) 2.x and 3.x from Timur Bakeyev which
 | 
			
		||||
should also work with 4.x. This isn't tested very well, but it should be
 | 
			
		||||
working.
 | 
			
		||||
 | 
			
		||||
@item Digital Unix
 | 
			
		||||
 | 
			
		||||
There is some basic support for Digital Unix (formerly DEC OSF/1) V3.2C, but
 | 
			
		||||
this may still be a bit unstable. I'm currently working on this port as time
 | 
			
		||||
permits so it should be fully supported soon.
 | 
			
		||||
 | 
			
		||||
@item Solaris
 | 
			
		||||
 | 
			
		||||
The Solaris port currently works on Solaris 7 and maybe also on other releases.
 | 
			
		||||
Thanks a lot to Drazen Kacar and everyone who helped working on this port. They
 | 
			
		||||
have really done excellent work here and I'm pretty sure that this port will be
 | 
			
		||||
fully functional on most Solaris versions in near future.
 | 
			
		||||
 | 
			
		||||
@end itemize
 | 
			
		||||
 | 
			
		||||
@node Mailing List, Thanks, Supported Platforms, About
 | 
			
		||||
@section Mailing List
 | 
			
		||||
 | 
			
		||||
There is a @email{libgtop-devel-list@@egroups.com} mailing list for people who
 | 
			
		||||
want to help with the development of LibGTop.
 | 
			
		||||
 | 
			
		||||
It is meant as a low-traffic, but high content-list where we can discuss
 | 
			
		||||
technical details such as adding new sysdeps ports etc. 
 | 
			
		||||
 | 
			
		||||
Especially, I'd like to see people with a deeper knowledge of operating systems
 | 
			
		||||
internals joining my list so we can discuss technical details of the sysdeps
 | 
			
		||||
code. 
 | 
			
		||||
 | 
			
		||||
It is *not* for users that want to know how to compile LibGTop etc.
 | 
			
		||||
 | 
			
		||||
You can subscribe to this mailing list and view the mailing list archives
 | 
			
		||||
on the LibGTop Page at @uref{http://www.home-of-linux.org/gnome/libgtop}.
 | 
			
		||||
 | 
			
		||||
@node Thanks,  , Mailing List, About
 | 
			
		||||
@section Thanks
 | 
			
		||||
 | 
			
		||||
At the place I'd like to thank the following people who contributed to
 | 
			
		||||
LibGTop (listed in chronological order):
 | 
			
		||||
 | 
			
		||||
@itemize @bullet
 | 
			
		||||
@item Sebastian Wilhelmi who had the initial idea of LibGTop and helped
 | 
			
		||||
me a lot in the early beginning.
 | 
			
		||||
@item Josh Sled for the initial FreeBSD port.
 | 
			
		||||
@item Jeremy Lea for his BSD patches.
 | 
			
		||||
@item Timur Bakeyev for the BSDI port.
 | 
			
		||||
@item Drazen Kacar and the other people on the LibGTop development mailing
 | 
			
		||||
list for the Solaris port.
 | 
			
		||||
@item All people sending me patches, having good ideas, ...
 | 
			
		||||
@item Everyone I have forgotten in this list ...
 | 
			
		||||
@end itemize
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								doc/auto-macros.texi.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								doc/auto-macros.texi.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
@c LibGTop major, minor and micro version.
 | 
			
		||||
@set LIBGTOP_MAJOR_VERSION %LIBGTOP_MAJOR_VERSION%
 | 
			
		||||
@set LIBGTOP_MINOR_VERSION %LIBGTOP_MINOR_VERSION%
 | 
			
		||||
@set LIBGTOP_MICRO_VERSION %LIBGTOP_MICRO_VERSION%
 | 
			
		||||
 | 
			
		||||
@c LibGTop version and numerical version code ("1.234.567" -> 1234567).
 | 
			
		||||
@set LIBGTOP_VERSION "%LIBGTOP_VERSION%"
 | 
			
		||||
@set LIBGTOP_VERSION_CODE %LIBGTOP_VERSION_CODE%
 | 
			
		||||
 | 
			
		||||
@c LibGTop server version, increased each time the protocol changes.
 | 
			
		||||
@set LIBGTOP_SERVER_VERSION %LIBGTOP_SERVER_VERSION%
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										107
									
								
								doc/internals.texi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								doc/internals.texi
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
@node LibGTop Internals, , Reference Manual, Top
 | 
			
		||||
@chapter LibGTop Internals
 | 
			
		||||
 | 
			
		||||
@menu
 | 
			
		||||
* General Internals::           General Internals
 | 
			
		||||
* Sysdeps Internals::           Sysdeps Internals
 | 
			
		||||
@end menu
 | 
			
		||||
 | 
			
		||||
@node General Internals, Sysdeps Internals, LibGTop Internals, LibGTop Internals
 | 
			
		||||
@section General Internals
 | 
			
		||||
 | 
			
		||||
@menu
 | 
			
		||||
* glibtop::                     The server structure
 | 
			
		||||
@end menu
 | 
			
		||||
 | 
			
		||||
@node glibtop,  , General Internals, General Internals
 | 
			
		||||
@subsection The server structure - @code{glibtop}
 | 
			
		||||
 | 
			
		||||
@example
 | 
			
		||||
@cartouche
 | 
			
		||||
typedef struct _glibtop         glibtop;
 | 
			
		||||
 | 
			
		||||
struct _glibtop
 | 
			
		||||
@{
 | 
			
		||||
        unsigned flags;
 | 
			
		||||
        unsigned method;
 | 
			
		||||
        unsigned error_method;
 | 
			
		||||
#ifdef HAVE_GLIBTOP_MACHINE_H
 | 
			
		||||
        glibtop_machine machine;
 | 
			
		||||
#endif
 | 
			
		||||
        int input [2];
 | 
			
		||||
        int output [2];
 | 
			
		||||
        int socket;
 | 
			
		||||
        int ncpu;
 | 
			
		||||
        unsigned long os_version_code;
 | 
			
		||||
        const char *name;
 | 
			
		||||
        const char *server_command;
 | 
			
		||||
        const char *server_host;
 | 
			
		||||
        const char *server_user;
 | 
			
		||||
        const char *server_rsh;
 | 
			
		||||
        unsigned long features;
 | 
			
		||||
        unsigned long server_port;
 | 
			
		||||
        glibtop_sysdeps sysdeps;
 | 
			
		||||
        glibtop_sysdeps required;
 | 
			
		||||
        glibtop_sysdeps wanted;
 | 
			
		||||
        pid_t pid;
 | 
			
		||||
@};
 | 
			
		||||
@end cartouche
 | 
			
		||||
@end example
 | 
			
		||||
 | 
			
		||||
@node Sysdeps Internals,  , General Internals, LibGTop Internals
 | 
			
		||||
@section Sysdeps Internals
 | 
			
		||||
 | 
			
		||||
@menu
 | 
			
		||||
* glibtop_open_s::              Non-privileged initializations
 | 
			
		||||
* glibtop_close_s::             Non-privileged cleanups
 | 
			
		||||
@end menu
 | 
			
		||||
 | 
			
		||||
@node glibtop_open_s, glibtop_close_s, Sysdeps Internals, Sysdeps Internals
 | 
			
		||||
@subsection glibtop_open_s
 | 
			
		||||
 | 
			
		||||
This function is used in the non-suid sysdeps library @samp{-lgtop_sysdeps} to
 | 
			
		||||
initialize a server. It should do all initializations that do not need any
 | 
			
		||||
privileges.
 | 
			
		||||
 | 
			
		||||
@example
 | 
			
		||||
@cartouche
 | 
			
		||||
void
 | 
			
		||||
glibtop_open_s (glibtop *server, const char *program_name,
 | 
			
		||||
		const unsigned long features,
 | 
			
		||||
		const unsigned flags);
 | 
			
		||||
@end cartouche
 | 
			
		||||
@end example
 | 
			
		||||
 | 
			
		||||
@table @code
 | 
			
		||||
@item server
 | 
			
		||||
Pointer to the @code{glibtop} server structure.
 | 
			
		||||
@item program_name
 | 
			
		||||
Name of the calling program; the implementation will usually
 | 
			
		||||
set @samp{server->name} to this so it'll be used as the program
 | 
			
		||||
name in error messages.
 | 
			
		||||
@end table
 | 
			
		||||
 | 
			
		||||
Typically, this function will set @code{server->name}, @code{server->ncpu} and
 | 
			
		||||
@code{server->os_version_code} and initialize any of the @code{server->machine}
 | 
			
		||||
fields which do not need any privileges.
 | 
			
		||||
 | 
			
		||||
It is normally implemented in @file{open.c} in the sysdeps directory.
 | 
			
		||||
 | 
			
		||||
@node glibtop_close_s,  , glibtop_open_s, Sysdeps Internals
 | 
			
		||||
@subsection glibtop_close_s
 | 
			
		||||
 | 
			
		||||
This function is used in the non-suid sysdeps library @samp{-lgtop_sysdeps} to
 | 
			
		||||
clean-up a server when it's no longer used.
 | 
			
		||||
 | 
			
		||||
It must free all resources that were allocated in @code{glibtop_open_s}.
 | 
			
		||||
 | 
			
		||||
@example
 | 
			
		||||
@cartouche
 | 
			
		||||
void
 | 
			
		||||
glibtop_close_s (glibtop *server);
 | 
			
		||||
@end cartouche
 | 
			
		||||
@end example
 | 
			
		||||
 | 
			
		||||
It is normally implemented in @file{close.c} in the sysdeps directory, but may
 | 
			
		||||
be empty.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										89
									
								
								doc/libgtop.texi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								doc/libgtop.texi
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
\input texinfo   @c -*-texinfo-*-
 | 
			
		||||
@c %**start of header
 | 
			
		||||
@setfilename libgtop.info
 | 
			
		||||
@settitle LibGTop Reference Manual
 | 
			
		||||
@setchapternewpage odd
 | 
			
		||||
@c %**end of header
 | 
			
		||||
 | 
			
		||||
@include auto-macros.texi
 | 
			
		||||
@include version.texi
 | 
			
		||||
 | 
			
		||||
@ifinfo
 | 
			
		||||
This is the LibGTop Reference Manual version @value{VERSION}
 | 
			
		||||
(last modified @value{UPDATED}).
 | 
			
		||||
 | 
			
		||||
Copyright 1999 Free Software Foundation, Inc.
 | 
			
		||||
     
 | 
			
		||||
Permission is granted to make and distribute verbatim
 | 
			
		||||
copies of this manual provided the copyright notice and
 | 
			
		||||
this permission notice are preserved on all copies.
 | 
			
		||||
     
 | 
			
		||||
@ignore
 | 
			
		||||
Permission is granted to process this file through TeX
 | 
			
		||||
and print the results, provided the printed document
 | 
			
		||||
carries a copying permission notice identical to this
 | 
			
		||||
one except for the removal of this paragraph (this
 | 
			
		||||
paragraph not being relevant to the printed manual).
 | 
			
		||||
     
 | 
			
		||||
@end ignore
 | 
			
		||||
Permission is granted to copy and distribute modified
 | 
			
		||||
versions of this manual under the conditions for
 | 
			
		||||
verbatim copying, provided also that the sections
 | 
			
		||||
entitled ``Copying'' and ``GNU General Public License''
 | 
			
		||||
are included exactly as in the original, and provided
 | 
			
		||||
that the entire resulting derived work is distributed
 | 
			
		||||
under the terms of a permission notice identical to this
 | 
			
		||||
one.
 | 
			
		||||
     
 | 
			
		||||
Permission is granted to copy and distribute
 | 
			
		||||
translations of this manual into another language,
 | 
			
		||||
under the above conditions for modified versions,
 | 
			
		||||
except that this permission notice may be stated in a
 | 
			
		||||
translation approved by the Free Software Foundation.
 | 
			
		||||
 | 
			
		||||
@format
 | 
			
		||||
@dircategory Libraries:
 | 
			
		||||
@direntry
 | 
			
		||||
* libgtop: (libgtop).			Library to get system specific data
 | 
			
		||||
					such as cpu and memory usage, active
 | 
			
		||||
					processes
 | 
			
		||||
@end direntry
 | 
			
		||||
@end format
 | 
			
		||||
 | 
			
		||||
@end ifinfo
 | 
			
		||||
 | 
			
		||||
@titlepage
 | 
			
		||||
@title LibGTop Reference Manual
 | 
			
		||||
@subtitle Version @value{VERSION} - @value{UPDATED}
 | 
			
		||||
@author Martin Baulig
 | 
			
		||||
 | 
			
		||||
@page
 | 
			
		||||
@vskip 0pt plus 1filll
 | 
			
		||||
Copyright @copyright{} 1999 Free Software Foundation, Inc.
 | 
			
		||||
 | 
			
		||||
Permission is granted to make and distribute verbatim
 | 
			
		||||
copies of this manual provided the copyright notice and
 | 
			
		||||
this permission notice are preserved on all copies.
 | 
			
		||||
     
 | 
			
		||||
Permission is granted to copy and distribute modified
 | 
			
		||||
versions of this manual under the conditions for
 | 
			
		||||
verbatim copying, provided also that the sections
 | 
			
		||||
entitled ``Copying'' and ``GNU General Public License''
 | 
			
		||||
are included exactly as in the original, and provided
 | 
			
		||||
that the entire resulting derived work is distributed
 | 
			
		||||
under the terms of a permission notice identical to this
 | 
			
		||||
one.
 | 
			
		||||
     
 | 
			
		||||
Permission is granted to copy and distribute
 | 
			
		||||
translations of this manual into another language,
 | 
			
		||||
under the above conditions for modified versions,
 | 
			
		||||
except that this permission notice may be stated in a
 | 
			
		||||
translation approved by the Free Software Foundation.
 | 
			
		||||
@end titlepage
 | 
			
		||||
 | 
			
		||||
@contents
 | 
			
		||||
 | 
			
		||||
@include main.texi
 | 
			
		||||
 | 
			
		||||
@bye
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										85
									
								
								doc/main.texi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								doc/main.texi
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
@node Top, About, (dir), (dir)
 | 
			
		||||
 | 
			
		||||
@menu
 | 
			
		||||
* About::                       About LibGTop
 | 
			
		||||
* White Paper::                 LibGTop White Paper
 | 
			
		||||
* Reference Manual::            LibGTop Reference Manual
 | 
			
		||||
* LibGTop Internals::           LibGTop Internals
 | 
			
		||||
 | 
			
		||||
 --- The Detailed Node Listing ---
 | 
			
		||||
 | 
			
		||||
About LibGTop
 | 
			
		||||
 | 
			
		||||
* Availability::                Where to get LibGTop
 | 
			
		||||
* Supported Platforms::         Supported Platforms
 | 
			
		||||
* Mailing List::                Helping with LibGTop development
 | 
			
		||||
* Thanks::                      People who contributed to LibGTop
 | 
			
		||||
 | 
			
		||||
LibGTop White Paper
 | 
			
		||||
 | 
			
		||||
* Introduction::                Introduction
 | 
			
		||||
* Overview::                    Overview
 | 
			
		||||
* Servers and Daemons::         Servers and Daemons
 | 
			
		||||
 | 
			
		||||
Overview
 | 
			
		||||
 | 
			
		||||
* Interface Design::            Things that need to be considered
 | 
			
		||||
* Server Implementation::       The LibGTop "server"
 | 
			
		||||
 | 
			
		||||
LibGTop Reference Manual
 | 
			
		||||
 | 
			
		||||
* System Dependent::            System Dependent Functions.
 | 
			
		||||
* Common Functions::            Common Functions.
 | 
			
		||||
* Library Functions::           Library Functions.
 | 
			
		||||
 | 
			
		||||
System Dependent Functions
 | 
			
		||||
 | 
			
		||||
* glibtop_cpu::                 CPU Usage.
 | 
			
		||||
* glibtop_mem::                 Memory Usage.
 | 
			
		||||
* glibtop_swap::                Swap Usage.
 | 
			
		||||
* glibtop_uptime::              System Uptime.
 | 
			
		||||
* glibtop_loadavg::             Load Average.
 | 
			
		||||
* glibtop_proclist::            Process List.
 | 
			
		||||
* glibtop_proc_state::          Process State.
 | 
			
		||||
* glibtop_proc_uid::            Process UID and TTY Information.
 | 
			
		||||
* glibtop_proc_mem::            Process Memory Information.
 | 
			
		||||
* glibtop_proc_time::           Process Time Information.
 | 
			
		||||
* glibtop_proc_signal::         Process Signal Information.
 | 
			
		||||
* glibtop_proc_kernel::         Process Kernel Data Information.
 | 
			
		||||
* glibtop_proc_segment::        Process Segment Information.
 | 
			
		||||
* glibtop_proc_args::           Process Arguments.
 | 
			
		||||
* glibtop_proc_map::            Process Memory Maps.
 | 
			
		||||
* glibtop_netload::             Network Load.
 | 
			
		||||
* glibtop_ppp::                 PPP Usage.
 | 
			
		||||
 | 
			
		||||
Common Functions
 | 
			
		||||
 | 
			
		||||
* glibtop_mountlist::           Mount List.
 | 
			
		||||
* glibtop_fsusage::             File System Usage.
 | 
			
		||||
 | 
			
		||||
Library Functions
 | 
			
		||||
 | 
			
		||||
* glibtop_init::                Server Initialization.
 | 
			
		||||
* glibtop_sysdeps::             Server Sysdeps.
 | 
			
		||||
* Library Parameters::          Library Parameters.
 | 
			
		||||
 | 
			
		||||
LibGTop Internals
 | 
			
		||||
 | 
			
		||||
* General Internals::           General Internals
 | 
			
		||||
* Sysdeps Internals::           Sysdeps Internals
 | 
			
		||||
 | 
			
		||||
General Internals
 | 
			
		||||
 | 
			
		||||
* glibtop::                     The server structure
 | 
			
		||||
 | 
			
		||||
Sysdeps Internals
 | 
			
		||||
 | 
			
		||||
* glibtop_open_s::              Non-privileged initializations
 | 
			
		||||
* glibtop_close_s::             Non-privileged cleanups
 | 
			
		||||
@end menu
 | 
			
		||||
 | 
			
		||||
@include about.texi
 | 
			
		||||
@include white-paper.texi
 | 
			
		||||
@include reference.texi
 | 
			
		||||
@include internals.texi
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1807
									
								
								doc/reference.texi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1807
									
								
								doc/reference.texi
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										136
									
								
								doc/white-paper.texi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								doc/white-paper.texi
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,136 @@
 | 
			
		||||
@node White Paper, Reference Manual, About, Top
 | 
			
		||||
@chapter LibGTop White Paper
 | 
			
		||||
 | 
			
		||||
@menu
 | 
			
		||||
* Introduction::                Introduction
 | 
			
		||||
* Overview::                    Overview
 | 
			
		||||
* Servers and Daemons::         Servers and Daemons
 | 
			
		||||
@end menu
 | 
			
		||||
 | 
			
		||||
@node Introduction, Overview, White Paper, White Paper
 | 
			
		||||
@section Introduction
 | 
			
		||||
 | 
			
		||||
Many modern UNIX systems like Solaris, BSD or Digitial Unix only allow
 | 
			
		||||
priviledged processes to read information like CPU and Memory Usage or
 | 
			
		||||
information about running processes.
 | 
			
		||||
 | 
			
		||||
@itemize @bullet
 | 
			
		||||
@item
 | 
			
		||||
BSD, for instance, doesn't have any other way to get those data than reading
 | 
			
		||||
directly from @file{/dev/kmem} and you need to be in the @code{kmem} group to
 | 
			
		||||
be able to read this.
 | 
			
		||||
 | 
			
		||||
@item
 | 
			
		||||
Other systems, like Digital Unix, allow all users to get things like CPU and
 | 
			
		||||
Memory statistics, but only root may read information about any process other
 | 
			
		||||
than the current one (you may not even get information about your own processes
 | 
			
		||||
if you're not root).
 | 
			
		||||
 | 
			
		||||
@item
 | 
			
		||||
Linux has a very nice @file{/proc} filesystem, but reading and parsing
 | 
			
		||||
@file{/proc} is very slow and inefficient.
 | 
			
		||||
 | 
			
		||||
@item
 | 
			
		||||
Solaris is a bit better, but you still need to be in the @code{sys} group or
 | 
			
		||||
even root to get some data.
 | 
			
		||||
@end itemize
 | 
			
		||||
 | 
			
		||||
Because of this system utilities like @code{ps}, @code{uptime} or @code{top}
 | 
			
		||||
often are setgid kmem or setuid root. Usually, they're also very specific to
 | 
			
		||||
the system they're written for and not easily portable to other systems without
 | 
			
		||||
a lot of work.
 | 
			
		||||
 | 
			
		||||
This, of cause, becomes a problem for graphical tools like @code{gtop} - making
 | 
			
		||||
a GTK+ program setgid or even setuid would be a security hole as big as you can
 | 
			
		||||
drive the entire X11 source code through. For the GNOME project, we also needed
 | 
			
		||||
some kind of library which provides all the required information in a portable
 | 
			
		||||
since there's more than just one single program that wants to use them - for
 | 
			
		||||
instance @code{gtop} and the @code{multiload}, @code{cpumemusage} and
 | 
			
		||||
@code{netload} panel applets.
 | 
			
		||||
 | 
			
		||||
@node Overview, Servers and Daemons, Introduction, White Paper
 | 
			
		||||
@section Overview
 | 
			
		||||
 | 
			
		||||
This section should give you a short overview on how LibGTop was developed, which
 | 
			
		||||
things needed to be considered and how it works.
 | 
			
		||||
 | 
			
		||||
@menu
 | 
			
		||||
* Interface Design::            Things that need to be considered
 | 
			
		||||
* Server Implementation::       The LibGTop "server"
 | 
			
		||||
@end menu
 | 
			
		||||
 | 
			
		||||
@node Interface Design, Server Implementation, Overview, Overview
 | 
			
		||||
@subsection Interface Design
 | 
			
		||||
 | 
			
		||||
At the very beginning, it was necessary to collect all the data the library part
 | 
			
		||||
should provide and put them into some C structures. This was not that easiy as it
 | 
			
		||||
might sound since LibGTop should be portable to any modern UNIX system with a common
 | 
			
		||||
library part on all those systems, but the data that should be returned vary from
 | 
			
		||||
system to system. For instance some systems support shared memory, but some others
 | 
			
		||||
may not.
 | 
			
		||||
 | 
			
		||||
The header files where we define these C structures (which are system-independent) are
 | 
			
		||||
shared between client and server. This way we can call the system dependent code
 | 
			
		||||
directly where we do not need any special privileges to do so.
 | 
			
		||||
 | 
			
		||||
All of those structures contain a @code{flags} member which is interpreted as a bit
 | 
			
		||||
mask and tells the caller of the library functions which of the fields in the returned
 | 
			
		||||
structure are valid and which are not.
 | 
			
		||||
 | 
			
		||||
@node Server Implementation,  , Interface Design, Overview
 | 
			
		||||
@subsection Server Implementation
 | 
			
		||||
 | 
			
		||||
The LibGTop @dfn{server} is a setgid/setuid binary which contains all the system
 | 
			
		||||
dependent code which needs special privileges. It is only build if it's required
 | 
			
		||||
on the current system (for instance, the Linux kernel provides all the required
 | 
			
		||||
data via its @file{/proc} filesystem so we do not need the server at all) and it
 | 
			
		||||
only contains the @dfn{features} which need privileges.
 | 
			
		||||
 | 
			
		||||
Whenever we do not need any privileges to get all the data for some of the requested
 | 
			
		||||
structures (here called @dfn{features}) the library calls the sysdeps code directly
 | 
			
		||||
rather than using the server.
 | 
			
		||||
 | 
			
		||||
@node Servers and Daemons,  , Overview, White Paper
 | 
			
		||||
@section Servers and Daemons
 | 
			
		||||
 | 
			
		||||
LibGTop gives you the possibility to use different LibGTop "servers" and
 | 
			
		||||
"daemons" in your application.
 | 
			
		||||
 | 
			
		||||
Normally you do not need to worry about this things since LibGTop auto-
 | 
			
		||||
matically opens a pipe to its server it it's required, but this can also
 | 
			
		||||
be customized to fit your needs.
 | 
			
		||||
 | 
			
		||||
For instance if you have a small applet which is only interested in disk
 | 
			
		||||
usage there's no need to fork a separate server process since you don't
 | 
			
		||||
need any privileges to get them on any of the supported systems. This can
 | 
			
		||||
be archieved with a special call to @code{glibtop_init_r} on startup.
 | 
			
		||||
 | 
			
		||||
There's also an option to tell @code{glibtop_init_r} that you're only
 | 
			
		||||
interested in several features - for instance cpu and memory usage. In
 | 
			
		||||
this case LibGTop will only fork a server process if it's required to get
 | 
			
		||||
cpu and memory.
 | 
			
		||||
 | 
			
		||||
You can also tell @code{glibtop_init_r} to start the server only on demand,
 | 
			
		||||
this might become useful in command-line based programs. For graphical
 | 
			
		||||
applications it's normally best to start the server directly during their
 | 
			
		||||
initialization. The same applies for any time critical applications (since
 | 
			
		||||
@code{fork} is an expensive operation on some systems this may lead to
 | 
			
		||||
incorrect statistics).
 | 
			
		||||
 | 
			
		||||
LibGTop also allows you to talk to a remote machine using the
 | 
			
		||||
@dfn{LibGTop daemon}. This daemon is based on @code{gnuserv} from
 | 
			
		||||
GNU Emacs and should be run as an unprivileged user. It has support
 | 
			
		||||
for either @code{xauth} or host based authorization.
 | 
			
		||||
 | 
			
		||||
This daemon itself behaves like a LibGTop client application, i.e. it
 | 
			
		||||
forks a server process if this is required.
 | 
			
		||||
 | 
			
		||||
The main use for this daemon is when you want to monitor a machine which
 | 
			
		||||
is either very slow or has very low disk space. In this case you don't need
 | 
			
		||||
to install the whole client application (for instance GTop) on the remote
 | 
			
		||||
machine but only a very small (maybe also statically linked) executable and
 | 
			
		||||
run the graphical application on a more powerful machine.
 | 
			
		||||
 | 
			
		||||
It can also be used to monitor a remote machine over a very slow link such
 | 
			
		||||
as a dialup connection since the conversation between LibGTop client and
 | 
			
		||||
daemon uses much less bandwith than an ordinary X11 connection.
 | 
			
		||||
@@ -11,4 +11,6 @@ third_linux
 | 
			
		||||
third_static
 | 
			
		||||
second_static
 | 
			
		||||
second_linux
 | 
			
		||||
smp_static sysdeps_static netload_static procmap_static mountlist_static
 | 
			
		||||
smp sysdeps netload procmap mountlist
 | 
			
		||||
timings timings_static
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,33 @@
 | 
			
		||||
1999-05-28  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* first.c, second.c, sysdeps.c: Use LibGTop version conditionals
 | 
			
		||||
 	so we can more easily merge the code into LIBGTOP_STABLE_1_0.
 | 
			
		||||
 | 
			
		||||
1999-05-08  Drazen Kacar  <dave@srce.hr>
 | 
			
		||||
 | 
			
		||||
	* mountlist.c: Changed pfintf formats to "%lld" when printing
 | 
			
		||||
	u_int64_t. This is still utterly unportable, but will
 | 
			
		||||
	hopefully work on all supported architectures. For now.
 | 
			
		||||
 | 
			
		||||
1999-05-07  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* timings.c (timersub): Renamed this to `libgtop_timersub' and define
 | 
			
		||||
	it on all systems.
 | 
			
		||||
 | 
			
		||||
Fri Apr  9 00:14:52 1999 Timur Bakeyev  <timur@gnu.org>
 | 
			
		||||
 | 
			
		||||
	* timings.c: Added timersub defenition, to make code compilable on 
 | 
			
		||||
	BSDI.
 | 
			
		||||
 | 
			
		||||
1999-03-24  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* timings.c: New example.
 | 
			
		||||
 | 
			
		||||
1999-03-17  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* first.c, second.c: Fixed a bug that caused a core dump when
 | 
			
		||||
	the sysdeps code does not return all data.
 | 
			
		||||
 | 
			
		||||
1998-11-22  Martin Baulig  <baulig@taurus.uni-trier.de>
 | 
			
		||||
 | 
			
		||||
	* netload.c: Call inet_ntoa () to get address and subnet
 | 
			
		||||
 
 | 
			
		||||
@@ -12,13 +12,14 @@ DEFS			= @DEFS@
 | 
			
		||||
libgtopdir		= $(libexecdir)/libgtop
 | 
			
		||||
 | 
			
		||||
libgtop_PROGRAMS	= first second\
 | 
			
		||||
			  mountlist procmap netload sysdeps\
 | 
			
		||||
			  mountlist procmap netload sysdeps timings \
 | 
			
		||||
			  @static_targets@ @guile_examples@ @smp_examples@
 | 
			
		||||
 | 
			
		||||
EXTRA_PROGRAMS		= first_static second_static \
 | 
			
		||||
			  mountlist_static procmap_static \
 | 
			
		||||
			  third third_static smp smp_static \
 | 
			
		||||
			  netload_static sysdeps_static
 | 
			
		||||
			  netload_static sysdeps_static \
 | 
			
		||||
			  timings_static
 | 
			
		||||
 | 
			
		||||
first_SOURCES		= first.c
 | 
			
		||||
first_LDADD		= $(top_builddir)/lib/libgtop.la \
 | 
			
		||||
@@ -108,3 +109,13 @@ smp_static_SOURCES	= $(smp_SOURCES)
 | 
			
		||||
smp_static_LDADD	= $(smp_LDADD)
 | 
			
		||||
smp_static_LDFLAGS	= -static
 | 
			
		||||
 | 
			
		||||
timings_SOURCES		= timings.c
 | 
			
		||||
timings_LDADD		= $(top_builddir)/lib/libgtop.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/common/libgtop_common.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
 | 
			
		||||
			  @LIBSUPPORT@ @INTLLIBS@
 | 
			
		||||
 | 
			
		||||
timings_static_SOURCES	= $(timings_SOURCES)
 | 
			
		||||
timings_static_LDADD	= $(timings_LDADD)
 | 
			
		||||
timings_static_LDFLAGS	= -static
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										250
									
								
								examples/first.c
									
									
									
									
									
								
							
							
						
						
									
										250
									
								
								examples/first.c
									
									
									
									
									
								
							@@ -116,9 +116,16 @@ main (int argc, char *argv [])
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_uptime (&data.uptime);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Uptime       (0x%08lx): %f, %f, %lu\n",
 | 
			
		||||
		(unsigned long) data.uptime.flags,
 | 
			
		||||
		data.uptime.uptime, data.uptime.idletime,
 | 
			
		||||
		(unsigned long) data.uptime.boot_time);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Uptime       (0x%08lx): %f, %f\n",
 | 
			
		||||
		(unsigned long) data.uptime.flags,
 | 
			
		||||
		data.uptime.uptime, data.uptime.idletime);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_loadavg (&data.loadavg);
 | 
			
		||||
@@ -242,15 +249,52 @@ main (int argc, char *argv [])
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_state (&data.proc_state, pid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_State   PID  %5d (0x%08lx): '%s', %u - "
 | 
			
		||||
		"%u, %u, %u, %u - %u, %u, %u\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		data.proc_state.uid, data.proc_state.gid,
 | 
			
		||||
		data.proc_state.ruid, data.proc_state.rgid,
 | 
			
		||||
		data.proc_state.has_cpu, data.proc_state.processor,
 | 
			
		||||
		data.proc_state.last_processor);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_State   PID  %5d (0x%08lx): '%s', %c, %lu, %lu\n",
 | 
			
		||||
		(int) pid, (unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		(unsigned long) data.proc_state.uid,
 | 
			
		||||
		(unsigned long) data.proc_state.gid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_uid (&data.proc_uid, pid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Uid     PID  %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d - %d",
 | 
			
		||||
		(int) pid, (unsigned long) data.proc_uid.flags,
 | 
			
		||||
		data.proc_uid.uid, data.proc_uid.euid,
 | 
			
		||||
		data.proc_uid.gid, data.proc_uid.egid,
 | 
			
		||||
		data.proc_uid.suid, data.proc_uid.sgid,
 | 
			
		||||
		data.proc_uid.fsuid, data.proc_uid.fsgid,
 | 
			
		||||
		data.proc_uid.pid, data.proc_uid.ppid,
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice,
 | 
			
		||||
		data.proc_uid.ngroups);
 | 
			
		||||
 | 
			
		||||
	if (data.proc_uid.ngroups) {
 | 
			
		||||
		for (i = 0; i < data.proc_uid.ngroups; i++) {
 | 
			
		||||
			if (i)
 | 
			
		||||
				printf (" %d", data.proc_uid.groups [i]);
 | 
			
		||||
			else
 | 
			
		||||
				printf (" (%d", data.proc_uid.groups [i]);
 | 
			
		||||
		}
 | 
			
		||||
		printf (")");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Uid     PID  %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_uid.flags,
 | 
			
		||||
@@ -260,6 +304,7 @@ main (int argc, char *argv [])
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_mem (&data.proc_mem, pid);
 | 
			
		||||
@@ -277,6 +322,30 @@ main (int argc, char *argv [])
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_segment (&data.proc_segment, pid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Segment PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
		(unsigned long) data.proc_segment.text_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.shlib_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.data_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.stack_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.dirty_size,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_mmap,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_end,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_end);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Segment PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
@@ -288,6 +357,7 @@ main (int argc, char *argv [])
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_time (&data.proc_time, pid);
 | 
			
		||||
@@ -308,6 +378,19 @@ main (int argc, char *argv [])
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_signal (&data.proc_signal, pid);
 | 
			
		||||
	
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Signal  PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lx %lx %lx %lx %lx %lx %lx %lx\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [1]);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Signal  PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_signal.flags,
 | 
			
		||||
@@ -315,12 +398,13 @@ main (int argc, char *argv [])
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_kernel (&data.proc_kernel, pid);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Kernel  PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu (%s)\n", (int) pid,
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx (%s)\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_kernel.flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.k_flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.min_flt,
 | 
			
		||||
@@ -344,7 +428,7 @@ main (int argc, char *argv [])
 | 
			
		||||
	printf ("Proc_Args    PID  %5d (0x%08lx): %lu - '%s'\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_args.flags,
 | 
			
		||||
		(unsigned long) data.proc_args.size,
 | 
			
		||||
		args);
 | 
			
		||||
		args ? args : "");
 | 
			
		||||
 | 
			
		||||
	glibtop_free (args);
 | 
			
		||||
 | 
			
		||||
@@ -353,15 +437,52 @@ main (int argc, char *argv [])
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_state (&data.proc_state, ppid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_State   PPID %5d (0x%08lx): '%s', %u - "
 | 
			
		||||
		"%u, %u, %u, %u - %u, %u, %u\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		data.proc_state.uid, data.proc_state.gid,
 | 
			
		||||
		data.proc_state.ruid, data.proc_state.rgid,
 | 
			
		||||
		data.proc_state.has_cpu, data.proc_state.processor,
 | 
			
		||||
		data.proc_state.last_processor);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_State   PPID %5d (0x%08lx): '%s', %c, %lu, %lu\n",
 | 
			
		||||
		(int) ppid, (unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		(unsigned long) data.proc_state.uid,
 | 
			
		||||
		(unsigned long) data.proc_state.gid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_uid (&data.proc_uid, ppid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Uid     PPID %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d - %d",
 | 
			
		||||
		(int) ppid, (unsigned long) data.proc_uid.flags,
 | 
			
		||||
		data.proc_uid.uid, data.proc_uid.euid,
 | 
			
		||||
		data.proc_uid.gid, data.proc_uid.egid,
 | 
			
		||||
		data.proc_uid.suid, data.proc_uid.sgid,
 | 
			
		||||
		data.proc_uid.fsuid, data.proc_uid.fsgid,
 | 
			
		||||
		data.proc_uid.pid, data.proc_uid.ppid,
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice,
 | 
			
		||||
		data.proc_uid.ngroups);
 | 
			
		||||
 | 
			
		||||
	if (data.proc_uid.ngroups) {
 | 
			
		||||
		for (i = 0; i < data.proc_uid.ngroups; i++) {
 | 
			
		||||
			if (i)
 | 
			
		||||
				printf (" %d", data.proc_uid.groups [i]);
 | 
			
		||||
			else
 | 
			
		||||
				printf (" (%d", data.proc_uid.groups [i]);
 | 
			
		||||
		}
 | 
			
		||||
		printf (")");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Uid     PPID %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_uid.flags,
 | 
			
		||||
@@ -371,6 +492,7 @@ main (int argc, char *argv [])
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_mem (&data.proc_mem, ppid);
 | 
			
		||||
@@ -388,6 +510,30 @@ main (int argc, char *argv [])
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_segment (&data.proc_segment, ppid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Segment PPID %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
		(unsigned long) data.proc_segment.text_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.shlib_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.data_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.stack_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.dirty_size,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_mmap,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_end,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_end);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Segment PPID %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
@@ -399,6 +545,7 @@ main (int argc, char *argv [])
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_time (&data.proc_time, ppid);
 | 
			
		||||
@@ -419,18 +566,32 @@ main (int argc, char *argv [])
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_signal (&data.proc_signal, ppid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Signal  PPID %5d (0x%08lx): "
 | 
			
		||||
		"%lx %lx %lx %lx %lx %lx %lx %lx\n",
 | 
			
		||||
		(int) ppid, (unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [1]);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Signal  PPID %5d (0x%08lx): %lu %lu %lu %lu\n",
 | 
			
		||||
		(int) ppid, (unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal,
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_kernel (&data.proc_kernel, ppid);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Kernel  PPID %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu (%s)\n", (int) ppid,
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx (%s)\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_kernel.flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.k_flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.min_flt,
 | 
			
		||||
@@ -454,7 +615,7 @@ main (int argc, char *argv [])
 | 
			
		||||
	printf ("Proc_Args    PID  %5d (0x%08lx): %lu - '%s'\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_args.flags,
 | 
			
		||||
		(unsigned long) data.proc_args.size,
 | 
			
		||||
		args);
 | 
			
		||||
		args ? args : "");
 | 
			
		||||
 | 
			
		||||
	glibtop_free (args);
 | 
			
		||||
 | 
			
		||||
@@ -463,15 +624,52 @@ main (int argc, char *argv [])
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_state (&data.proc_state, 1);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_State   INIT %5d (0x%08lx): '%s', %u - "
 | 
			
		||||
		"%u, %u, %u, %u - %u, %u, %u\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		data.proc_state.uid, data.proc_state.gid,
 | 
			
		||||
		data.proc_state.ruid, data.proc_state.rgid,
 | 
			
		||||
		data.proc_state.has_cpu, data.proc_state.processor,
 | 
			
		||||
		data.proc_state.last_processor);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_State   INIT %5d (0x%08lx): '%s', %c, %lu, %lu\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		(unsigned long) data.proc_state.uid,
 | 
			
		||||
		(unsigned long) data.proc_state.gid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_uid (&data.proc_uid, 1);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Uid     INIT %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d - %d", 1,
 | 
			
		||||
		(unsigned long) data.proc_uid.flags,
 | 
			
		||||
		data.proc_uid.uid, data.proc_uid.euid,
 | 
			
		||||
		data.proc_uid.gid, data.proc_uid.egid,
 | 
			
		||||
		data.proc_uid.suid, data.proc_uid.sgid,
 | 
			
		||||
		data.proc_uid.fsuid, data.proc_uid.fsgid,
 | 
			
		||||
		data.proc_uid.pid, data.proc_uid.ppid,
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice,
 | 
			
		||||
		data.proc_uid.ngroups);
 | 
			
		||||
 | 
			
		||||
	if (data.proc_uid.ngroups) {
 | 
			
		||||
		for (i = 0; i < data.proc_uid.ngroups; i++) {
 | 
			
		||||
			if (i)
 | 
			
		||||
				printf (" %d", data.proc_uid.groups [i]);
 | 
			
		||||
			else
 | 
			
		||||
				printf (" (%d", data.proc_uid.groups [i]);
 | 
			
		||||
		}
 | 
			
		||||
		printf (")");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Uid     INIT %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_uid.flags,
 | 
			
		||||
@@ -481,6 +679,7 @@ main (int argc, char *argv [])
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_mem (&data.proc_mem, 1);
 | 
			
		||||
@@ -498,6 +697,30 @@ main (int argc, char *argv [])
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_segment (&data.proc_segment, 1);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Segment INIT %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
		(unsigned long) data.proc_segment.text_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.shlib_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.data_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.stack_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.dirty_size,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_mmap,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_end,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_end);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Segment INIT %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
@@ -509,6 +732,7 @@ main (int argc, char *argv [])
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_time (&data.proc_time, 1);
 | 
			
		||||
@@ -529,6 +753,19 @@ main (int argc, char *argv [])
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_signal (&data.proc_signal, 1);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Signal  INIT %5d (0x%08lx): "
 | 
			
		||||
		"%lx %lx %lx %lx %lx %lx %lx %lx\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [1]);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Signal  INIT %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_signal.flags,
 | 
			
		||||
@@ -536,12 +773,13 @@ main (int argc, char *argv [])
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_kernel (&data.proc_kernel, 1);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Kernel  INIT %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu (%s)\n", 1,
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx (%s)\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_kernel.flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.k_flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.min_flt,
 | 
			
		||||
@@ -565,7 +803,7 @@ main (int argc, char *argv [])
 | 
			
		||||
	printf ("Proc_Args    PID  %5d (0x%08lx): %lu - '%s'\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_args.flags,
 | 
			
		||||
		(unsigned long) data.proc_args.size,
 | 
			
		||||
		args);
 | 
			
		||||
		args ? args : "");
 | 
			
		||||
 | 
			
		||||
	glibtop_free (args);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -96,7 +96,7 @@ main (int argc, char *argv [])
 | 
			
		||||
		glibtop_get_fsusage (&fsusage,
 | 
			
		||||
				     mount_entries [index].mountdir);
 | 
			
		||||
 | 
			
		||||
		printf ("Usage: %-16s %9Lu %9Lu %9Lu %9Lu %9Lu\n",
 | 
			
		||||
		printf ("Usage: %-16s %9llu %9llu %9llu %9llu %9llu\n",
 | 
			
		||||
			mount_entries [index].mountdir,
 | 
			
		||||
			fsusage.blocks, fsusage.bfree,
 | 
			
		||||
			fsusage.bavail, fsusage.files,
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@ int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
	glibtop_netload netload;
 | 
			
		||||
	unsigned method, count, port, i;
 | 
			
		||||
	unsigned method, count, port;
 | 
			
		||||
	struct in_addr addr, subnet;
 | 
			
		||||
	char *address_string, *subnet_string;
 | 
			
		||||
	char buffer [BUFSIZ];
 | 
			
		||||
 
 | 
			
		||||
@@ -97,7 +97,7 @@ main (int argc, char *argv [])
 | 
			
		||||
		unsigned device, device_major, device_minor;
 | 
			
		||||
		char perm [5];
 | 
			
		||||
		
 | 
			
		||||
		if (maps [i].flags & (1 << GLIBTOP_MAP_ENTRY_FILENAME))
 | 
			
		||||
		if (maps [i].flags & (1L << GLIBTOP_MAP_ENTRY_FILENAME))
 | 
			
		||||
			filename = maps [i].filename;
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_INODEDB
 | 
			
		||||
@@ -116,24 +116,41 @@ main (int argc, char *argv [])
 | 
			
		||||
		device_minor = (device & 255);
 | 
			
		||||
		device_major = ((device >> 8) & 255);
 | 
			
		||||
 | 
			
		||||
		if (filename)
 | 
			
		||||
			fprintf (stderr, "%08lx-%08lx %08lx - "
 | 
			
		||||
				 "%02x:%02x %08lu - %4s - %s\n",
 | 
			
		||||
		if (filename) {
 | 
			
		||||
			char *format;
 | 
			
		||||
 | 
			
		||||
			if (sizeof (void*) == 8)
 | 
			
		||||
				format = "%016lx-%016lx %016lx - "
 | 
			
		||||
					 "%02x:%02x %08lu - %4s - %s\n";
 | 
			
		||||
			else
 | 
			
		||||
				format = "%08lx-%08lx %08lx - "
 | 
			
		||||
					 "%02x:%02x %08lu - %4s - %s\n";
 | 
			
		||||
 | 
			
		||||
			fprintf (stderr, format,
 | 
			
		||||
				 (unsigned long) maps [i].start,
 | 
			
		||||
				 (unsigned long) maps [i].end,
 | 
			
		||||
				 (unsigned long) maps [i].offset,
 | 
			
		||||
				 device_major, device_minor,
 | 
			
		||||
				 (unsigned long) maps [i].inode,
 | 
			
		||||
				 perm, filename);
 | 
			
		||||
		else
 | 
			
		||||
			fprintf (stderr, "%08lx-%08lx %08lx - "
 | 
			
		||||
				 "%02x:%02x %08lu - %4s\n",
 | 
			
		||||
		} else {
 | 
			
		||||
			char * format;
 | 
			
		||||
 | 
			
		||||
			if (sizeof (void*) == 8)
 | 
			
		||||
				format = "%016lx-%016lx %016lx - "
 | 
			
		||||
					 "%02x:%02x %08lu - %4s\n";
 | 
			
		||||
			else
 | 
			
		||||
				format = "%08lx-%08lx %08lx - "
 | 
			
		||||
					 "%02x:%02x %08lu - %4s\n";
 | 
			
		||||
 | 
			
		||||
			fprintf (stderr, format,
 | 
			
		||||
				 (unsigned long) maps [i].start,
 | 
			
		||||
				 (unsigned long) maps [i].end,
 | 
			
		||||
				 (unsigned long) maps [i].offset,
 | 
			
		||||
				 device_major, device_minor,
 | 
			
		||||
				 (unsigned long) maps [i].inode,
 | 
			
		||||
				 perm);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (filename && (filename != maps [i].filename))
 | 
			
		||||
			glibtop_free (filename);
 | 
			
		||||
 
 | 
			
		||||
@@ -31,8 +31,6 @@
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
#include <glibtop/sysdeps.h>
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
output (pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
@@ -52,16 +50,53 @@ output (pid_t pid)
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
		
 | 
			
		||||
	glibtop_get_proc_state (&data.proc_state, pid);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000		
 | 
			
		||||
	printf ("Proc_State   PID  %5d (0x%08lx): '%s', %u - "
 | 
			
		||||
		"%u, %u, %u, %u - %u, %u, %u\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		data.proc_state.uid, data.proc_state.gid,
 | 
			
		||||
		data.proc_state.ruid, data.proc_state.rgid,
 | 
			
		||||
		data.proc_state.has_cpu, data.proc_state.processor,
 | 
			
		||||
		data.proc_state.last_processor);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_State   PID  %5d (0x%08lx): "
 | 
			
		||||
		"'%s', %c, %lu, %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		(unsigned long) data.proc_state.uid,
 | 
			
		||||
		(unsigned long) data.proc_state.gid);
 | 
			
		||||
#endif
 | 
			
		||||
		
 | 
			
		||||
	glibtop_get_proc_uid (&data.proc_uid, pid);
 | 
			
		||||
	
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000	
 | 
			
		||||
	printf ("Proc_Uid     PID  %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d - %d",
 | 
			
		||||
		(int) pid, (unsigned long) data.proc_uid.flags,
 | 
			
		||||
		data.proc_uid.uid, data.proc_uid.euid,
 | 
			
		||||
		data.proc_uid.gid, data.proc_uid.egid,
 | 
			
		||||
		data.proc_uid.suid, data.proc_uid.sgid,
 | 
			
		||||
		data.proc_uid.fsuid, data.proc_uid.fsgid,
 | 
			
		||||
		data.proc_uid.pid, data.proc_uid.ppid,
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice,
 | 
			
		||||
		data.proc_uid.ngroups);
 | 
			
		||||
		
 | 
			
		||||
	if (data.proc_uid.ngroups) {
 | 
			
		||||
		for (i = 0; i < data.proc_uid.ngroups; i++) {
 | 
			
		||||
			if (i)
 | 
			
		||||
				printf (" %d", data.proc_uid.groups [i]);
 | 
			
		||||
			else
 | 
			
		||||
				printf (" (%d", data.proc_uid.groups [i]);
 | 
			
		||||
		}
 | 
			
		||||
		printf (")");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Uid     PID  %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_uid.flags,
 | 
			
		||||
@@ -71,7 +106,8 @@ output (pid_t pid)
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice);
 | 
			
		||||
		
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	glibtop_get_proc_mem (&data.proc_mem, pid);
 | 
			
		||||
		
 | 
			
		||||
	printf ("Proc_Mem     PID  %5d (0x%08lx): "
 | 
			
		||||
@@ -86,6 +122,30 @@ output (pid_t pid)
 | 
			
		||||
		
 | 
			
		||||
	glibtop_get_proc_segment (&data.proc_segment, pid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Segment PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
		(unsigned long) data.proc_segment.text_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.shlib_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.data_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.stack_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.dirty_size,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_mmap,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_end,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_end);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Segment PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
@@ -97,6 +157,7 @@ output (pid_t pid)
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	glibtop_get_proc_time (&data.proc_time, pid);
 | 
			
		||||
		
 | 
			
		||||
@@ -115,6 +176,19 @@ output (pid_t pid)
 | 
			
		||||
 | 
			
		||||
	glibtop_get_proc_signal (&data.proc_signal, pid);
 | 
			
		||||
	
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Signal  PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lx %lx %lx %lx %lx %lx %lx %lx\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [1]);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Signal  PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_signal.flags,
 | 
			
		||||
@@ -122,11 +196,12 @@ output (pid_t pid)
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	glibtop_get_proc_kernel (&data.proc_kernel, pid);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Kernel  PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu (%s)\n", (int) pid,
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx (%s)\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_kernel.flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.k_flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.min_flt,
 | 
			
		||||
@@ -150,7 +225,7 @@ output (pid_t pid)
 | 
			
		||||
	printf ("Proc_Args    PID  %5d (0x%08lx): %lu - '%s'\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_args.flags,
 | 
			
		||||
		(unsigned long) data.proc_args.size,
 | 
			
		||||
		args);
 | 
			
		||||
		args ? args : "");
 | 
			
		||||
 | 
			
		||||
	glibtop_free (args);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -27,8 +27,6 @@
 | 
			
		||||
#include <glibtop/cpu.h>
 | 
			
		||||
#include <glibtop/xmalloc.h>
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
@@ -67,7 +65,7 @@ main (int argc, char *argv [])
 | 
			
		||||
	memset (separator, '-', 91);
 | 
			
		||||
	separator [92] = '\0';
 | 
			
		||||
 | 
			
		||||
	sprintf (buffer, _("Ticks (%d per second):"), frequency);
 | 
			
		||||
	sprintf (buffer, _("Ticks (%ld per second):"), frequency);
 | 
			
		||||
 | 
			
		||||
	printf ("\n\n%-26s %12s %12s %12s %12s %12s\n%s\n", buffer,
 | 
			
		||||
		_("Total"), _("User"), _("Nice"), _("Sys"), _("Idle"), separator);
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
	glibtop_sysdeps sysdeps;
 | 
			
		||||
	unsigned method, count, port, i;
 | 
			
		||||
	unsigned method, count, port;
 | 
			
		||||
	char buffer [BUFSIZ];
 | 
			
		||||
 | 
			
		||||
	count = PROFILE_COUNT;
 | 
			
		||||
@@ -69,10 +69,13 @@ main (int argc, char *argv [])
 | 
			
		||||
 | 
			
		||||
	glibtop_get_sysdeps (&sysdeps);
 | 
			
		||||
 | 
			
		||||
#define FEATURE_CHECK(f) ((sysdeps.features & (1 << GLIBTOP_SYSDEPS_##f##)) ? 1 : 0)
 | 
			
		||||
#define FEATURE_CHECK(f) ((sysdeps.features & (1L << GLIBTOP_SYSDEPS_##f##)) ? 1 : 0)
 | 
			
		||||
 | 
			
		||||
	printf ("Sysdeps (0x%08lx):\n\n"
 | 
			
		||||
		"\tfeatures:\t\t0x%08lx\n\n"
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
		"\tpointer_size:\t\t0x%08lx\n\n"
 | 
			
		||||
#endif
 | 
			
		||||
		"\tcpu:\t\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tmem:\t\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tswap:\t\t%d\t0x%08lx\n\n"
 | 
			
		||||
@@ -97,6 +100,9 @@ main (int argc, char *argv [])
 | 
			
		||||
		"\tppp:\t\t%d\t0x%08lx\n\n",
 | 
			
		||||
		(unsigned long) sysdeps.flags,
 | 
			
		||||
		(unsigned long) sysdeps.features,
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
		(unsigned long) sysdeps.pointer_size,
 | 
			
		||||
#endif
 | 
			
		||||
		FEATURE_CHECK(CPU),
 | 
			
		||||
		(unsigned long) sysdeps.cpu,
 | 
			
		||||
		FEATURE_CHECK(MEM),
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										357
									
								
								examples/timings.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								examples/timings.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,357 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
 | 
			
		||||
 | 
			
		||||
   LibGTop is free software; you can redistribute it and/or modify it
 | 
			
		||||
   under the terms of the GNU General Public License as published by
 | 
			
		||||
   the Free Software Foundation; either version 2 of the License,
 | 
			
		||||
   or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
   LibGTop is distributed in the hope that it will be useful, but WITHOUT
 | 
			
		||||
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 | 
			
		||||
   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 | 
			
		||||
   for more details.
 | 
			
		||||
 | 
			
		||||
   You should have received a copy of the GNU General Public License
 | 
			
		||||
   along with LibGTop; see the file COPYING. If not, write to the
 | 
			
		||||
   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | 
			
		||||
   Boston, MA 02111-1307, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <locale.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/close.h>
 | 
			
		||||
#include <glibtop/xmalloc.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/parameter.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
#include <glibtop/sysdeps.h>
 | 
			
		||||
 | 
			
		||||
#include <sys/times.h>
 | 
			
		||||
#include <sys/resource.h>
 | 
			
		||||
 | 
			
		||||
#ifndef PROFILE_COUNT
 | 
			
		||||
#define PROFILE_COUNT			100000L
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef PROFILE_COUNT_EXPENSIVE
 | 
			
		||||
#define PROFILE_COUNT_EXPENSIVE		10000L
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define ELAPSED_UTIME ((unsigned long) elapsed_utime.tv_sec * 1000000 +	(unsigned long) elapsed_utime.tv_usec)
 | 
			
		||||
#define ELAPSED_STIME ((unsigned long) elapsed_stime.tv_sec * 1000000 + (unsigned long) elapsed_stime.tv_usec)
 | 
			
		||||
 | 
			
		||||
#define libgtop_timeradd(tvp, uvp, vvp)						\
 | 
			
		||||
	do {								\
 | 
			
		||||
		(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec;		\
 | 
			
		||||
		(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec;	\
 | 
			
		||||
		if ((vvp)->tv_usec >= 1000000) {			\
 | 
			
		||||
			(vvp)->tv_sec++;				\
 | 
			
		||||
			(vvp)->tv_usec -= 1000000;			\
 | 
			
		||||
		}							\
 | 
			
		||||
	} while (0)
 | 
			
		||||
#define libgtop_timersub(tvp, uvp, vvp)						\
 | 
			
		||||
	do {								\
 | 
			
		||||
		(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;		\
 | 
			
		||||
		(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;	\
 | 
			
		||||
		if ((vvp)->tv_usec < 0) {				\
 | 
			
		||||
			(vvp)->tv_sec--;				\
 | 
			
		||||
			(vvp)->tv_usec += 1000000;			\
 | 
			
		||||
		}							\
 | 
			
		||||
	} while (0)
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
	glibtop_union data;
 | 
			
		||||
	unsigned c, count, *ptr;
 | 
			
		||||
	struct rusage total_start, total_end;
 | 
			
		||||
	struct rusage rusage_start, rusage_end;
 | 
			
		||||
	struct timeval elapsed_utime, elapsed_stime;
 | 
			
		||||
	pid_t pid;
 | 
			
		||||
 | 
			
		||||
	count = PROFILE_COUNT;
 | 
			
		||||
 | 
			
		||||
	setlocale (LC_ALL, "");
 | 
			
		||||
	bindtextdomain (PACKAGE, GTOPLOCALEDIR);
 | 
			
		||||
	textdomain (PACKAGE);
 | 
			
		||||
 | 
			
		||||
	printf ("%-12s (%-10s): %7s - %9s - %9s\n",
 | 
			
		||||
		"Feature", "Flags", "Count", "utime", "stime");
 | 
			
		||||
	printf ("-------------------------------------------"
 | 
			
		||||
		"---------------\n");
 | 
			
		||||
	
 | 
			
		||||
	glibtop_init_r (&glibtop_global_server, 0, 0);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &total_start);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_cpu (&data.cpu);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("CPU          (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.cpu.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT_EXPENSIVE; c++)
 | 
			
		||||
		glibtop_get_mem (&data.mem);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Memory       (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.mem.flags, PROFILE_COUNT_EXPENSIVE,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT_EXPENSIVE,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT_EXPENSIVE);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT_EXPENSIVE; c++)
 | 
			
		||||
		glibtop_get_swap (&data.swap);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Swap         (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.swap.flags, PROFILE_COUNT_EXPENSIVE,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT_EXPENSIVE,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT_EXPENSIVE);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_uptime (&data.uptime);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Uptime       (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.uptime.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_loadavg (&data.loadavg);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Loadavg      (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.loadavg.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT_EXPENSIVE; c++) {
 | 
			
		||||
		ptr = glibtop_get_proclist (&data.proclist, 0, 0);
 | 
			
		||||
		glibtop_free (ptr);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proclist     (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proclist.flags,
 | 
			
		||||
		PROFILE_COUNT_EXPENSIVE,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT_EXPENSIVE,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT_EXPENSIVE);
 | 
			
		||||
 | 
			
		||||
	pid = getpid ();
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_state (&data.proc_state, pid);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_State   (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_state.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_uid (&data.proc_uid, pid);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Uid     (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_uid.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_mem (&data.proc_mem, pid);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Mem     (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_mem.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_segment (&data.proc_segment, pid);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Segment (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_segment.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_time (&data.proc_time, pid);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Time    (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_time.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_signal (&data.proc_signal, pid);
 | 
			
		||||
	
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Signal  (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_signal.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_kernel (&data.proc_kernel, pid);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Kernel  (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_kernel.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
	
 | 
			
		||||
	getrusage (RUSAGE_SELF, &total_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&total_end.ru_utime, &total_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&total_end.ru_stime, &total_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("-------------------------------------------"
 | 
			
		||||
		"---------------\n");
 | 
			
		||||
 | 
			
		||||
	printf ("%-36s %9lu - %9lu\n\n", "TOTAL",
 | 
			
		||||
		ELAPSED_UTIME, ELAPSED_STIME);
 | 
			
		||||
 | 
			
		||||
	printf ("All timings are in clock ticks "
 | 
			
		||||
		"(1000000 ticks per second).\n\n");
 | 
			
		||||
 | 
			
		||||
	glibtop_close ();
 | 
			
		||||
 | 
			
		||||
	exit (0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								features.def
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								features.def
									
									
									
									
									
								
							@@ -1,19 +1,19 @@
 | 
			
		||||
void|cpu|ulong(total,user,nice,sys,idle,frequency,xcpu_total[4],xcpu_user[4],xcpu_nice[4],xcpu_sys[4],xcpu_idle[4])
 | 
			
		||||
void|cpu|ulong(total,user,nice,sys,idle,frequency,xcpu_total[GLIBTOP_NCPU],xcpu_user[GLIBTOP_NCPU],xcpu_nice[GLIBTOP_NCPU],xcpu_sys[GLIBTOP_NCPU],xcpu_idle[GLIBTOP_NCPU],xcpu_flags)
 | 
			
		||||
void|mem|ulong(total,used,free,shared,buffer,cached,user,locked)
 | 
			
		||||
void|swap|ulong(total,used,free,pagein,pageout)
 | 
			
		||||
void|uptime|double(uptime,idletime)
 | 
			
		||||
void|uptime|double(uptime,idletime):ulong(boot_time)
 | 
			
		||||
void|loadavg|double(loadavg[3]):ulong(nr_running,nr_tasks,last_pid)
 | 
			
		||||
void|shm_limits|ulong(shmmax,shmmin,shmmni,shmseg,shmall)
 | 
			
		||||
void|msg_limits|ulong(msgpool,msgmap,msgmax,msgmnb,msgmni,msgssz,msgtql)
 | 
			
		||||
void|sem_limits|ulong(semmap,semmni,semmns,semmnu,semmsl,semopm,semume,semusz,semvmx,semaem)
 | 
			
		||||
unsigned *|proclist|ulong(number,size,total)|long(which,arg)
 | 
			
		||||
void|proc_state|str(cmd):char(state):ulong(uid,gid)|pid_t(pid)
 | 
			
		||||
void|proc_uid|long(uid,euid,gid,egid,pid,ppid,pgrp,session,tty,tpgid,priority,nice)|pid_t(pid)
 | 
			
		||||
void|proc_state|str(cmd):unsigned(state):ulong(uid,gid,ruid,rgid,has_cpu,processor,last_processor)|pid_t(pid)
 | 
			
		||||
void|proc_uid|long(uid,euid,gid,egid,suid,sgid,fsuid,fsgid,pid,ppid,pgrp,session,tty,tpgid,priority,nice,ngroups,groups[GLIBTOP_MAX_GROUPS])|pid_t(pid)
 | 
			
		||||
void|proc_mem|long(size,vsize,resident,share,rss,rss_rlim)|pid_t(pid)
 | 
			
		||||
void|proc_time|long(start_time,rtime,utime,stime,cutime,cstime,timeout,it_real_value,frequency,xcpu_utime[4],xcpu_stime[4])|pid_t(pid)
 | 
			
		||||
void|proc_time|long(start_time,rtime,utime,stime,cutime,cstime,timeout,it_real_value,frequency,xcpu_utime[GLIBTOP_NCPU],xcpu_stime[GLIBTOP_NCPU],xcpu_flags)|pid_t(pid)
 | 
			
		||||
void|proc_signal|ulong(signal[2],blocked[2],sigignore[2],sigcatch[2])|pid_t(pid)
 | 
			
		||||
void|proc_kernel|ulong(k_flags,min_flt,maj_flt,cmin_flt,cmaj_flt,kstk_esp,kstk_eip,nwchan):str(wchan)|pid_t(pid)
 | 
			
		||||
void|proc_segment|ulong(text_rss,shlib_rss,data_rss,stack_rss,dirty_size,start_code,end_code,start_stack)|pid_t(pid)
 | 
			
		||||
void|proc_segment|ulong(text_rss,shlib_rss,data_rss,stack_rss,dirty_size,start_code,end_code,start_data,end_data,start_brk,end_brk,start_stack,start_mmap,arg_start,arg_end,env_start,env_end)|pid_t(pid)
 | 
			
		||||
char *|proc_args|ulong(size)|pid_t(pid):unsigned(max_len)
 | 
			
		||||
glibtop_map_entry *|proc_map|ulong(number,size,total)|pid_t(pid)
 | 
			
		||||
glibtop_mountentry *|@mountlist|ulong(number,size,total)|int(all_fs)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								glibtop.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								glibtop.h
									
									
									
									
									
								
							@@ -24,7 +24,12 @@
 | 
			
		||||
#ifndef __GLIBTOP_H__
 | 
			
		||||
#define __GLIBTOP_H__
 | 
			
		||||
 | 
			
		||||
#ifndef _IN_LIBGTOP
 | 
			
		||||
#include <glibtop-config.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
#include <glibtop/limits.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop_server.h>
 | 
			
		||||
#include <glibtop/types.h>
 | 
			
		||||
@@ -33,10 +38,6 @@
 | 
			
		||||
#include <glibtop_machine.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef GLIBTOP_MOUNTENTRY_LEN
 | 
			
		||||
#define GLIBTOP_MOUNTENTRY_LEN	79
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop		glibtop;
 | 
			
		||||
 | 
			
		||||
#include <glibtop/sysdeps.h>
 | 
			
		||||
@@ -63,6 +64,7 @@ struct _glibtop
 | 
			
		||||
	unsigned long server_port;	/* Port on which daemon is listening */
 | 
			
		||||
	glibtop_sysdeps sysdeps;	/* Detailed feature list */
 | 
			
		||||
	glibtop_sysdeps required;	/* Required feature list */
 | 
			
		||||
	glibtop_sysdeps wanted;		/* We only want this features */
 | 
			
		||||
	pid_t pid;			/* PID of the server */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,4 +7,5 @@ glibtop_HEADERS		= close.h loadavg.h prockernel.h procstate.h \
 | 
			
		||||
			  procsegment.h read.h sysdeps.h xmalloc.h global.h \
 | 
			
		||||
			  procsignal.h read_data.h union.h types.h gnuserv.h \
 | 
			
		||||
			  parameter.h mountlist.h fsusage.h procmap.h signal.h \
 | 
			
		||||
			  inodedb.h sysinfo.h ppp.h procargs.h netload.h
 | 
			
		||||
			  inodedb.h sysinfo.h ppp.h procargs.h netload.h \
 | 
			
		||||
			  limits.h
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -69,22 +71,22 @@ typedef union  _glibtop_response_union	glibtop_response_union;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_command
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	command;
 | 
			
		||||
	u_int64_t	size, data_size;
 | 
			
		||||
	char		parameter [_GLIBTOP_PARAM_SIZE];
 | 
			
		||||
    u_int64_t	command;
 | 
			
		||||
    u_int64_t	size, data_size;
 | 
			
		||||
    char	parameter [_GLIBTOP_PARAM_SIZE];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
union _glibtop_response_union
 | 
			
		||||
{
 | 
			
		||||
	glibtop_union	data;
 | 
			
		||||
	glibtop_sysdeps	sysdeps;
 | 
			
		||||
    glibtop_union	data;
 | 
			
		||||
    glibtop_sysdeps	sysdeps;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_response
 | 
			
		||||
{
 | 
			
		||||
	int64_t offset;
 | 
			
		||||
	u_int64_t size, data_size;
 | 
			
		||||
	glibtop_response_union u;
 | 
			
		||||
    int64_t offset;
 | 
			
		||||
    u_int64_t size, data_size;
 | 
			
		||||
    glibtop_response_union u;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_call(p1, p2, p3, p4)	glibtop_call_r(glibtop_global_server, p1, p2, p3, p4)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -41,28 +43,27 @@ BEGIN_LIBGTOP_DECLS
 | 
			
		||||
#define GLIBTOP_XCPU_NICE	8
 | 
			
		||||
#define GLIBTOP_XCPU_SYS	9
 | 
			
		||||
#define GLIBTOP_XCPU_IDLE	10
 | 
			
		||||
#define GLIBTOP_XCPU_FLAGS	11
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_CPU		11
 | 
			
		||||
 | 
			
		||||
/* Nobody should really be using more than 4 processors. */
 | 
			
		||||
#define GLIBTOP_NCPU		4
 | 
			
		||||
#define GLIBTOP_MAX_CPU		12
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_cpu	glibtop_cpu;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_cpu
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		total,				/* GLIBTOP_CPU_TOTAL		*/
 | 
			
		||||
		user,				/* GLIBTOP_CPU_USER		*/
 | 
			
		||||
		nice,				/* GLIBTOP_CPU_NICE		*/
 | 
			
		||||
		sys,				/* GLIBTOP_CPU_SYS		*/
 | 
			
		||||
		idle,				/* GLIBTOP_CPU_IDLE		*/
 | 
			
		||||
		frequency,			/* GLIBTOP_CPU_FREQUENCY	*/
 | 
			
		||||
		xcpu_total [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_TOTAL		*/
 | 
			
		||||
		xcpu_user [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_USER		*/
 | 
			
		||||
		xcpu_nice [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_NICE		*/
 | 
			
		||||
		xcpu_sys  [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_SYS		*/
 | 
			
		||||
		xcpu_idle [GLIBTOP_NCPU];	/* GLIBTOP_XCPU_IDLE		*/
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	total,				/* GLIBTOP_CPU_TOTAL		*/
 | 
			
		||||
	user,				/* GLIBTOP_CPU_USER		*/
 | 
			
		||||
	nice,				/* GLIBTOP_CPU_NICE		*/
 | 
			
		||||
	sys,				/* GLIBTOP_CPU_SYS		*/
 | 
			
		||||
	idle,				/* GLIBTOP_CPU_IDLE		*/
 | 
			
		||||
	frequency,			/* GLIBTOP_CPU_FREQUENCY	*/
 | 
			
		||||
	xcpu_total [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_TOTAL		*/
 | 
			
		||||
	xcpu_user [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_USER		*/
 | 
			
		||||
	xcpu_nice [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_NICE		*/
 | 
			
		||||
	xcpu_sys  [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_SYS		*/
 | 
			
		||||
	xcpu_idle [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_IDLE		*/
 | 
			
		||||
	xcpu_flags;			/* GLIBTOP_XCPU_FLAGS		*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_cpu(cpu)	glibtop_get_cpu_l(glibtop_global_server, cpu)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -28,50 +30,59 @@
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#ifndef G_GNUC_UNUSED
 | 
			
		||||
#if	__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
 | 
			
		||||
#define G_GNUC_UNUSED				\
 | 
			
		||||
  __attribute__((unused))
 | 
			
		||||
#else	/* !__GNUC__ */
 | 
			
		||||
#define	G_GNUC_UNUSED
 | 
			
		||||
#endif	/* !__GNUC__ */
 | 
			
		||||
#endif /* defined G_GNUC_UNUSED */
 | 
			
		||||
 | 
			
		||||
void glibtop_error_vr (glibtop *server, char *format, va_list args);
 | 
			
		||||
void glibtop_warn_vr (glibtop *server, char *format, va_list args);
 | 
			
		||||
 | 
			
		||||
void glibtop_error_io_vr (glibtop *server, char *format, int, va_list args);
 | 
			
		||||
void glibtop_warn_io_vr (glibtop *server, char *format, int, va_list args);
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static void G_GNUC_UNUSED
 | 
			
		||||
glibtop_error_r (glibtop *server, char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
    va_list args;
 | 
			
		||||
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_error_vr (server, format, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
    va_start (args, format);
 | 
			
		||||
    glibtop_error_vr (server, format, args);
 | 
			
		||||
    va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static void G_GNUC_UNUSED
 | 
			
		||||
glibtop_warn_r (glibtop *server, char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
    va_list args;
 | 
			
		||||
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_warn_vr (server, format, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
    va_start (args, format);
 | 
			
		||||
    glibtop_warn_vr (server, format, args);
 | 
			
		||||
    va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static void G_GNUC_UNUSED
 | 
			
		||||
glibtop_error_io_r (glibtop *server, char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
    va_list args;
 | 
			
		||||
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_error_io_vr (server, format, errno, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
    va_start (args, format);
 | 
			
		||||
    glibtop_error_io_vr (server, format, errno, args);
 | 
			
		||||
    va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
static void G_GNUC_UNUSED
 | 
			
		||||
glibtop_warn_io_r (glibtop *server, char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
    va_list args;
 | 
			
		||||
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_warn_io_vr (server, format, errno, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
    va_start (args, format);
 | 
			
		||||
    glibtop_warn_io_vr (server, format, errno, args);
 | 
			
		||||
    va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef  __GNUC__
 | 
			
		||||
@@ -87,37 +98,37 @@ glibtop_warn_io_r (glibtop *server, char *format, ...)
 | 
			
		||||
static void
 | 
			
		||||
glibtop_error (char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_error_vr (glibtop_global_server, format, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
    va_list args;
 | 
			
		||||
    va_start (args, format);
 | 
			
		||||
    glibtop_error_vr (glibtop_global_server, format, args);
 | 
			
		||||
    va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
glibtop_warn (char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_warn_vr (glibtop_global_server, format, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
    va_list args;
 | 
			
		||||
    va_start (args, format);
 | 
			
		||||
    glibtop_warn_vr (glibtop_global_server, format, args);
 | 
			
		||||
    va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
glibtop_error_io (char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_error_io_vr (glibtop_global_server, format, errno, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
    va_list args;
 | 
			
		||||
    va_start (args, format);
 | 
			
		||||
    glibtop_error_io_vr (glibtop_global_server, format, errno, args);
 | 
			
		||||
    va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
glibtop_warn_io (char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_warn_io_vr (glibtop_global_server, format, errno, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
    va_list args;
 | 
			
		||||
    va_start (args, format);
 | 
			
		||||
    glibtop_warn_io_vr (glibtop_global_server, format, errno, args);
 | 
			
		||||
    va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* no __GNUC__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -41,12 +43,12 @@ typedef struct _glibtop_fsusage		glibtop_fsusage;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_fsusage
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		blocks,		/* Total blocks. */
 | 
			
		||||
		bfree,		/* Free blocks available to superuser. */
 | 
			
		||||
		bavail,		/* Free blocks available to non-superuser. */
 | 
			
		||||
		files,		/* Total file nodes. */
 | 
			
		||||
		ffree;		/* Free file nodes. */
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	blocks,		/* Total blocks. */
 | 
			
		||||
	bfree,		/* Free blocks available to superuser. */
 | 
			
		||||
	bavail,		/* Free blocks available to non-superuser. */
 | 
			
		||||
	files,		/* Total file nodes. */
 | 
			
		||||
	ffree;		/* Free file nodes. */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_fsusage(fsusage,disk)	glibtop_get_fsusage_l(glibtop_global_server, fsusage, disk)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
@@ -39,12 +41,12 @@ typedef struct _glibtop_inodedb_key	glibtop_inodedb_key;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_inodedb_key
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t device, inode;
 | 
			
		||||
    u_int64_t device, inode;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_inodedb
 | 
			
		||||
{
 | 
			
		||||
	GDBM_FILE system_dbf, user_dbf;
 | 
			
		||||
    GDBM_FILE system_dbf, user_dbf;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_inodedb_open(p1,p2)	glibtop_inodedb_open_s(glibtop_global_server, p1, p2)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								include/glibtop/limits.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								include/glibtop/limits.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
 | 
			
		||||
 | 
			
		||||
   LibGTop is free software; you can redistribute it and/or modify it
 | 
			
		||||
   under the terms of the GNU General Public License as published by
 | 
			
		||||
   the Free Software Foundation; either version 2 of the License,
 | 
			
		||||
   or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
   LibGTop is distributed in the hope that it will be useful, but WITHOUT
 | 
			
		||||
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 | 
			
		||||
   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 | 
			
		||||
   for more details.
 | 
			
		||||
 | 
			
		||||
   You should have received a copy of the GNU General Public License
 | 
			
		||||
   along with LibGTop; see the file COPYING. If not, write to the
 | 
			
		||||
   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | 
			
		||||
   Boston, MA 02111-1307, USA.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __GLIBTOP_LIMITS_H__
 | 
			
		||||
#define __GLIBTOP_LIMITS_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
/* Nobody should really be using more than 64 processors. */
 | 
			
		||||
#define GLIBTOP_NCPU		64
 | 
			
		||||
 | 
			
		||||
/* Maximum number of process groups in glibtop_proc_uid. */
 | 
			
		||||
#define GLIBTOP_MAX_GROUPS	32
 | 
			
		||||
 | 
			
		||||
/* Maximum length of a mountpoint/device name in glibtop_mountlist. */
 | 
			
		||||
#define GLIBTOP_MOUNTENTRY_LEN	79
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -40,11 +42,11 @@ typedef struct _glibtop_loadavg	glibtop_loadavg;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_loadavg
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags;
 | 
			
		||||
	double loadavg [3];		/* GLIBTOP_LOADAVG_LOADAVG	*/
 | 
			
		||||
	u_int64_t nr_running,		/* GLIBTOP_LOADAVG_NR_RUNNING	*/
 | 
			
		||||
		nr_tasks,		/* GLIBTOP_LOADAVG_NR_TASKS	*/
 | 
			
		||||
		last_pid;		/* GLIBTOP_LOADAVG_LAST_PID	*/
 | 
			
		||||
    u_int64_t flags;
 | 
			
		||||
    double loadavg [3];		/* GLIBTOP_LOADAVG_LOADAVG	*/
 | 
			
		||||
    u_int64_t nr_running,	/* GLIBTOP_LOADAVG_NR_RUNNING	*/
 | 
			
		||||
	nr_tasks,		/* GLIBTOP_LOADAVG_NR_TASKS	*/
 | 
			
		||||
	last_pid;		/* GLIBTOP_LOADAVG_LAST_PID	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_loadavg(loadavg)	glibtop_get_loadavg_l(glibtop_global_server, loadavg)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -44,15 +46,15 @@ typedef struct _glibtop_mem	glibtop_mem;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_mem
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		total,		/* GLIBTOP_MEM_TOTAL	*/
 | 
			
		||||
		used,		/* GLIBTOP_MEM_USED	*/
 | 
			
		||||
		free,		/* GLIBTOP_MEM_FREE	*/
 | 
			
		||||
		shared,		/* GLIBTOP_MEM_SHARED	*/
 | 
			
		||||
		buffer,		/* GLIBTOP_MEM_BUFFER	*/
 | 
			
		||||
		cached,		/* GLIBTOP_MEM_CACHED	*/
 | 
			
		||||
		user,		/* GLIBTOP_MEM_USER	*/
 | 
			
		||||
		locked;		/* GLIBTOP_MEM_LOCKED	*/
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	total,		/* GLIBTOP_MEM_TOTAL	*/
 | 
			
		||||
	used,		/* GLIBTOP_MEM_USED	*/
 | 
			
		||||
	free,		/* GLIBTOP_MEM_FREE	*/
 | 
			
		||||
	shared,		/* GLIBTOP_MEM_SHARED	*/
 | 
			
		||||
	buffer,		/* GLIBTOP_MEM_BUFFER	*/
 | 
			
		||||
	cached,		/* GLIBTOP_MEM_CACHED	*/
 | 
			
		||||
	user,		/* GLIBTOP_MEM_USER	*/
 | 
			
		||||
	locked;		/* GLIBTOP_MEM_LOCKED	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_mem(mem)	glibtop_get_mem_l(glibtop_global_server, mem)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -41,18 +43,18 @@ typedef struct _glibtop_mountlist	glibtop_mountlist;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_mountentry
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t dev;
 | 
			
		||||
	char devname [GLIBTOP_MOUNTENTRY_LEN+1];
 | 
			
		||||
	char mountdir [GLIBTOP_MOUNTENTRY_LEN+1];
 | 
			
		||||
	char type [GLIBTOP_MOUNTENTRY_LEN+1];
 | 
			
		||||
    u_int64_t dev;
 | 
			
		||||
    char devname [GLIBTOP_MOUNTENTRY_LEN+1];
 | 
			
		||||
    char mountdir [GLIBTOP_MOUNTENTRY_LEN+1];
 | 
			
		||||
    char type [GLIBTOP_MOUNTENTRY_LEN+1];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_mountlist
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		number,			/* GLIBTOP_MOUNTLIST_NUMBER	*/
 | 
			
		||||
		total,			/* GLIBTOP_MOUNTLIST_TOTAL	*/
 | 
			
		||||
		size;			/* GLIBTOP_MOUNTLIST_SIZE	*/
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	number,			/* GLIBTOP_MOUNTLIST_NUMBER	*/
 | 
			
		||||
	total,			/* GLIBTOP_MOUNTLIST_TOTAL	*/
 | 
			
		||||
	size;			/* GLIBTOP_MOUNTLIST_SIZE	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_mountlist(mountlist,all_fs)	glibtop_get_mountlist_l(glibtop_global_server, mountlist, all_fs)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -43,14 +45,14 @@ typedef struct _glibtop_msg_limits	glibtop_msg_limits;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_msg_limits
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		msgpool,	/* GLIBTOP_IPC_MSGPOOL	*/
 | 
			
		||||
		msgmap,		/* GLIBTOP_IPC_MSGMAP	*/
 | 
			
		||||
		msgmax,		/* GLIBTOP_IPC_MSGMAX	*/
 | 
			
		||||
		msgmnb,		/* GLIBTOP_IPC_MSGMNB	*/
 | 
			
		||||
		msgmni,		/* GLIBTOP_IPC_MSGMNI	*/
 | 
			
		||||
		msgssz,		/* GLIBTOP_IPC_MSGSSZ	*/
 | 
			
		||||
		msgtql;		/* GLIBTOP_IPC_MSGTQL	*/
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	msgpool,	/* GLIBTOP_IPC_MSGPOOL	*/
 | 
			
		||||
	msgmap,		/* GLIBTOP_IPC_MSGMAP	*/
 | 
			
		||||
	msgmax,		/* GLIBTOP_IPC_MSGMAX	*/
 | 
			
		||||
	msgmnb,		/* GLIBTOP_IPC_MSGMNB	*/
 | 
			
		||||
	msgmni,		/* GLIBTOP_IPC_MSGMNI	*/
 | 
			
		||||
	msgssz,		/* GLIBTOP_IPC_MSGSSZ	*/
 | 
			
		||||
	msgtql;		/* GLIBTOP_IPC_MSGTQL	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_msg_limits(msg)	glibtop_get_msg_limits_l(glibtop_global_server, msg)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -49,41 +51,41 @@ BEGIN_LIBGTOP_DECLS
 | 
			
		||||
typedef struct _glibtop_netload	glibtop_netload;
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	GLIBTOP_IF_FLAGS_UP = 1,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_BROADCAST,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_DEBUG,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_LOOPBACK,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_POINTOPOINT,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_RUNNING,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_NOARP,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_PROMISC,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_ALLMULTI,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_OACTIVE,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_SIMPLEX,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_LINK0,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_LINK1,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_LINK2,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_ALTPHYS,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_MULTICAST
 | 
			
		||||
    GLIBTOP_IF_FLAGS_UP = 1,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_BROADCAST,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_DEBUG,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_LOOPBACK,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_POINTOPOINT,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_RUNNING,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_NOARP,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_PROMISC,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_ALLMULTI,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_OACTIVE,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_SIMPLEX,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_LINK0,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_LINK1,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_LINK2,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_ALTPHYS,
 | 
			
		||||
    GLIBTOP_IF_FLAGS_MULTICAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_netload
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		if_flags,		/* GLIBTOP_NETLOAD_IF_FLAGS	*/
 | 
			
		||||
		mtu,			/* GLIBTOP_NETLOAD_MTU		*/
 | 
			
		||||
		subnet,			/* GLIBTOP_NETLOAD_SUBNET	*/
 | 
			
		||||
		address,		/* GLIBTOP_NETLOAD_ADDRESS	*/
 | 
			
		||||
		packets_in,		/* GLIBTOP_NETLOAD_PACKETS_IN	*/
 | 
			
		||||
		packets_out,		/* GLIBTOP_NETLOAD_PACKETS_OUT	*/
 | 
			
		||||
		packets_total,		/* GLIBTOP_NETLOAD_PACKETS_TOTAL*/
 | 
			
		||||
		bytes_in,		/* GLIBTOP_NETLOAD_BYTES_IN	*/
 | 
			
		||||
		bytes_out,		/* GLIBTOP_NETLOAD_BYTES_OUT	*/
 | 
			
		||||
		bytes_total,		/* GLIBTOP_NETLOAD_BYTES_TOTAL	*/
 | 
			
		||||
		errors_in,		/* GLIBTOP_NETLOAD_ERRORS_IN	*/
 | 
			
		||||
		errors_out,		/* GLIBTOP_NETLOAD_ERRORS_OUT	*/
 | 
			
		||||
		errors_total,		/* GLIBTOP_NETLOAD_ERRORS_TOTAL	*/
 | 
			
		||||
		collisions;		/* GLIBTOP_NETLOAD_COLLISIONS	*/
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	if_flags,		/* GLIBTOP_NETLOAD_IF_FLAGS	*/
 | 
			
		||||
	mtu,			/* GLIBTOP_NETLOAD_MTU		*/
 | 
			
		||||
	subnet,			/* GLIBTOP_NETLOAD_SUBNET	*/
 | 
			
		||||
	address,		/* GLIBTOP_NETLOAD_ADDRESS	*/
 | 
			
		||||
	packets_in,		/* GLIBTOP_NETLOAD_PACKETS_IN	*/
 | 
			
		||||
	packets_out,		/* GLIBTOP_NETLOAD_PACKETS_OUT	*/
 | 
			
		||||
	packets_total,		/* GLIBTOP_NETLOAD_PACKETS_TOTAL*/
 | 
			
		||||
	bytes_in,		/* GLIBTOP_NETLOAD_BYTES_IN	*/
 | 
			
		||||
	bytes_out,		/* GLIBTOP_NETLOAD_BYTES_OUT	*/
 | 
			
		||||
	bytes_total,		/* GLIBTOP_NETLOAD_BYTES_TOTAL	*/
 | 
			
		||||
	errors_in,		/* GLIBTOP_NETLOAD_ERRORS_IN	*/
 | 
			
		||||
	errors_out,		/* GLIBTOP_NETLOAD_ERRORS_OUT	*/
 | 
			
		||||
	errors_total,		/* GLIBTOP_NETLOAD_ERRORS_TOTAL	*/
 | 
			
		||||
	collisions;		/* GLIBTOP_NETLOAD_COLLISIONS	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_netload(netload,interface)	glibtop_get_netload_l(glibtop_global_server, netload, interface)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -38,17 +40,17 @@ BEGIN_LIBGTOP_DECLS
 | 
			
		||||
typedef struct _glibtop_ppp	glibtop_ppp;
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	GLIBTOP_PPP_STATE_UNKNOWN = 0,
 | 
			
		||||
	GLIBTOP_PPP_STATE_HANGUP,
 | 
			
		||||
	GLIBTOP_PPP_STATE_ONLINE
 | 
			
		||||
    GLIBTOP_PPP_STATE_UNKNOWN = 0,
 | 
			
		||||
    GLIBTOP_PPP_STATE_HANGUP,
 | 
			
		||||
    GLIBTOP_PPP_STATE_ONLINE
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_ppp
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		state,			/* GLIBTOP_PPP_STATE		*/
 | 
			
		||||
		bytes_in,		/* GLIBTOP_PPP_BYTES_IN		*/
 | 
			
		||||
		bytes_out;		/* GLIBTOP_PPP_BYTES_OUT	*/
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	state,			/* GLIBTOP_PPP_STATE		*/
 | 
			
		||||
	bytes_in,		/* GLIBTOP_PPP_BYTES_IN		*/
 | 
			
		||||
	bytes_out;		/* GLIBTOP_PPP_BYTES_OUT	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_ppp(ppp,device)	glibtop_get_ppp_l(glibtop_global_server, ppp, device)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -37,8 +39,8 @@ typedef struct _glibtop_proc_args	glibtop_proc_args;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_args
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		size;			/* GLIBTOP_PROC_ARGS_SIZE	*/
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	size;			/* GLIBTOP_PROC_ARGS_SIZE	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_args(proc_args,pid,max_len) glibtop_get_proc_args_l(glibtop_global_server, proc_args, pid, max_len)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -41,27 +43,38 @@ BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_KERNEL		9
 | 
			
		||||
 | 
			
		||||
/* Constants for the `k_flags' field. */
 | 
			
		||||
#define GLIBTOP_KFLAGS_STARTING		1	/* being created */
 | 
			
		||||
#define GLIBTOP_KFLAGS_EXITING		2	/* getting shut down */
 | 
			
		||||
#define GLIBTOP_KFLAGS_PTRACED		4	/* set if ptrace (0) has
 | 
			
		||||
						   been called */
 | 
			
		||||
#define GLIBTOP_KFLAGS_TRACESYS		8	/* tracing system calls */
 | 
			
		||||
#define GLIBTOP_KFLAGS_FORKNOEXEC	16	/* forked but didn't exec */
 | 
			
		||||
#define GLIBTOP_KFLAGS_SUPERPRIV	32	/* used super-user privileges */
 | 
			
		||||
#define GLIBTOP_KFLAGS_DUMPEDCORE	64	/* dumped core */
 | 
			
		||||
#define GLIBTOP_KFLAGS_SIGNALED		128	/* killed by a signal */
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_kernel	glibtop_proc_kernel;
 | 
			
		||||
 | 
			
		||||
/* Kernel stuff */
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_kernel
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags;
 | 
			
		||||
	u_int64_t k_flags,	/* kernel flags for the process */
 | 
			
		||||
		min_flt,	/* number of minor page faults since
 | 
			
		||||
				 * process start */
 | 
			
		||||
		maj_flt,	/* number of major page faults since
 | 
			
		||||
				 * process start */
 | 
			
		||||
		cmin_flt,	/* cumulative min_flt of process and
 | 
			
		||||
				 * child processes */
 | 
			
		||||
		cmaj_flt,	/* cumulative maj_flt of process and
 | 
			
		||||
				 * child processes */
 | 
			
		||||
		kstk_esp,	/* kernel stack pointer */
 | 
			
		||||
		kstk_eip,	/* kernel stack pointer */
 | 
			
		||||
		nwchan;		/* address of kernel wait channel
 | 
			
		||||
				 * proc is sleeping in */
 | 
			
		||||
	char wchan [40];
 | 
			
		||||
    u_int64_t flags;
 | 
			
		||||
    u_int64_t k_flags,	/* kernel flags for the process */
 | 
			
		||||
	min_flt,	/* number of minor page faults since
 | 
			
		||||
			 * process start */
 | 
			
		||||
	maj_flt,	/* number of major page faults since
 | 
			
		||||
			 * process start */
 | 
			
		||||
	cmin_flt,	/* cumulative min_flt of process and
 | 
			
		||||
			 * child processes */
 | 
			
		||||
	cmaj_flt,	/* cumulative maj_flt of process and
 | 
			
		||||
			 * child processes */
 | 
			
		||||
	kstk_esp,	/* kernel stack pointer */
 | 
			
		||||
	kstk_eip,	/* kernel stack pointer */
 | 
			
		||||
	nwchan;		/* address of kernel wait channel
 | 
			
		||||
			 * proc is sleeping in */
 | 
			
		||||
    char wchan [40];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_kernel(p1, p2)	glibtop_get_proc_kernel_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -56,10 +58,10 @@ typedef struct _glibtop_proclist	glibtop_proclist;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proclist
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		number,			/* GLIBTOP_PROCLIST_NUMBER	*/
 | 
			
		||||
		total,			/* GLIBTOP_PROCLIST_TOTAL	*/
 | 
			
		||||
		size;			/* GLIBTOP_PROCLIST_SIZE	*/
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	number,			/* GLIBTOP_PROCLIST_NUMBER	*/
 | 
			
		||||
	total,			/* GLIBTOP_PROCLIST_TOTAL	*/
 | 
			
		||||
	size;			/* GLIBTOP_PROCLIST_SIZE	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proclist(proclist,which,arg) glibtop_get_proclist_l(glibtop_global_server, proclist, which, arg)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -59,16 +61,16 @@ typedef struct _glibtop_proc_map	glibtop_proc_map;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_map_entry
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags, start, end, offset, perm, inode, device;
 | 
			
		||||
	char filename [GLIBTOP_MAP_FILENAME_LEN+1];
 | 
			
		||||
    u_int64_t flags, start, end, offset, perm, inode, device;
 | 
			
		||||
    char filename [GLIBTOP_MAP_FILENAME_LEN+1];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_map
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		number,			/* GLIBTOP_PROC_MAP_NUMBER	*/
 | 
			
		||||
		total,			/* GLIBTOP_PROC_MAP_TOTAL	*/
 | 
			
		||||
		size;			/* GLIBTOP_PROC_MAP_SIZE	*/
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	number,			/* GLIBTOP_PROC_MAP_NUMBER	*/
 | 
			
		||||
	total,			/* GLIBTOP_PROC_MAP_TOTAL	*/
 | 
			
		||||
	size;			/* GLIBTOP_PROC_MAP_SIZE	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_map(proc_map,pid) glibtop_get_proc_map_l(glibtop_global_server, proc_map, pid)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -44,15 +46,15 @@ typedef struct _glibtop_proc_mem	glibtop_proc_mem;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_mem
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		size,		/* total # of pages of memory */
 | 
			
		||||
		vsize,		/* number of pages of virtual memory ... */
 | 
			
		||||
		resident,	/* number of resident set
 | 
			
		||||
				 * (non-swapped) pages (4k) */
 | 
			
		||||
		share,		/* number of pages of shared (mmap'd) memory */
 | 
			
		||||
		rss,		/* resident set size */
 | 
			
		||||
		rss_rlim;	/* current limit (in bytes) of the rss
 | 
			
		||||
				 * of the process; usually 2,147,483,647 */
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	size,		/* total # of pages of memory */
 | 
			
		||||
	vsize,		/* number of pages of virtual memory ... */
 | 
			
		||||
	resident,	/* number of resident set
 | 
			
		||||
			 * (non-swapped) pages (4k) */
 | 
			
		||||
	share,		/* number of pages of shared (mmap'd) memory */
 | 
			
		||||
	rss,		/* resident set size */
 | 
			
		||||
	rss_rlim;	/* current limit (in bytes) of the rss
 | 
			
		||||
			 * of the process; usually 2,147,483,647 */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_mem(p1, p2)	glibtop_get_proc_mem_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -36,9 +38,18 @@ BEGIN_LIBGTOP_DECLS
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_DIRTY_SIZE		4
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_START_CODE		5
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_END_CODE		6
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_START_STACK	7
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_START_DATA		7
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_END_DATA		8
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_START_BRK		9
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_END_BRK		10
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_START_STACK	11
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_START_MMAP		12
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_ARG_START		13
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_ARG_END		14
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_ENV_START		15
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_ENV_END		16
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_SEGMENT		8
 | 
			
		||||
#define GLIBTOP_MAX_PROC_SEGMENT		17
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_segment	glibtop_proc_segment;
 | 
			
		||||
 | 
			
		||||
@@ -46,16 +57,24 @@ typedef struct _glibtop_proc_segment	glibtop_proc_segment;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_segment
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		text_rss,	/* text resident set size */
 | 
			
		||||
		shlib_rss,	/* shared-lib resident set size */
 | 
			
		||||
		data_rss,	/* data resident set size */
 | 
			
		||||
		stack_rss,	/* stack resident set size */
 | 
			
		||||
		dirty_size,	/* size of dirty pages */
 | 
			
		||||
		start_code,
 | 
			
		||||
				/* address of beginning of code segment */
 | 
			
		||||
		end_code,	/* address of end of code segment */
 | 
			
		||||
		start_stack;	/* address of the bottom of stack segment */
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	text_rss,	/* text resident set size */
 | 
			
		||||
	shlib_rss,	/* shared-lib resident set size */
 | 
			
		||||
	data_rss,	/* data resident set size */
 | 
			
		||||
	stack_rss,	/* stack resident set size */
 | 
			
		||||
	dirty_size,	/* size of dirty pages */
 | 
			
		||||
	start_code,	/* address of beginning of code segment */
 | 
			
		||||
	end_code,	/* address of end of code segment */
 | 
			
		||||
	start_data,	/* address of beginning of data segment */
 | 
			
		||||
	end_data,	/* address of end of data segment */
 | 
			
		||||
	start_brk,
 | 
			
		||||
	end_brk,
 | 
			
		||||
	start_stack,	/* address of the bottom of stack segment */
 | 
			
		||||
	start_mmap,
 | 
			
		||||
	arg_start,
 | 
			
		||||
	arg_end,
 | 
			
		||||
	env_start,
 | 
			
		||||
	env_end;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_segment(p1, p2)	glibtop_get_proc_segment_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -42,11 +44,11 @@ typedef struct _glibtop_proc_signal	glibtop_proc_signal;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_signal
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		signal [2],		/* mask of pending signals */
 | 
			
		||||
		blocked [2],		/* mask of blocked signals */
 | 
			
		||||
		sigignore [2],		/* mask of ignored signals */
 | 
			
		||||
		sigcatch [2];		/* mask of caught  signals */
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	signal [2],		/* mask of pending signals */
 | 
			
		||||
	blocked [2],		/* mask of blocked signals */
 | 
			
		||||
	sigignore [2],		/* mask of ignored signals */
 | 
			
		||||
	sigcatch [2];		/* mask of caught  signals */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_signal(p1, p2)	glibtop_get_proc_signal_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -29,12 +31,25 @@
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PROC_STATE_CMD		0
 | 
			
		||||
#define GLIBTOP_PROC_STATE_STATE	1
 | 
			
		||||
#define GLIBTOP_PROC_STATE_UID		2
 | 
			
		||||
#define GLIBTOP_PROC_STATE_GID		3
 | 
			
		||||
#define GLIBTOP_PROC_STATE_CMD			0
 | 
			
		||||
#define GLIBTOP_PROC_STATE_STATE		1
 | 
			
		||||
#define GLIBTOP_PROC_STATE_UID			2
 | 
			
		||||
#define GLIBTOP_PROC_STATE_GID			3
 | 
			
		||||
#define GLIBTOP_PROC_STATE_RUID			4
 | 
			
		||||
#define GLIBTOP_PROC_STATE_RGID			5
 | 
			
		||||
#define GLIBTOP_PROC_STATE_HAS_CPU		6
 | 
			
		||||
#define GLIBTOP_PROC_STATE_PROCESSOR		7
 | 
			
		||||
#define GLIBTOP_PROC_STATE_LAST_PROCESSOR	8
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_STATE		4
 | 
			
		||||
#define GLIBTOP_MAX_PROC_STATE			9
 | 
			
		||||
 | 
			
		||||
/* Constants for the `state' field. */
 | 
			
		||||
#define GLIBTOP_PROCESS_RUNNING			1
 | 
			
		||||
#define GLIBTOP_PROCESS_INTERRUPTIBLE		2
 | 
			
		||||
#define GLIBTOP_PROCESS_UNINTERRUPTIBLE		4
 | 
			
		||||
#define GLIBTOP_PROCESS_ZOMBIE			8
 | 
			
		||||
#define GLIBTOP_PROCESS_STOPPED			16
 | 
			
		||||
#define GLIBTOP_PROCESS_SWAPPING		32
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_state	glibtop_proc_state;
 | 
			
		||||
 | 
			
		||||
@@ -42,18 +57,24 @@ typedef struct _glibtop_proc_state	glibtop_proc_state;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_state
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags;
 | 
			
		||||
	char cmd[40],		/* basename of executable file in 
 | 
			
		||||
    u_int64_t flags;
 | 
			
		||||
    char cmd[40];		/* basename of executable file in 
 | 
			
		||||
				 * call to exec(2) */
 | 
			
		||||
		state;		/* single-char code for process state
 | 
			
		||||
				 * (S=sleeping) */
 | 
			
		||||
	/* NOTE: when porting the library, TRY HARD to implement the
 | 
			
		||||
	 *       following two fields. */
 | 
			
		||||
	/* IMPORTANT NOTICE: For security reasons, it is extremely important
 | 
			
		||||
	 *                   only to set the flags value for those two
 | 
			
		||||
	 *                   fields if their values are corrent ! */
 | 
			
		||||
	int uid,		/* UID of process */
 | 
			
		||||
		gid;		/* GID of process */
 | 
			
		||||
    unsigned state;		/* process state */
 | 
			
		||||
    /* NOTE: when porting the library, TRY HARD to implement the
 | 
			
		||||
     *       following two fields. */
 | 
			
		||||
    /* IMPORTANT NOTICE: For security reasons, it is extremely important
 | 
			
		||||
     *                   only to set the flags value for those two
 | 
			
		||||
     *                   fields if their values are corrent ! */
 | 
			
		||||
    int uid,			/* effective UID of process */
 | 
			
		||||
	gid,			/* effective GID of process */
 | 
			
		||||
	ruid,			/* real UID of process */
 | 
			
		||||
	rgid;			/* real GID of process */
 | 
			
		||||
    /* SMP values. */
 | 
			
		||||
    int has_cpu,
 | 
			
		||||
	processor,
 | 
			
		||||
	last_processor;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_state(p1, p2)	glibtop_get_proc_state_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -41,8 +43,9 @@ BEGIN_LIBGTOP_DECLS
 | 
			
		||||
#define GLIBTOP_PROC_TIME_FREQUENCY	8
 | 
			
		||||
#define GLIBTOP_PROC_TIME_XCPU_UTIME	9
 | 
			
		||||
#define GLIBTOP_PROC_TIME_XCPU_STIME	10
 | 
			
		||||
#define GLIBTOP_PROC_TIME_XCPU_FLAGS	11
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_TIME		11
 | 
			
		||||
#define GLIBTOP_MAX_PROC_TIME		12
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_time	glibtop_proc_time;
 | 
			
		||||
 | 
			
		||||
@@ -50,24 +53,25 @@ typedef struct _glibtop_proc_time	glibtop_proc_time;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_time
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		start_time,	/* start time of process -- 
 | 
			
		||||
				 * seconds since 1-1-70 */
 | 
			
		||||
		rtime,		/* real time accumulated by process */
 | 
			
		||||
		utime,		/* user-mode CPU time accumulated by process */
 | 
			
		||||
		stime,		/* kernel-mode CPU time accumulated by process */
 | 
			
		||||
		cutime,		/* cumulative utime of process and 
 | 
			
		||||
				 * reaped children */
 | 
			
		||||
		cstime,		/* cumulative stime of process and 
 | 
			
		||||
				 * reaped children */
 | 
			
		||||
		timeout,	/* The time (in jiffies) of the process's
 | 
			
		||||
				 * next timeout */
 | 
			
		||||
		it_real_value,	/* The time (in jiffies) before the
 | 
			
		||||
				 * next SIGALRM is sent to the process
 | 
			
		||||
				 * due to an interval timer. */
 | 
			
		||||
		frequency,	/* Tick frequency. */
 | 
			
		||||
		xcpu_utime [GLIBTOP_NCPU],	/* utime and stime for all CPUs on */
 | 
			
		||||
		xcpu_stime [GLIBTOP_NCPU];	/* SMP machines. */
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	start_time,	/* start time of process -- 
 | 
			
		||||
			 * seconds since 1-1-70 */
 | 
			
		||||
	rtime,		/* real time accumulated by process */
 | 
			
		||||
	utime,		/* user-mode CPU time accumulated by process */
 | 
			
		||||
	stime,		/* kernel-mode CPU time accumulated by process */
 | 
			
		||||
	cutime,		/* cumulative utime of process and 
 | 
			
		||||
			 * reaped children */
 | 
			
		||||
	cstime,		/* cumulative stime of process and 
 | 
			
		||||
			 * reaped children */
 | 
			
		||||
	timeout,	/* The time (in jiffies) of the process's
 | 
			
		||||
			 * next timeout */
 | 
			
		||||
	it_real_value,	/* The time (in jiffies) before the
 | 
			
		||||
			 * next SIGALRM is sent to the process
 | 
			
		||||
			 * due to an interval timer. */
 | 
			
		||||
	frequency,	/* Tick frequency. */
 | 
			
		||||
	xcpu_utime [GLIBTOP_NCPU],	/* utime and stime for all CPUs on */
 | 
			
		||||
	xcpu_stime [GLIBTOP_NCPU],	/* SMP machines. */
 | 
			
		||||
	xcpu_flags;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_time(p1, p2)	glibtop_get_proc_time_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -33,16 +35,22 @@ BEGIN_LIBGTOP_DECLS
 | 
			
		||||
#define GLIBTOP_PROC_UID_EUID		1
 | 
			
		||||
#define GLIBTOP_PROC_UID_GID		2
 | 
			
		||||
#define GLIBTOP_PROC_UID_EGID		3
 | 
			
		||||
#define GLIBTOP_PROC_UID_PID		4
 | 
			
		||||
#define GLIBTOP_PROC_UID_PPID		5
 | 
			
		||||
#define GLIBTOP_PROC_UID_PGRP		6
 | 
			
		||||
#define GLIBTOP_PROC_UID_SESSION	7
 | 
			
		||||
#define GLIBTOP_PROC_UID_TTY		8
 | 
			
		||||
#define GLIBTOP_PROC_UID_TPGID		9
 | 
			
		||||
#define GLIBTOP_PROC_UID_PRIORITY	10
 | 
			
		||||
#define GLIBTOP_PROC_UID_NICE		11
 | 
			
		||||
#define GLIBTOP_PROC_UID_SUID		4
 | 
			
		||||
#define GLIBTOP_PROC_UID_SGID		5
 | 
			
		||||
#define GLIBTOP_PROC_UID_FSUID		6
 | 
			
		||||
#define GLIBTOP_PROC_UID_FSGID		7
 | 
			
		||||
#define GLIBTOP_PROC_UID_PID		8
 | 
			
		||||
#define GLIBTOP_PROC_UID_PPID		9
 | 
			
		||||
#define GLIBTOP_PROC_UID_PGRP		10
 | 
			
		||||
#define GLIBTOP_PROC_UID_SESSION	11
 | 
			
		||||
#define GLIBTOP_PROC_UID_TTY		12
 | 
			
		||||
#define GLIBTOP_PROC_UID_TPGID		13
 | 
			
		||||
#define GLIBTOP_PROC_UID_PRIORITY	14
 | 
			
		||||
#define GLIBTOP_PROC_UID_NICE		15
 | 
			
		||||
#define GLIBTOP_PROC_UID_NGROUPS	16
 | 
			
		||||
#define GLIBTOP_PROC_UID_GROUPS		17
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_UID		12
 | 
			
		||||
#define GLIBTOP_MAX_PROC_UID		18
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_uid	glibtop_proc_uid;
 | 
			
		||||
 | 
			
		||||
@@ -50,19 +58,25 @@ typedef struct _glibtop_proc_uid	glibtop_proc_uid;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_uid
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags;
 | 
			
		||||
	int uid,		/* user id */
 | 
			
		||||
		euid,		/* effective user id */
 | 
			
		||||
		gid,		/* group id */
 | 
			
		||||
		egid,		/* effective group id */
 | 
			
		||||
		pid,		/* process id */
 | 
			
		||||
		ppid,		/* pid of parent process */
 | 
			
		||||
		pgrp,		/* process group id */
 | 
			
		||||
		session,	/* session id */
 | 
			
		||||
		tty,		/* full device number of controlling terminal */
 | 
			
		||||
		tpgid,		/* terminal process group id */
 | 
			
		||||
		priority,	/* kernel scheduling priority */
 | 
			
		||||
		nice;		/* standard unix nice level of process */
 | 
			
		||||
    u_int64_t flags;
 | 
			
		||||
    int uid,		/* user id */
 | 
			
		||||
	euid,		/* effective user id */
 | 
			
		||||
	gid,		/* group id */
 | 
			
		||||
	egid,		/* effective group id */
 | 
			
		||||
	suid,		/* saved user id */
 | 
			
		||||
	sgid,		/* saved group id */
 | 
			
		||||
	fsuid,		/* file system user id */
 | 
			
		||||
	fsgid,		/* file system group id */
 | 
			
		||||
	pid,		/* process id */
 | 
			
		||||
	ppid,		/* pid of parent process */
 | 
			
		||||
	pgrp,		/* process group id */
 | 
			
		||||
	session,	/* session id */
 | 
			
		||||
	tty,		/* full device number of controlling terminal */
 | 
			
		||||
	tpgid,		/* terminal process group id */
 | 
			
		||||
	priority,	/* kernel scheduling priority */
 | 
			
		||||
	nice,		/* standard unix nice level of process */
 | 
			
		||||
	ngroups,	/* number of additional process groups */
 | 
			
		||||
	groups [GLIBTOP_MAX_GROUPS];	/* additional prcess groups */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_uid(p1, p2)	glibtop_get_proc_uid_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -46,17 +48,17 @@ typedef struct _glibtop_sem_limits	glibtop_sem_limits;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_sem_limits
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		semmap,		/* GLIBTOP_IPC_SEMMAP	*/
 | 
			
		||||
		semmni,		/* GLIBTOP_IPC_SEMMNI	*/
 | 
			
		||||
		semmns,		/* GLIBTOP_IPC_SEMMNS	*/
 | 
			
		||||
		semmnu,		/* GLIBTOP_IPC_SEMMNU	*/
 | 
			
		||||
		semmsl,		/* GLIBTOP_IPC_SEMMSL	*/
 | 
			
		||||
		semopm,		/* GLIBTOP_IPC_SEMOPM	*/
 | 
			
		||||
		semume,		/* GLIBTOP_IPC_SEMUME	*/
 | 
			
		||||
		semusz,		/* GLIBTOP_IPC_SEMUSZ	*/
 | 
			
		||||
		semvmx,		/* GLIBTOP_IPC_SEMVMX	*/
 | 
			
		||||
		semaem;		/* GLIBTOP_IPC_SEMAEM	*/
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	semmap,		/* GLIBTOP_IPC_SEMMAP	*/
 | 
			
		||||
	semmni,		/* GLIBTOP_IPC_SEMMNI	*/
 | 
			
		||||
	semmns,		/* GLIBTOP_IPC_SEMMNS	*/
 | 
			
		||||
	semmnu,		/* GLIBTOP_IPC_SEMMNU	*/
 | 
			
		||||
	semmsl,		/* GLIBTOP_IPC_SEMMSL	*/
 | 
			
		||||
	semopm,		/* GLIBTOP_IPC_SEMOPM	*/
 | 
			
		||||
	semume,		/* GLIBTOP_IPC_SEMUME	*/
 | 
			
		||||
	semusz,		/* GLIBTOP_IPC_SEMUSZ	*/
 | 
			
		||||
	semvmx,		/* GLIBTOP_IPC_SEMVMX	*/
 | 
			
		||||
	semaem;		/* GLIBTOP_IPC_SEMAEM	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_sem_limits(sem)	glibtop_get_sem_limits_l(glibtop_global_server, sem)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -41,12 +43,12 @@ typedef struct _glibtop_shm_limits	glibtop_shm_limits;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_shm_limits
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		shmmax,		/* GLIBTOP_IPC_SHMMAX	*/
 | 
			
		||||
		shmmin,		/* GLIBTOP_IPC_SHMMIN	*/
 | 
			
		||||
		shmmni,		/* GLIBTOP_IPC_SHMMNI	*/
 | 
			
		||||
		shmseg,		/* GLIBTOP_IPC_SHMSEG	*/
 | 
			
		||||
		shmall;		/* GLIBTOP_IPC_SHMALL	*/
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	shmmax,		/* GLIBTOP_IPC_SHMMAX	*/
 | 
			
		||||
	shmmin,		/* GLIBTOP_IPC_SHMMIN	*/
 | 
			
		||||
	shmmni,		/* GLIBTOP_IPC_SHMMNI	*/
 | 
			
		||||
	shmseg,		/* GLIBTOP_IPC_SHMSEG	*/
 | 
			
		||||
	shmall;		/* GLIBTOP_IPC_SHMALL	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_shm_limits(shm)	glibtop_get_shm_limits_l(glibtop_global_server, shm)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -36,8 +38,8 @@ typedef struct _glibtop_signame	glibtop_signame;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_signame
 | 
			
		||||
{
 | 
			
		||||
	const int number;
 | 
			
		||||
	const char *name, *label;
 | 
			
		||||
    const int number;
 | 
			
		||||
    const char *name, *label;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern const glibtop_signame glibtop_sys_siglist [];
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -41,12 +43,12 @@ typedef struct _glibtop_swap	glibtop_swap;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_swap
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		total,		/* GLIBTOP_SWAP_TOTAL	*/
 | 
			
		||||
		used,		/* GLIBTOP_SWAP_USED	*/
 | 
			
		||||
		free,		/* GLIBTOP_SWAP_FREE	*/
 | 
			
		||||
		pagein,		/* GLIBTOP_SWAP_PAGEIN	*/
 | 
			
		||||
		pageout;	/* GLIBTOP_SWAP_PAGEOUT	*/
 | 
			
		||||
    u_int64_t	flags,
 | 
			
		||||
	total,		/* GLIBTOP_SWAP_TOTAL	*/
 | 
			
		||||
	used,		/* GLIBTOP_SWAP_USED	*/
 | 
			
		||||
	free,		/* GLIBTOP_SWAP_FREE	*/
 | 
			
		||||
	pagein,		/* GLIBTOP_SWAP_PAGEIN	*/
 | 
			
		||||
	pageout;	/* GLIBTOP_SWAP_PAGEOUT	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_swap(swap)	glibtop_get_swap_l(glibtop_global_server, swap)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -28,31 +30,30 @@
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_SYSDEPS_FEATURES	0
 | 
			
		||||
#define GLIBTOP_SYSDEPS_CPU		1
 | 
			
		||||
#define GLIBTOP_SYSDEPS_MEM		2
 | 
			
		||||
#define GLIBTOP_SYSDEPS_SWAP		3
 | 
			
		||||
#define GLIBTOP_SYSDEPS_UPTIME		4
 | 
			
		||||
#define GLIBTOP_SYSDEPS_LOADAVG		5
 | 
			
		||||
#define GLIBTOP_SYSDEPS_SHM_LIMITS	6
 | 
			
		||||
#define GLIBTOP_SYSDEPS_MSG_LIMITS	7
 | 
			
		||||
#define GLIBTOP_SYSDEPS_SEM_LIMITS	8
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROCLIST	9
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_STATE	10
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_UID	11
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_MEM	12
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_TIME	13
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_SIGNAL	14
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_KERNEL	15
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_SEGMENT	16
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_ARGS	17
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_MAP	18
 | 
			
		||||
#define GLIBTOP_SYSDEPS_MOUNTLIST	19
 | 
			
		||||
#define GLIBTOP_SYSDEPS_FSUSAGE		20
 | 
			
		||||
#define GLIBTOP_SYSDEPS_NETLOAD		21
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PPP		22
 | 
			
		||||
#define GLIBTOP_SYSDEPS_CPU		0
 | 
			
		||||
#define GLIBTOP_SYSDEPS_MEM		1
 | 
			
		||||
#define GLIBTOP_SYSDEPS_SWAP		2
 | 
			
		||||
#define GLIBTOP_SYSDEPS_UPTIME		3
 | 
			
		||||
#define GLIBTOP_SYSDEPS_LOADAVG		4
 | 
			
		||||
#define GLIBTOP_SYSDEPS_SHM_LIMITS	5
 | 
			
		||||
#define GLIBTOP_SYSDEPS_MSG_LIMITS	6
 | 
			
		||||
#define GLIBTOP_SYSDEPS_SEM_LIMITS	7
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROCLIST	8
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_STATE	9
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_UID	10
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_MEM	11
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_TIME	12
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_SIGNAL	13
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_KERNEL	14
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_SEGMENT	15
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_ARGS	16
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_MAP	17
 | 
			
		||||
#define GLIBTOP_SYSDEPS_MOUNTLIST	18
 | 
			
		||||
#define GLIBTOP_SYSDEPS_FSUSAGE		19
 | 
			
		||||
#define GLIBTOP_SYSDEPS_NETLOAD		20
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PPP		21
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_SYSDEPS		23
 | 
			
		||||
#define GLIBTOP_MAX_SYSDEPS		24
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_SYSDEPS_ALL		((1 << GLIBTOP_MAX_SYSDEPS) - 1)
 | 
			
		||||
 | 
			
		||||
@@ -64,30 +65,31 @@ typedef struct _glibtop_sysdeps	glibtop_sysdeps;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_sysdeps
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags,
 | 
			
		||||
		features,		/* server features	*/
 | 
			
		||||
		cpu,			/* glibtop_cpu		*/
 | 
			
		||||
		mem,			/* glibtop_mem		*/
 | 
			
		||||
		swap,			/* glibtop_swap		*/
 | 
			
		||||
		uptime,			/* glibtop_uptime	*/
 | 
			
		||||
		loadavg,		/* glibtop_loadavg	*/
 | 
			
		||||
		shm_limits,		/* glibtop_shm_limits	*/
 | 
			
		||||
		msg_limits,		/* glibtop_msg_limits	*/
 | 
			
		||||
		sem_limits,		/* glibtop_sem_limits	*/
 | 
			
		||||
		proclist,		/* glibtop_proclist	*/
 | 
			
		||||
		proc_state,		/* glibtop_proc_state	*/
 | 
			
		||||
		proc_uid,		/* glibtop_proc_uid	*/
 | 
			
		||||
		proc_mem,		/* glibtop_proc_mem	*/
 | 
			
		||||
		proc_time,		/* glibtop_proc_time	*/
 | 
			
		||||
		proc_signal,		/* glibtop_proc_signal	*/
 | 
			
		||||
		proc_kernel,		/* glibtop_proc_kernel	*/
 | 
			
		||||
		proc_segment,		/* glibtop_proc_segment	*/
 | 
			
		||||
		proc_args,		/* glibtop_proc_args	*/
 | 
			
		||||
		proc_map,		/* glibtop_proc_map	*/
 | 
			
		||||
		mountlist,		/* glibtop_mountlist	*/
 | 
			
		||||
		fsusage,		/* glibtop_fsusage	*/
 | 
			
		||||
		netload,		/* glibtop_netload	*/
 | 
			
		||||
		ppp;			/* glibtop_ppp		*/
 | 
			
		||||
    u_int64_t flags,
 | 
			
		||||
	features,		/* server features	*/
 | 
			
		||||
	pointer_size,		/* sizeof(void*)*8	*/
 | 
			
		||||
	cpu,			/* glibtop_cpu		*/
 | 
			
		||||
	mem,			/* glibtop_mem		*/
 | 
			
		||||
	swap,			/* glibtop_swap		*/
 | 
			
		||||
	uptime,			/* glibtop_uptime	*/
 | 
			
		||||
	loadavg,		/* glibtop_loadavg	*/
 | 
			
		||||
	shm_limits,		/* glibtop_shm_limits	*/
 | 
			
		||||
	msg_limits,		/* glibtop_msg_limits	*/
 | 
			
		||||
	sem_limits,		/* glibtop_sem_limits	*/
 | 
			
		||||
	proclist,		/* glibtop_proclist	*/
 | 
			
		||||
	proc_state,		/* glibtop_proc_state	*/
 | 
			
		||||
	proc_uid,		/* glibtop_proc_uid	*/
 | 
			
		||||
	proc_mem,		/* glibtop_proc_mem	*/
 | 
			
		||||
	proc_time,		/* glibtop_proc_time	*/
 | 
			
		||||
	proc_signal,		/* glibtop_proc_signal	*/
 | 
			
		||||
	proc_kernel,		/* glibtop_proc_kernel	*/
 | 
			
		||||
	proc_segment,		/* glibtop_proc_segment	*/
 | 
			
		||||
	proc_args,		/* glibtop_proc_args	*/
 | 
			
		||||
	proc_map,		/* glibtop_proc_map	*/
 | 
			
		||||
	mountlist,		/* glibtop_mountlist	*/
 | 
			
		||||
	fsusage,		/* glibtop_fsusage	*/
 | 
			
		||||
	netload,		/* glibtop_netload	*/
 | 
			
		||||
	ppp;			/* glibtop_ppp		*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_sysdeps(sysdeps)	glibtop_get_sysdeps_r(glibtop_global_server,sysdeps)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -42,15 +44,15 @@ typedef struct _glibtop_entry	glibtop_entry;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_entry
 | 
			
		||||
{
 | 
			
		||||
	GPtrArray	*labels;
 | 
			
		||||
	GHashTable	*values;
 | 
			
		||||
	GHashTable	*descriptions;
 | 
			
		||||
    GPtrArray	*labels;
 | 
			
		||||
    GHashTable	*values;
 | 
			
		||||
    GHashTable	*descriptions;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_sysinfo
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags, ncpu;
 | 
			
		||||
	glibtop_entry	cpuinfo [GLIBTOP_NCPU];
 | 
			
		||||
    u_int64_t		flags, ncpu;
 | 
			
		||||
    glibtop_entry	cpuinfo [GLIBTOP_NCPU];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_sysinfo()	glibtop_get_sysinfo_s(glibtop_global_server)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -30,8 +32,9 @@ BEGIN_LIBGTOP_DECLS
 | 
			
		||||
#define GLIBTOP_TYPE_ULONG	2
 | 
			
		||||
#define GLIBTOP_TYPE_DOUBLE	3
 | 
			
		||||
#define GLIBTOP_TYPE_INT	4
 | 
			
		||||
#define GLIBTOP_TYPE_CHAR	5
 | 
			
		||||
#define GLIBTOP_TYPE_STRING	6
 | 
			
		||||
#define GLIBTOP_TYPE_UNSIGNED	5
 | 
			
		||||
#define GLIBTOP_TYPE_CHAR	6
 | 
			
		||||
#define GLIBTOP_TYPE_STRING	7
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -56,28 +58,28 @@ typedef union _glibtop_union	glibtop_union;
 | 
			
		||||
 | 
			
		||||
union _glibtop_union
 | 
			
		||||
{
 | 
			
		||||
	glibtop_cpu		cpu;
 | 
			
		||||
	glibtop_mem		mem;
 | 
			
		||||
	glibtop_swap		swap;
 | 
			
		||||
	glibtop_uptime		uptime;
 | 
			
		||||
	glibtop_loadavg		loadavg;
 | 
			
		||||
	glibtop_shm_limits	shm_limits;
 | 
			
		||||
	glibtop_msg_limits	msg_limits;
 | 
			
		||||
	glibtop_sem_limits	sem_limits;
 | 
			
		||||
	glibtop_proclist	proclist;
 | 
			
		||||
	glibtop_proc_state	proc_state;
 | 
			
		||||
	glibtop_proc_uid	proc_uid;
 | 
			
		||||
	glibtop_proc_mem	proc_mem;
 | 
			
		||||
	glibtop_proc_time	proc_time;
 | 
			
		||||
	glibtop_proc_signal	proc_signal;
 | 
			
		||||
	glibtop_proc_kernel	proc_kernel;
 | 
			
		||||
	glibtop_proc_segment	proc_segment;
 | 
			
		||||
	glibtop_proc_args	proc_args;
 | 
			
		||||
	glibtop_proc_map	proc_map;
 | 
			
		||||
	glibtop_mountlist	mountlist;
 | 
			
		||||
	glibtop_fsusage		fsusage;
 | 
			
		||||
	glibtop_netload		netload;
 | 
			
		||||
	glibtop_ppp		ppp;
 | 
			
		||||
    glibtop_cpu			cpu;
 | 
			
		||||
    glibtop_mem			mem;
 | 
			
		||||
    glibtop_swap		swap;
 | 
			
		||||
    glibtop_uptime		uptime;
 | 
			
		||||
    glibtop_loadavg		loadavg;
 | 
			
		||||
    glibtop_shm_limits		shm_limits;
 | 
			
		||||
    glibtop_msg_limits		msg_limits;
 | 
			
		||||
    glibtop_sem_limits		sem_limits;
 | 
			
		||||
    glibtop_proclist		proclist;
 | 
			
		||||
    glibtop_proc_state		proc_state;
 | 
			
		||||
    glibtop_proc_uid		proc_uid;
 | 
			
		||||
    glibtop_proc_mem		proc_mem;
 | 
			
		||||
    glibtop_proc_time		proc_time;
 | 
			
		||||
    glibtop_proc_signal		proc_signal;
 | 
			
		||||
    glibtop_proc_kernel		proc_kernel;
 | 
			
		||||
    glibtop_proc_segment	proc_segment;
 | 
			
		||||
    glibtop_proc_args		proc_args;
 | 
			
		||||
    glibtop_proc_map		proc_map;
 | 
			
		||||
    glibtop_mountlist		mountlist;
 | 
			
		||||
    glibtop_fsusage		fsusage;
 | 
			
		||||
    glibtop_netload		netload;
 | 
			
		||||
    glibtop_ppp			ppp;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
@@ -31,16 +33,18 @@ BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_UPTIME_UPTIME		0
 | 
			
		||||
#define GLIBTOP_UPTIME_IDLETIME		1
 | 
			
		||||
#define GLIBTOP_UPTIME_BOOT_TIME	2
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_UPTIME		2
 | 
			
		||||
#define GLIBTOP_MAX_UPTIME		3
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_uptime	glibtop_uptime;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_uptime
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags;
 | 
			
		||||
	double uptime,		/* GLIBTOP_UPTIME_UPTIME	*/
 | 
			
		||||
		idletime;	/* GLIBTOP_UPTIME_IDLETIME	*/
 | 
			
		||||
    u_int64_t flags;
 | 
			
		||||
    double uptime,		/* GLIBTOP_UPTIME_UPTIME	*/
 | 
			
		||||
	idletime;		/* GLIBTOP_UPTIME_IDLETIME	*/
 | 
			
		||||
    u_int64_t boot_time;	/* GLIBTOP_UPTIME_BOOT_TIME	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_uptime(uptime)	glibtop_get_uptime_l(glibtop_global_server, uptime)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +0,0 @@
 | 
			
		||||
1998-07-21  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* table20: New directory for 2.0.xx kernels.
 | 
			
		||||
 | 
			
		||||
	* table21: New directory for 2.1.xx kernels.
 | 
			
		||||
 | 
			
		||||
	* *: Moved into `table20' and `table21'.
 | 
			
		||||
 | 
			
		||||
1998-06-14  Martin Baulig  <baulig@taurus.uni-trier.de>
 | 
			
		||||
 | 
			
		||||
	* README: Added README.
 | 
			
		||||
 | 
			
		||||
	* kernel.patch: Patch for the Linux kernel to add the
 | 
			
		||||
	new system call.
 | 
			
		||||
							
								
								
									
										1
									
								
								kernel/sysctl/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								kernel/sysctl/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
*.flags
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
#
 | 
			
		||||
# Makefile for the linux system information tables.
 | 
			
		||||
# Makefile for the LibGTop linux sysctl interface.
 | 
			
		||||
#
 | 
			
		||||
# Note! Dependencies are done automagically by 'make dep', which also
 | 
			
		||||
# removes any old dependencies. DON'T put your own dependencies here
 | 
			
		||||
@@ -7,7 +7,16 @@
 | 
			
		||||
#
 | 
			
		||||
# Note 2! The CFLAGS definition is now in the main makefile...
 | 
			
		||||
 | 
			
		||||
O_TARGET := table.o
 | 
			
		||||
O_TARGET := kernel.o
 | 
			
		||||
ifeq ($(CONFIG_LIBGTOP),y)
 | 
			
		||||
O_OJBS   := main.o libgtop.o
 | 
			
		||||
else
 | 
			
		||||
O_OBJS   := main.o
 | 
			
		||||
endif
 | 
			
		||||
OX_OBJS  := libgtop_syms.o
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_LIBGTOP),m)
 | 
			
		||||
M_OBJS   := libgtop.o
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/Rules.make
 | 
			
		||||
							
								
								
									
										1268
									
								
								kernel/sysctl/libgtop.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1268
									
								
								kernel/sysctl/libgtop.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										242
									
								
								kernel/sysctl/libgtop.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										242
									
								
								kernel/sysctl/libgtop.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,242 @@
 | 
			
		||||
#ifndef _LINUX_LIBGTOP_H
 | 
			
		||||
#define _LINUX_LIBGTOP_H 1
 | 
			
		||||
 | 
			
		||||
#include <linux/tasks.h>
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    LIBGTOP_VERSION = 1,
 | 
			
		||||
    LIBGTOP_UPDATE_EXPENSIVE,
 | 
			
		||||
    LIBGTOP_STAT = 101,
 | 
			
		||||
    LIBGTOP_MEM,
 | 
			
		||||
    LIBGTOP_SWAP,
 | 
			
		||||
    LIBGTOP_PROCLIST = 201,
 | 
			
		||||
    LIBGTOP_PROC_STATE = 211,
 | 
			
		||||
    LIBGTOP_PROC_KERNEL,
 | 
			
		||||
    LIBGTOP_PROC_SEGMENT,
 | 
			
		||||
    LIBGTOP_PROC_MEM,
 | 
			
		||||
    LIBGTOP_PROC_SIGNAL,
 | 
			
		||||
    LIBGTOP_PROC_ARGS = 251,
 | 
			
		||||
    LIBGTOP_PROC_MAPS,
 | 
			
		||||
    LIBGTOP_NETLOAD = 301
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    LIBGTOP_PROCLIST_ALL = 0,
 | 
			
		||||
    LIBGTOP_PROCLIST_PID,
 | 
			
		||||
    LIBGTOP_PROCLIST_PGRP,
 | 
			
		||||
    LIBGTOP_PROCLIST_SESSION,
 | 
			
		||||
    LIBGTOP_PROCLIST_TTY,
 | 
			
		||||
    LIBGTOP_PROCLIST_UID,
 | 
			
		||||
    LIBGTOP_PROCLIST_RUID
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_NSIG			4
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_PROCLIST_MASK		15
 | 
			
		||||
#define LIBGTOP_MAX_GROUPS		32
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_EXCLUDE_IDLE		0x1000
 | 
			
		||||
#define LIBGTOP_EXCLUDE_SYSTEM		0x2000
 | 
			
		||||
#define LIBGTOP_EXCLUDE_NOTTY		0x4000
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_TASK_RUNNING		1
 | 
			
		||||
#define LIBGTOP_TASK_INTERRUPTIBLE	2
 | 
			
		||||
#define LIBGTOP_TASK_UNINTERRUPTIBLE	4
 | 
			
		||||
#define LIBGTOP_TASK_ZOMBIE		8
 | 
			
		||||
#define LIBGTOP_TASK_STOPPED		16
 | 
			
		||||
#define LIBGTOP_TASK_SWAPPING		32
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_VM_READ		0x0001	/* currently active flags */
 | 
			
		||||
#define LIBGTOP_VM_WRITE	0x0002
 | 
			
		||||
#define LIBGTOP_VM_EXEC		0x0004
 | 
			
		||||
#define LIBGTOP_VM_SHARED	0x0008
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_VM_MAYREAD	0x0010	/* limits for mprotect() etc */
 | 
			
		||||
#define LIBGTOP_VM_MAYWRITE	0x0020
 | 
			
		||||
#define LIBGTOP_VM_MAYEXEC	0x0040
 | 
			
		||||
#define LIBGTOP_VM_MAYSHARE	0x0080
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_VM_GROWSDOWN	0x0100	/* general info on the segment */
 | 
			
		||||
#define LIBGTOP_VM_GROWSUP	0x0200
 | 
			
		||||
#define LIBGTOP_VM_SHM		0x0400	/* shared memory area, don't swap out */
 | 
			
		||||
#define LIBGTOP_VM_DENYWRITE	0x0800	/* ETXTBSY on write attempts.. */
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_VM_EXECUTABLE	0x1000
 | 
			
		||||
#define LIBGTOP_VM_LOCKED	0x2000
 | 
			
		||||
#define LIBGTOP_VM_IO		0x4000  /* Memory mapped I/O or similar */
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_MAP_PATH_LEN	(PAGE_SIZE - sizeof (libgtop_proc_maps_header_t))
 | 
			
		||||
 | 
			
		||||
#ifndef min
 | 
			
		||||
#define min(a,b) ((a < b) ? a : b)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct libgtop_stat libgtop_stat_t;
 | 
			
		||||
 | 
			
		||||
typedef struct libgtop_cpu libgtop_cpu_t;
 | 
			
		||||
typedef struct libgtop_mem libgtop_mem_t;
 | 
			
		||||
typedef struct libgtop_swap libgtop_swap_t;
 | 
			
		||||
typedef struct libgtop_proclist libgtop_proclist_t;
 | 
			
		||||
 | 
			
		||||
typedef struct libgtop_proc_state libgtop_proc_state_t;
 | 
			
		||||
typedef struct libgtop_proc_kernel libgtop_proc_kernel_t;
 | 
			
		||||
typedef struct libgtop_proc_segment libgtop_proc_segment_t;
 | 
			
		||||
typedef struct libgtop_proc_mem libgtop_proc_mem_t;
 | 
			
		||||
typedef struct libgtop_proc_signal libgtop_proc_signal_t;
 | 
			
		||||
 | 
			
		||||
typedef struct libgtop_proc_maps_header libgtop_proc_maps_header_t;
 | 
			
		||||
typedef struct libgtop_proc_maps libgtop_proc_maps_t;
 | 
			
		||||
 | 
			
		||||
typedef struct libgtop_netload libgtop_netload_t;
 | 
			
		||||
 | 
			
		||||
struct libgtop_cpu
 | 
			
		||||
{
 | 
			
		||||
    unsigned long total;		/* Total CPU Time		*/
 | 
			
		||||
    unsigned long user;			/* CPU Time in User Mode	*/
 | 
			
		||||
    unsigned long nice;			/* CPU Time in User Mode (nice)	*/
 | 
			
		||||
    unsigned long sys;			/* CPU Time in System Mode	*/
 | 
			
		||||
    unsigned long idle;			/* CPU Time in the Idle Task	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_mem
 | 
			
		||||
{
 | 
			
		||||
    unsigned long totalram;		/* Total usable main memory size */
 | 
			
		||||
    unsigned long freeram;		/* Available memory size */
 | 
			
		||||
    unsigned long sharedram;		/* Amount of shared memory */
 | 
			
		||||
    unsigned long bufferram;		/* Memory used by buffers */
 | 
			
		||||
    unsigned long cachedram;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_swap
 | 
			
		||||
{
 | 
			
		||||
    unsigned long totalswap;		/* Total swap space size */
 | 
			
		||||
    unsigned long freeswap;		/* swap space still available */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proclist
 | 
			
		||||
{
 | 
			
		||||
    int count;
 | 
			
		||||
    int nr_running, nr_tasks, last_pid;
 | 
			
		||||
    unsigned pids [NR_TASKS];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_stat
 | 
			
		||||
{
 | 
			
		||||
    int ncpu;				/* Number of CPUs		*/
 | 
			
		||||
    unsigned long frequency;		/* Tick frequency (HZ)		*/
 | 
			
		||||
    libgtop_cpu_t cpu;			/* CPU statistics		*/
 | 
			
		||||
    libgtop_cpu_t xcpu [NR_CPUS];	/* SMP per-CPU statistics	*/
 | 
			
		||||
    double loadavg [3];			/* Load average			*/
 | 
			
		||||
    unsigned long total_forks;		/* Total # of forks		*/
 | 
			
		||||
    unsigned int context_swtch;		/* Total # of context switches	*/
 | 
			
		||||
    unsigned long boot_time;		/* Boot time (seconds s. epoch)	*/
 | 
			
		||||
    unsigned int pgpgin, pgpgout;	/* # of pages paged in/out	*/
 | 
			
		||||
    unsigned int pswpin, pswpout;	/* # of swap pgs brought in/out	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_state
 | 
			
		||||
{
 | 
			
		||||
    long state;
 | 
			
		||||
    unsigned long flags;
 | 
			
		||||
    char comm [16];
 | 
			
		||||
    int uid, euid, suid, fsuid;
 | 
			
		||||
    int gid, egid, sgid, fsgid;
 | 
			
		||||
    int pid, pgrp, ppid;
 | 
			
		||||
    int session;
 | 
			
		||||
    unsigned int tty;
 | 
			
		||||
    int tpgid;
 | 
			
		||||
    long priority, counter, def_priority;
 | 
			
		||||
    long utime, stime, cutime, cstime, start_time;
 | 
			
		||||
    long per_cpu_utime [NR_CPUS], per_cpu_stime [NR_CPUS];
 | 
			
		||||
    int has_cpu, processor, last_processor;
 | 
			
		||||
 | 
			
		||||
    unsigned long context;
 | 
			
		||||
    unsigned long start_code, end_code, start_data, end_data;
 | 
			
		||||
    unsigned long start_brk, brk, start_stack, start_mmap;
 | 
			
		||||
    unsigned long arg_start, arg_end, env_start, env_end;
 | 
			
		||||
    unsigned long rss, rlim, total_vm, locked_vm;
 | 
			
		||||
 | 
			
		||||
    unsigned long policy, rt_priority;
 | 
			
		||||
    unsigned long it_real_value, it_prof_value, it_virt_value;
 | 
			
		||||
    unsigned long it_real_incr, it_prof_incr, it_virt_incr;
 | 
			
		||||
 | 
			
		||||
    unsigned long keip, kesp;
 | 
			
		||||
    unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
 | 
			
		||||
    unsigned long nswap, cnswap;
 | 
			
		||||
 | 
			
		||||
    int ngroups, groups [LIBGTOP_MAX_GROUPS];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_kernel
 | 
			
		||||
{
 | 
			
		||||
    unsigned long wchan;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_segment
 | 
			
		||||
{
 | 
			
		||||
    unsigned long vsize, data, exec, stack, lib;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_mem
 | 
			
		||||
{
 | 
			
		||||
    libgtop_proc_segment_t segment;
 | 
			
		||||
    int size, resident, share, trs, lrs, drs, dt;
 | 
			
		||||
    unsigned long rss, rlim;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_signal
 | 
			
		||||
{
 | 
			
		||||
    unsigned long signal [LIBGTOP_NSIG];
 | 
			
		||||
    unsigned long blocked [LIBGTOP_NSIG];
 | 
			
		||||
    unsigned long ignore [LIBGTOP_NSIG];
 | 
			
		||||
    unsigned long catch [LIBGTOP_NSIG];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_maps_header
 | 
			
		||||
{
 | 
			
		||||
    unsigned long start, end, offset, perm;
 | 
			
		||||
    off_t filename_offset;
 | 
			
		||||
    ino_t inode;
 | 
			
		||||
    dev_t device;
 | 
			
		||||
} __attribute__ ((aligned (64)));
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_maps
 | 
			
		||||
{
 | 
			
		||||
    libgtop_proc_maps_header_t header;
 | 
			
		||||
    char filename [LIBGTOP_MAP_PATH_LEN];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_netload
 | 
			
		||||
{
 | 
			
		||||
    unsigned long rx_packets;		/* total packets received	*/
 | 
			
		||||
    unsigned long tx_packets;		/* total packets transmitted	*/
 | 
			
		||||
    unsigned long rx_bytes;		/* total bytes received 	*/
 | 
			
		||||
    unsigned long tx_bytes;		/* total bytes transmitted	*/
 | 
			
		||||
    unsigned long rx_errors;		/* bad packets received		*/
 | 
			
		||||
    unsigned long tx_errors;		/* packet transmit problems	*/
 | 
			
		||||
    unsigned long rx_dropped;		/* no space in linux buffers	*/
 | 
			
		||||
    unsigned long tx_dropped;		/* no space available in linux	*/
 | 
			
		||||
    unsigned long multicast;		/* multicast packets received	*/
 | 
			
		||||
    unsigned long collisions;
 | 
			
		||||
    
 | 
			
		||||
    /* detailed rx_errors: */
 | 
			
		||||
    unsigned long rx_length_errors;
 | 
			
		||||
    unsigned long rx_over_errors;	/* receiver ring buff overflow	*/
 | 
			
		||||
    unsigned long rx_crc_errors;	/* recved pkt with crc error	*/
 | 
			
		||||
    unsigned long rx_frame_errors;	/* recv'd frame alignment error */
 | 
			
		||||
    unsigned long rx_fifo_errors;	/* recv'r fifo overrun		*/
 | 
			
		||||
    unsigned long rx_missed_errors;	/* receiver missed packet	*/
 | 
			
		||||
    
 | 
			
		||||
    /* detailed tx_errors */
 | 
			
		||||
    unsigned long tx_aborted_errors;
 | 
			
		||||
    unsigned long tx_carrier_errors;
 | 
			
		||||
    unsigned long tx_fifo_errors;
 | 
			
		||||
    unsigned long tx_heartbeat_errors;
 | 
			
		||||
    unsigned long tx_window_errors;
 | 
			
		||||
    
 | 
			
		||||
    /* for cslip etc */
 | 
			
		||||
    unsigned long rx_compressed;
 | 
			
		||||
    unsigned long tx_compressed;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										30
									
								
								kernel/sysctl/libgtop_syms.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								kernel/sysctl/libgtop_syms.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
/*
 | 
			
		||||
 * linux/libgtop/libgtop_syms.c
 | 
			
		||||
 * Copyright (C) 1999 Martin Baulig
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/config.h>
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/sched.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/mm.h>
 | 
			
		||||
#include <linux/pagemap.h>
 | 
			
		||||
#include <linux/swap.h>
 | 
			
		||||
 | 
			
		||||
extern unsigned long total_forks;
 | 
			
		||||
 | 
			
		||||
EXPORT_SYMBOL(task);
 | 
			
		||||
EXPORT_SYMBOL(init_mm);
 | 
			
		||||
EXPORT_SYMBOL(pidhash);
 | 
			
		||||
EXPORT_SYMBOL(avenrun);
 | 
			
		||||
EXPORT_SYMBOL(nr_running);
 | 
			
		||||
EXPORT_SYMBOL(nr_tasks);
 | 
			
		||||
EXPORT_SYMBOL(last_pid);
 | 
			
		||||
EXPORT_SYMBOL(total_forks);
 | 
			
		||||
EXPORT_SYMBOL(si_swapinfo);
 | 
			
		||||
 | 
			
		||||
extern void scheduling_functions_start_here(void);
 | 
			
		||||
extern void scheduling_functions_end_here(void);
 | 
			
		||||
EXPORT_SYMBOL(scheduling_functions_start_here);
 | 
			
		||||
EXPORT_SYMBOL(scheduling_functions_end_here);
 | 
			
		||||
							
								
								
									
										4
									
								
								kernel/sysctl/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								kernel/sysctl/main.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
/*
 | 
			
		||||
 * linux/libgtop/main.c
 | 
			
		||||
 * Copyright (C) 1999 Martin Baulig
 | 
			
		||||
 */
 | 
			
		||||
							
								
								
									
										81
									
								
								kernel/sysctl/patch-2.2.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								kernel/sysctl/patch-2.2.1
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
diff -ru linux-2.2.1/Makefile hacker/Makefile
 | 
			
		||||
--- linux-2.2.1/Makefile	Sun Jan 31 22:45:42 1999
 | 
			
		||||
+++ hacker/Makefile	Sun Mar 21 16:10:41 1999
 | 
			
		||||
@@ -109,6 +109,7 @@
 | 
			
		||||
 DRIVERS		=drivers/block/block.a \
 | 
			
		||||
 		 drivers/char/char.a \
 | 
			
		||||
 	         drivers/misc/misc.a
 | 
			
		||||
+EXTRAS		=
 | 
			
		||||
 LIBS		=$(TOPDIR)/lib/lib.a
 | 
			
		||||
 SUBDIRS		=kernel drivers mm fs net ipc lib
 | 
			
		||||
 
 | 
			
		||||
@@ -186,6 +187,11 @@
 | 
			
		||||
 DRIVERS := $(DRIVERS) drivers/net/irda/irda_drivers.a
 | 
			
		||||
 endif
 | 
			
		||||
 
 | 
			
		||||
+ifdef CONFIG_LIBGTOP
 | 
			
		||||
+SUBDIRS := $(SUBDIRS) libgtop
 | 
			
		||||
+EXTRAS  := $(EXTRAS) libgtop/kernel.o
 | 
			
		||||
+endif
 | 
			
		||||
+
 | 
			
		||||
 include arch/$(ARCH)/Makefile
 | 
			
		||||
 
 | 
			
		||||
 .S.s:
 | 
			
		||||
@@ -206,6 +212,7 @@
 | 
			
		||||
 		$(FILESYSTEMS) \
 | 
			
		||||
 		$(NETWORKS) \
 | 
			
		||||
 		$(DRIVERS) \
 | 
			
		||||
+		$(EXTRAS) \
 | 
			
		||||
 		$(LIBS) \
 | 
			
		||||
 		--end-group \
 | 
			
		||||
 		-o vmlinux
 | 
			
		||||
diff -ru linux-2.2.1/arch/i386/config.in hacker/arch/i386/config.in
 | 
			
		||||
--- linux-2.2.1/arch/i386/config.in	Sun Jan 31 22:25:25 1999
 | 
			
		||||
+++ hacker/arch/i386/config.in	Sat Mar 20 18:26:18 1999
 | 
			
		||||
@@ -84,6 +84,9 @@
 | 
			
		||||
 bool 'System V IPC' CONFIG_SYSVIPC
 | 
			
		||||
 bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
 | 
			
		||||
 bool 'Sysctl support' CONFIG_SYSCTL
 | 
			
		||||
+if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
 | 
			
		||||
+  tristate 'LibGTop support' CONFIG_LIBGTOP
 | 
			
		||||
+fi
 | 
			
		||||
 tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
 | 
			
		||||
 tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
 | 
			
		||||
 tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
 | 
			
		||||
diff -ru linux-2.2.1/include/linux/sysctl.h hacker/include/linux/sysctl.h
 | 
			
		||||
--- linux-2.2.1/include/linux/sysctl.h	Sun Jan 31 22:24:14 1999
 | 
			
		||||
+++ hacker/include/linux/sysctl.h	Sat Mar 20 19:12:54 1999
 | 
			
		||||
@@ -56,7 +56,8 @@
 | 
			
		||||
 	CTL_PROC=4,		/* Process info */
 | 
			
		||||
 	CTL_FS=5,		/* Filesystems */
 | 
			
		||||
 	CTL_DEBUG=6,		/* Debugging */
 | 
			
		||||
-	CTL_DEV=7		/* Devices */
 | 
			
		||||
+	CTL_DEV=7,		/* Devices */
 | 
			
		||||
+	CTL_LIBGTOP=408		/* LibGTop */
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
diff -ru linux-2.2.1/kernel/sysctl.c hacker/kernel/sysctl.c
 | 
			
		||||
--- linux-2.2.1/kernel/sysctl.c	Sun Jan 31 22:24:43 1999
 | 
			
		||||
+++ hacker/kernel/sysctl.c	Sat Mar 20 19:24:34 1999
 | 
			
		||||
@@ -82,7 +82,9 @@
 | 
			
		||||
 static ctl_table fs_table[];
 | 
			
		||||
 static ctl_table debug_table[];
 | 
			
		||||
 static ctl_table dev_table[];
 | 
			
		||||
-
 | 
			
		||||
+#ifdef CONFIG_LIBGTOP
 | 
			
		||||
+extern ctl_table libgtop_table[];
 | 
			
		||||
+#endif
 | 
			
		||||
 
 | 
			
		||||
 /* /proc declarations: */
 | 
			
		||||
 
 | 
			
		||||
@@ -148,6 +150,9 @@
 | 
			
		||||
 	{CTL_FS, "fs", NULL, 0, 0555, fs_table},
 | 
			
		||||
 	{CTL_DEBUG, "debug", NULL, 0, 0555, debug_table},
 | 
			
		||||
         {CTL_DEV, "dev", NULL, 0, 0555, dev_table},
 | 
			
		||||
+#ifdef CONFIG_LIBGTOP
 | 
			
		||||
+	{CTL_LIBGTOP, "libgtop", NULL, 0, 0555, libgtop_table},
 | 
			
		||||
+#endif
 | 
			
		||||
 	{0}
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										188
									
								
								kernel/table.h
									
									
									
									
									
								
							
							
						
						
									
										188
									
								
								kernel/table.h
									
									
									
									
									
								
							@@ -1,188 +0,0 @@
 | 
			
		||||
#ifndef _LINUX_TABLE_H
 | 
			
		||||
#define _LINUX_TABLE_H
 | 
			
		||||
 | 
			
		||||
#ifdef _KERNEL
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#else
 | 
			
		||||
#define NR_TASKS		512
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define TABLE_KERN_PROC_ALL		0	/* all processes */
 | 
			
		||||
#define TABLE_KERN_PROC_PID		1
 | 
			
		||||
#define TABLE_KERN_PROC_PGRP		2
 | 
			
		||||
#define TABLE_KERN_PROC_SESSION		3
 | 
			
		||||
#define TABLE_KERN_PROC_TTY		4
 | 
			
		||||
#define TABLE_KERN_PROC_UID		5
 | 
			
		||||
#define TABLE_KERN_PROC_RUID		6
 | 
			
		||||
 | 
			
		||||
#define TABLE_KERN_PROC_MASK		15	
 | 
			
		||||
 | 
			
		||||
#define TABLE_EXCLUDE_IDLE		0x1000
 | 
			
		||||
#define TABLE_EXCLUDE_SYSTEM		0x2000
 | 
			
		||||
#define TABLE_EXCLUDE_NOTTY		0x4000
 | 
			
		||||
 | 
			
		||||
#define TABLE_VERSION		0
 | 
			
		||||
#define TABLE_CPU		1
 | 
			
		||||
#define TABLE_MEM		2
 | 
			
		||||
#define TABLE_SWAP		3
 | 
			
		||||
#define TABLE_LOADAVG		4
 | 
			
		||||
#define TABLE_UPTIME		5
 | 
			
		||||
#define TABLE_PROCLIST		6
 | 
			
		||||
#define TABLE_PROC_UID		7
 | 
			
		||||
#define TABLE_PROC_MEM		8
 | 
			
		||||
#define TABLE_PROC_SEGMENT	9
 | 
			
		||||
#define TABLE_PROC_TIME		10
 | 
			
		||||
#define TABLE_PROC_STATE	11
 | 
			
		||||
#define TABLE_PROC_SIGNAL	12
 | 
			
		||||
#define TABLE_PROC_KERNEL	13
 | 
			
		||||
 | 
			
		||||
/* CPU Usage (in jiffies = 1/100th seconds) */
 | 
			
		||||
 | 
			
		||||
struct table_cpu
 | 
			
		||||
{
 | 
			
		||||
	unsigned long total;		/* Total CPU Time		*/
 | 
			
		||||
	unsigned long user;		/* CPU Time in User Mode	*/
 | 
			
		||||
	unsigned long nice;		/* CPU Time in User Mode (nice)	*/
 | 
			
		||||
	unsigned long sys;		/* CPU Time in System Mode	*/
 | 
			
		||||
	unsigned long idle;		/* CPU Time in the Idle Task	*/
 | 
			
		||||
	unsigned long frequency;	/* Tick frequency		*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Memory Usage (in bytes) */
 | 
			
		||||
 | 
			
		||||
struct table_mem
 | 
			
		||||
{
 | 
			
		||||
	unsigned long total;		/* Total physical memory	*/
 | 
			
		||||
	unsigned long used;		/* Used memory size		*/
 | 
			
		||||
	unsigned long free;		/* Free memory size		*/
 | 
			
		||||
	unsigned long shared;		/* Shared memory size		*/
 | 
			
		||||
	unsigned long buffer;		/* Size of buffers		*/
 | 
			
		||||
	unsigned long cached;		/* Size of cached memory       	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Swap Space (in bytes) */
 | 
			
		||||
 | 
			
		||||
struct table_swap
 | 
			
		||||
{
 | 
			
		||||
	unsigned long total;		/* Total swap space		*/
 | 
			
		||||
	unsigned long used;		/* Used swap space		*/
 | 
			
		||||
	unsigned long free;		/* Free swap space		*/
 | 
			
		||||
	unsigned long pagein;		/* Total # of pages swapped in	*/
 | 
			
		||||
	unsigned long pageout;		/* Total # of pages swapped out	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Load average */
 | 
			
		||||
 | 
			
		||||
struct table_loadavg
 | 
			
		||||
{
 | 
			
		||||
	double loadavg [3];
 | 
			
		||||
	unsigned nr_running;
 | 
			
		||||
	unsigned nr_tasks;
 | 
			
		||||
	unsigned last_pid;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Uptime */
 | 
			
		||||
 | 
			
		||||
struct table_uptime
 | 
			
		||||
{
 | 
			
		||||
	unsigned long uptime;
 | 
			
		||||
	unsigned long idle;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Process list. */
 | 
			
		||||
 | 
			
		||||
struct proclist_args
 | 
			
		||||
{
 | 
			
		||||
	int which, arg;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proclist
 | 
			
		||||
{
 | 
			
		||||
	int nr_running, nr_tasks, last_pid;
 | 
			
		||||
	unsigned pids [NR_TASKS];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Information about processes. */
 | 
			
		||||
 | 
			
		||||
struct table_proc_state
 | 
			
		||||
{
 | 
			
		||||
	long state;
 | 
			
		||||
	unsigned long flags;
 | 
			
		||||
	char comm[16];
 | 
			
		||||
	int uid, gid;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proc_uid
 | 
			
		||||
{
 | 
			
		||||
	int uid, euid, suid, fsuid;
 | 
			
		||||
	int gid, egid, sgid, fsgid;
 | 
			
		||||
	int pid, pgrp, ppid;
 | 
			
		||||
	int session;
 | 
			
		||||
	unsigned int tty;
 | 
			
		||||
	int tpgid;
 | 
			
		||||
	long priority;
 | 
			
		||||
	long counter;
 | 
			
		||||
	long def_priority;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proc_mem
 | 
			
		||||
{
 | 
			
		||||
	unsigned long context;
 | 
			
		||||
	unsigned long start_code, end_code, start_data, end_data;
 | 
			
		||||
	unsigned long start_brk, brk, start_stack, start_mmap;
 | 
			
		||||
	unsigned long arg_start, arg_end, env_start, env_end;
 | 
			
		||||
	unsigned long rss, rlim, total_vm, locked_vm;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proc_segment
 | 
			
		||||
{
 | 
			
		||||
	unsigned long vsize;
 | 
			
		||||
	unsigned long size, resident, shared;
 | 
			
		||||
	unsigned long trs, lrs, drs, srs, dt;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proc_time
 | 
			
		||||
{
 | 
			
		||||
	long utime, stime, cutime, cstime, start_time;
 | 
			
		||||
	unsigned long timeout, policy, rt_priority;
 | 
			
		||||
	unsigned long it_real_value, it_prof_value, it_virt_value;
 | 
			
		||||
	unsigned long it_real_incr, it_prof_incr, it_virt_incr;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proc_signal
 | 
			
		||||
{
 | 
			
		||||
	unsigned long long signal,
 | 
			
		||||
		blocked,	/* bitmap of masked signals */
 | 
			
		||||
		ignored,	/* mask of ignored signals */
 | 
			
		||||
		caught;		/* mask of caught signals */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proc_kernel
 | 
			
		||||
{
 | 
			
		||||
	unsigned long keip, kesp, wchan;
 | 
			
		||||
	unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
 | 
			
		||||
	unsigned long nswap, cnswap;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Union */
 | 
			
		||||
 | 
			
		||||
union table
 | 
			
		||||
{
 | 
			
		||||
	struct table_cpu cpu;
 | 
			
		||||
	struct table_mem mem;
 | 
			
		||||
	struct table_swap swap;
 | 
			
		||||
	struct table_loadavg loadavg;
 | 
			
		||||
	struct table_uptime uptime;
 | 
			
		||||
	struct table_proclist proclist;
 | 
			
		||||
	struct table_proc_uid proc_uid;
 | 
			
		||||
	struct table_proc_mem proc_mem;
 | 
			
		||||
	struct table_proc_segment proc_segment;
 | 
			
		||||
	struct table_proc_time proc_time;
 | 
			
		||||
	struct table_proc_state proc_state;	
 | 
			
		||||
	struct table_proc_signal proc_signal;
 | 
			
		||||
	struct table_proc_kernel proc_kernel;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* _LINUX_IPC_H */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1,21 +0,0 @@
 | 
			
		||||
This is a new system call `table ()' for the Linux table. It is faster
 | 
			
		||||
than reading from /proc and can be used to fetch all information required
 | 
			
		||||
for libgtop until whe have some other function (extended sysctl, ...) in
 | 
			
		||||
standard kernels.
 | 
			
		||||
 | 
			
		||||
I didn't want to change sysctl or some other function myself cause this may
 | 
			
		||||
cause other applications relying upon those function to fail. This is
 | 
			
		||||
something for the ``real'' kernel gurus ...
 | 
			
		||||
 | 
			
		||||
To use this new system call for libgtop, do the following:
 | 
			
		||||
 | 
			
		||||
* Copy this directory to /usr/src/linux/table
 | 
			
		||||
* Make /usr/src/linux/include/linux/table.h symlink to /usr/src/linux/table/table.h
 | 
			
		||||
* Apply the patch `kernel.patch' to the kernel, compile, install and reboot
 | 
			
		||||
* Recompile libgtop (remove `config.cache' and run the `autogen.sh' again).
 | 
			
		||||
 | 
			
		||||
If you want to change and/or add something - feel free to do so !
 | 
			
		||||
 | 
			
		||||
Have fun,
 | 
			
		||||
 | 
			
		||||
Martin
 | 
			
		||||
@@ -1,706 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  linux/arch/i386/entry.S
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 1991, 1992  Linus Torvalds
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * entry.S contains the system-call and fault low-level handling routines.
 | 
			
		||||
 * This also contains the timer-interrupt handler, as well as all interrupts
 | 
			
		||||
 * and faults that can result in a task-switch.
 | 
			
		||||
 *
 | 
			
		||||
 * NOTE: This code handles signal-recognition, which happens every time
 | 
			
		||||
 * after a timer-interrupt and after each system call.
 | 
			
		||||
 *
 | 
			
		||||
 * I changed all the .align's to 4 (16 byte alignment), as that's faster
 | 
			
		||||
 * on a 486.
 | 
			
		||||
 *
 | 
			
		||||
 * Stack layout in 'ret_from_system_call':
 | 
			
		||||
 * 	ptrace needs to have all regs on the stack.
 | 
			
		||||
 *	if the order here is changed, it needs to be 
 | 
			
		||||
 *	updated in fork.c:copy_process, signal.c:do_signal,
 | 
			
		||||
 *	ptrace.c and ptrace.h
 | 
			
		||||
 *
 | 
			
		||||
 *	 0(%esp) - %ebx
 | 
			
		||||
 *	 4(%esp) - %ecx
 | 
			
		||||
 *	 8(%esp) - %edx
 | 
			
		||||
 *       C(%esp) - %esi
 | 
			
		||||
 *	10(%esp) - %edi
 | 
			
		||||
 *	14(%esp) - %ebp
 | 
			
		||||
 *	18(%esp) - %eax
 | 
			
		||||
 *	1C(%esp) - %ds
 | 
			
		||||
 *	20(%esp) - %es
 | 
			
		||||
 *      24(%esp) - %fs
 | 
			
		||||
 *	28(%esp) - %gs
 | 
			
		||||
 *	2C(%esp) - orig_eax
 | 
			
		||||
 *	30(%esp) - %eip
 | 
			
		||||
 *	34(%esp) - %cs
 | 
			
		||||
 *	38(%esp) - %eflags
 | 
			
		||||
 *	3C(%esp) - %oldesp
 | 
			
		||||
 *	40(%esp) - %oldss
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/sys.h>
 | 
			
		||||
#include <linux/linkage.h>
 | 
			
		||||
#include <asm/segment.h>
 | 
			
		||||
#define ASSEMBLY
 | 
			
		||||
#include <asm/smp.h>
 | 
			
		||||
 | 
			
		||||
EBX		= 0x00
 | 
			
		||||
ECX		= 0x04
 | 
			
		||||
EDX		= 0x08
 | 
			
		||||
ESI		= 0x0C
 | 
			
		||||
EDI		= 0x10
 | 
			
		||||
EBP		= 0x14
 | 
			
		||||
EAX		= 0x18
 | 
			
		||||
DS		= 0x1C
 | 
			
		||||
ES		= 0x20
 | 
			
		||||
FS		= 0x24
 | 
			
		||||
GS		= 0x28
 | 
			
		||||
ORIG_EAX	= 0x2C
 | 
			
		||||
EIP		= 0x30
 | 
			
		||||
CS		= 0x34
 | 
			
		||||
EFLAGS		= 0x38
 | 
			
		||||
OLDESP		= 0x3C
 | 
			
		||||
OLDSS		= 0x40
 | 
			
		||||
 | 
			
		||||
CF_MASK		= 0x00000001
 | 
			
		||||
IF_MASK		= 0x00000200
 | 
			
		||||
NT_MASK		= 0x00004000
 | 
			
		||||
VM_MASK		= 0x00020000
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * these are offsets into the task-struct.
 | 
			
		||||
 */
 | 
			
		||||
state		=  0
 | 
			
		||||
counter		=  4
 | 
			
		||||
priority	=  8
 | 
			
		||||
signal		= 12
 | 
			
		||||
blocked		= 16
 | 
			
		||||
flags		= 20
 | 
			
		||||
dbgreg6		= 52
 | 
			
		||||
dbgreg7		= 56
 | 
			
		||||
exec_domain	= 60
 | 
			
		||||
 | 
			
		||||
ENOSYS = 38
 | 
			
		||||
 | 
			
		||||
#define SAVE_ALL \
 | 
			
		||||
	cld; \
 | 
			
		||||
	push %gs; \
 | 
			
		||||
	push %fs; \
 | 
			
		||||
	push %es; \
 | 
			
		||||
	push %ds; \
 | 
			
		||||
	pushl %eax; \
 | 
			
		||||
	pushl %ebp; \
 | 
			
		||||
	pushl %edi; \
 | 
			
		||||
	pushl %esi; \
 | 
			
		||||
	pushl %edx; \
 | 
			
		||||
	pushl %ecx; \
 | 
			
		||||
	pushl %ebx; \
 | 
			
		||||
	movl $(KERNEL_DS),%edx; \
 | 
			
		||||
	mov %dx,%ds; \
 | 
			
		||||
	mov %dx,%es; \
 | 
			
		||||
	movl $(USER_DS),%edx; \
 | 
			
		||||
	mov %dx,%fs;
 | 
			
		||||
 | 
			
		||||
#ifdef	__SMP__
 | 
			
		||||
 | 
			
		||||
#define GET_PROCESSOR_ID \
 | 
			
		||||
	movl SYMBOL_NAME(apic_reg), %edx; \
 | 
			
		||||
	movl 32(%edx), %eax;\
 | 
			
		||||
	movl %eax,SYMBOL_NAME(apic_retval); \
 | 
			
		||||
	shrl $24,%eax; \
 | 
			
		||||
	andb $0x0F,%al;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	Get the processor ID multiplied by 4
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define GET_PROCESSOR_OFFSET(x) \
 | 
			
		||||
	movl SYMBOL_NAME(apic_reg), x ; \
 | 
			
		||||
	movl 32( x ), x ; \
 | 
			
		||||
	shrl $22, x ; \
 | 
			
		||||
	andl $0x3C, x ;
 | 
			
		||||
 | 
			
		||||
/* macro LEAVE_KERNEL decrements kernel_counter and resets kernel_flag and
 | 
			
		||||
   saves processor variables if zero */
 | 
			
		||||
#define	LEAVE_KERNEL \
 | 
			
		||||
	pushfl; \
 | 
			
		||||
	cli; \
 | 
			
		||||
	GET_PROCESSOR_ID \
 | 
			
		||||
	btrl $ SMP_FROM_SYSCALL,SYMBOL_NAME(smp_proc_in_lock)(,%eax,4); \
 | 
			
		||||
	decl SYMBOL_NAME(syscall_count); \
 | 
			
		||||
	decl SYMBOL_NAME(kernel_counter); \
 | 
			
		||||
	jnz 1f;	\
 | 
			
		||||
	movb SYMBOL_NAME(saved_active_kernel_processor), %al; \
 | 
			
		||||
	movb %al, SYMBOL_NAME(active_kernel_processor); \
 | 
			
		||||
	cmpb $(NO_PROC_ID), %al; \
 | 
			
		||||
	jnz 1f; \
 | 
			
		||||
	lock; \
 | 
			
		||||
	btrl $0, SYMBOL_NAME(kernel_flag); \
 | 
			
		||||
1:	popfl;
 | 
			
		||||
 | 
			
		||||
/* macro ENTER_KERNEL waits for entering the kernel, increments
 | 
			
		||||
   kernel_counter, and reloads the processor variables if necessary
 | 
			
		||||
   uses : %eax, %edx (pushed and popped) 
 | 
			
		||||
 | 
			
		||||
   Note: We go to great pains to minimise the number of locked operations.
 | 
			
		||||
   We want to spin without locking, and lock when we attempt an update.
 | 
			
		||||
   The pentium has a MESI cache so the spin without lock will exit when
 | 
			
		||||
   another CPU write invalidates our cache, and the lock is avoided when
 | 
			
		||||
   possible so we don't play ping-pong games with the cache line.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __SMP_PROF__
 | 
			
		||||
 | 
			
		||||
#define SMP_PROF_A
 | 
			
		||||
#define SMP_PROF_B 
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define SMP_PROF_A movl $0,SYMBOL_NAME(smp_spins_syscall_cur)(,%eax,4);
 | 
			
		||||
#define SMP_PROF_B incl SYMBOL_NAME(smp_spins_syscall)(,%eax,4); \
 | 
			
		||||
        incl SYMBOL_NAME(smp_spins_syscall_cur)(,%eax,4);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define	ENTER_KERNEL \
 | 
			
		||||
	pushl %eax; \
 | 
			
		||||
	pushl %ebx; \
 | 
			
		||||
	pushl %ecx; \
 | 
			
		||||
	pushl %edx; \
 | 
			
		||||
	pushfl; \
 | 
			
		||||
	cli; \
 | 
			
		||||
	movl $6000, %ebx; \
 | 
			
		||||
	movl SYMBOL_NAME(smp_loops_per_tick), %ecx; \
 | 
			
		||||
	GET_PROCESSOR_ID \
 | 
			
		||||
	btsl $ SMP_FROM_SYSCALL,SYMBOL_NAME(smp_proc_in_lock)(,%eax,4); \
 | 
			
		||||
	SMP_PROF_A \
 | 
			
		||||
1:	lock; \
 | 
			
		||||
	btsl $0, SYMBOL_NAME(kernel_flag); \
 | 
			
		||||
	jnc 3f; \
 | 
			
		||||
	cmpb SYMBOL_NAME(active_kernel_processor), %al; \
 | 
			
		||||
	je 4f; \
 | 
			
		||||
2:	SMP_PROF_B \
 | 
			
		||||
	btl %eax, SYMBOL_NAME(smp_invalidate_needed); \
 | 
			
		||||
	jnc 5f; \
 | 
			
		||||
	lock; \
 | 
			
		||||
	btrl %eax, SYMBOL_NAME(smp_invalidate_needed); \
 | 
			
		||||
	jnc 5f; \
 | 
			
		||||
	movl %cr3,%edx; \
 | 
			
		||||
	movl %edx,%cr3; \
 | 
			
		||||
5:	sti; \
 | 
			
		||||
	decl %ecx; \
 | 
			
		||||
	cli; \
 | 
			
		||||
	jne 7f; \
 | 
			
		||||
	decl %ebx; \
 | 
			
		||||
	jne 6f; \
 | 
			
		||||
	call SYMBOL_NAME(non_irq_deadlock_detected); \
 | 
			
		||||
6:	movl SYMBOL_NAME(smp_loops_per_tick), %ecx; \
 | 
			
		||||
	cmpb SYMBOL_NAME(boot_cpu_id), %al; \
 | 
			
		||||
	jne 7f; \
 | 
			
		||||
	incl SYMBOL_NAME(jiffies);  \
 | 
			
		||||
7:	btl $0, SYMBOL_NAME(kernel_flag); \
 | 
			
		||||
	jc 2b; \
 | 
			
		||||
	jmp 1b; \
 | 
			
		||||
3:	movb %al, SYMBOL_NAME(active_kernel_processor); \
 | 
			
		||||
4:	incl SYMBOL_NAME(kernel_counter); \
 | 
			
		||||
	incl SYMBOL_NAME(syscall_count); \
 | 
			
		||||
	popfl; \
 | 
			
		||||
	popl %edx; \
 | 
			
		||||
	popl %ecx; \
 | 
			
		||||
	popl %ebx; \
 | 
			
		||||
	popl %eax;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define RESTORE_ALL \
 | 
			
		||||
	cmpw $(KERNEL_CS),CS(%esp); \
 | 
			
		||||
	je 1f;   \
 | 
			
		||||
	GET_PROCESSOR_OFFSET(%edx) \
 | 
			
		||||
	movl SYMBOL_NAME(current_set)(,%edx), %eax ; ; \
 | 
			
		||||
	movl dbgreg7(%eax),%ebx; \
 | 
			
		||||
	movl %ebx,%db7;	\
 | 
			
		||||
1:	LEAVE_KERNEL \
 | 
			
		||||
	popl %ebx; \
 | 
			
		||||
	popl %ecx; \
 | 
			
		||||
	popl %edx; \
 | 
			
		||||
	popl %esi; \
 | 
			
		||||
	popl %edi; \
 | 
			
		||||
	popl %ebp; \
 | 
			
		||||
	popl %eax; \
 | 
			
		||||
	pop %ds; \
 | 
			
		||||
	pop %es; \
 | 
			
		||||
	pop %fs; \
 | 
			
		||||
	pop %gs; \
 | 
			
		||||
	addl $4,%esp; \
 | 
			
		||||
	iret
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define RESTORE_ALL \
 | 
			
		||||
	cmpw $(KERNEL_CS),CS(%esp); \
 | 
			
		||||
	je 1f;   \
 | 
			
		||||
	movl SYMBOL_NAME(current_set),%eax; \
 | 
			
		||||
	movl dbgreg7(%eax),%ebx; \
 | 
			
		||||
	movl %ebx,%db7;	\
 | 
			
		||||
1:	\
 | 
			
		||||
	popl %ebx; \
 | 
			
		||||
	popl %ecx; \
 | 
			
		||||
	popl %edx; \
 | 
			
		||||
	popl %esi; \
 | 
			
		||||
	popl %edi; \
 | 
			
		||||
	popl %ebp; \
 | 
			
		||||
	popl %eax; \
 | 
			
		||||
	pop %ds; \
 | 
			
		||||
	pop %es; \
 | 
			
		||||
	pop %fs; \
 | 
			
		||||
	pop %gs; \
 | 
			
		||||
	addl $4,%esp; \
 | 
			
		||||
	iret
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
ENTRY(lcall7)
 | 
			
		||||
	pushfl			# We get a different stack layout with call gates,
 | 
			
		||||
	pushl %eax		# which has to be cleaned up later..
 | 
			
		||||
	SAVE_ALL
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	ENTER_KERNEL
 | 
			
		||||
#endif
 | 
			
		||||
	movl EIP(%esp),%eax	# due to call gates, this is eflags, not eip..
 | 
			
		||||
	movl CS(%esp),%edx	# this is eip..
 | 
			
		||||
	movl EFLAGS(%esp),%ecx	# and this is cs..
 | 
			
		||||
	movl %eax,EFLAGS(%esp)	#
 | 
			
		||||
	movl %edx,EIP(%esp)	# Now we move them to their "normal" places
 | 
			
		||||
	movl %ecx,CS(%esp)	#
 | 
			
		||||
	movl %esp,%eax
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	GET_PROCESSOR_OFFSET(%edx)	# Processor offset into edx
 | 
			
		||||
	movl SYMBOL_NAME(current_set)(,%edx),%edx
 | 
			
		||||
#else
 | 
			
		||||
	movl SYMBOL_NAME(current_set),%edx
 | 
			
		||||
#endif
 | 
			
		||||
	pushl %eax
 | 
			
		||||
	movl exec_domain(%edx),%edx	# Get the execution domain
 | 
			
		||||
	movl 4(%edx),%edx	# Get the lcall7 handler for the domain
 | 
			
		||||
	call *%edx
 | 
			
		||||
	popl %eax
 | 
			
		||||
	jmp ret_from_sys_call
 | 
			
		||||
 | 
			
		||||
	ALIGN
 | 
			
		||||
handle_bottom_half:
 | 
			
		||||
	incl SYMBOL_NAME(intr_count)
 | 
			
		||||
	call SYMBOL_NAME(do_bottom_half)
 | 
			
		||||
	decl SYMBOL_NAME(intr_count)
 | 
			
		||||
	jmp 9f
 | 
			
		||||
	ALIGN
 | 
			
		||||
reschedule:
 | 
			
		||||
	pushl $ret_from_sys_call
 | 
			
		||||
	jmp SYMBOL_NAME(schedule)    # test
 | 
			
		||||
 | 
			
		||||
ENTRY(system_call)
 | 
			
		||||
	pushl %eax			# save orig_eax
 | 
			
		||||
	SAVE_ALL
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	ENTER_KERNEL
 | 
			
		||||
#endif
 | 
			
		||||
	movl $-ENOSYS,EAX(%esp)
 | 
			
		||||
	cmpl $(NR_syscalls),%eax
 | 
			
		||||
	jae ret_from_sys_call
 | 
			
		||||
	movl SYMBOL_NAME(sys_call_table)(,%eax,4),%eax
 | 
			
		||||
	testl %eax,%eax
 | 
			
		||||
	je ret_from_sys_call
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	GET_PROCESSOR_OFFSET(%edx)
 | 
			
		||||
	movl SYMBOL_NAME(current_set)(,%edx),%ebx
 | 
			
		||||
#else
 | 
			
		||||
	movl SYMBOL_NAME(current_set),%ebx
 | 
			
		||||
#endif
 | 
			
		||||
	andl $~CF_MASK,EFLAGS(%esp)	# clear carry - assume no errors
 | 
			
		||||
	movl %db6,%edx
 | 
			
		||||
	movl %edx,dbgreg6(%ebx)  # save current hardware debugging status
 | 
			
		||||
	testb $0x20,flags(%ebx)		# PF_TRACESYS
 | 
			
		||||
	jne 1f
 | 
			
		||||
	call *%eax
 | 
			
		||||
	movl %eax,EAX(%esp)		# save the return value
 | 
			
		||||
	jmp ret_from_sys_call
 | 
			
		||||
	ALIGN
 | 
			
		||||
1:	call SYMBOL_NAME(syscall_trace)
 | 
			
		||||
	movl ORIG_EAX(%esp),%eax
 | 
			
		||||
	call SYMBOL_NAME(sys_call_table)(,%eax,4)
 | 
			
		||||
	movl %eax,EAX(%esp)		# save the return value
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	GET_PROCESSOR_OFFSET(%eax)
 | 
			
		||||
	movl SYMBOL_NAME(current_set)(,%eax),%eax
 | 
			
		||||
#else
 | 
			
		||||
	movl SYMBOL_NAME(current_set),%eax
 | 
			
		||||
#endif
 | 
			
		||||
	call SYMBOL_NAME(syscall_trace)
 | 
			
		||||
 | 
			
		||||
	ALIGN
 | 
			
		||||
	.globl ret_from_sys_call
 | 
			
		||||
ret_from_sys_call:
 | 
			
		||||
	cmpl $0,SYMBOL_NAME(intr_count)
 | 
			
		||||
	jne 2f
 | 
			
		||||
9:	movl SYMBOL_NAME(bh_mask),%eax
 | 
			
		||||
	andl SYMBOL_NAME(bh_active),%eax
 | 
			
		||||
	jne handle_bottom_half
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	cmpb $(NO_PROC_ID), SYMBOL_NAME(saved_active_kernel_processor)
 | 
			
		||||
	jne 2f
 | 
			
		||||
#endif
 | 
			
		||||
	movl EFLAGS(%esp),%eax		# check VM86 flag: CS/SS are
 | 
			
		||||
	testl $(VM_MASK),%eax		# different then
 | 
			
		||||
	jne 1f
 | 
			
		||||
	cmpw $(KERNEL_CS),CS(%esp)	# was old code segment supervisor ?
 | 
			
		||||
	je 2f
 | 
			
		||||
1:	sti
 | 
			
		||||
	orl $(IF_MASK),%eax		# these just try to make sure
 | 
			
		||||
	andl $~NT_MASK,%eax		# the program doesn't do anything
 | 
			
		||||
	movl %eax,EFLAGS(%esp)		# stupid
 | 
			
		||||
	cmpl $0,SYMBOL_NAME(need_resched)
 | 
			
		||||
	jne reschedule
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	GET_PROCESSOR_OFFSET(%eax)
 | 
			
		||||
	movl SYMBOL_NAME(current_set)(,%eax), %eax
 | 
			
		||||
#else
 | 
			
		||||
	movl SYMBOL_NAME(current_set),%eax
 | 
			
		||||
#endif
 | 
			
		||||
	cmpl SYMBOL_NAME(task),%eax	# task[0] cannot have signals
 | 
			
		||||
	je 2f
 | 
			
		||||
	movl blocked(%eax),%ecx
 | 
			
		||||
	movl %ecx,%ebx			# save blocked in %ebx for signal handling
 | 
			
		||||
	notl %ecx
 | 
			
		||||
	andl signal(%eax),%ecx
 | 
			
		||||
	jne signal_return
 | 
			
		||||
2:	RESTORE_ALL
 | 
			
		||||
	ALIGN
 | 
			
		||||
signal_return:
 | 
			
		||||
	movl %esp,%ecx
 | 
			
		||||
	pushl %ecx
 | 
			
		||||
	testl $(VM_MASK),EFLAGS(%ecx)
 | 
			
		||||
	jne v86_signal_return
 | 
			
		||||
	pushl %ebx
 | 
			
		||||
	call SYMBOL_NAME(do_signal)
 | 
			
		||||
	popl %ebx
 | 
			
		||||
	popl %ebx
 | 
			
		||||
	RESTORE_ALL
 | 
			
		||||
	ALIGN
 | 
			
		||||
v86_signal_return:
 | 
			
		||||
	call SYMBOL_NAME(save_v86_state)
 | 
			
		||||
	movl %eax,%esp
 | 
			
		||||
	pushl %eax
 | 
			
		||||
	pushl %ebx
 | 
			
		||||
	call SYMBOL_NAME(do_signal)
 | 
			
		||||
	popl %ebx
 | 
			
		||||
	popl %ebx
 | 
			
		||||
	RESTORE_ALL
 | 
			
		||||
 | 
			
		||||
ENTRY(divide_error)
 | 
			
		||||
	pushl $0		# no error code
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_divide_error)
 | 
			
		||||
	ALIGN
 | 
			
		||||
error_code:
 | 
			
		||||
	push %fs
 | 
			
		||||
	push %es
 | 
			
		||||
	push %ds
 | 
			
		||||
	pushl %eax
 | 
			
		||||
	xorl %eax,%eax
 | 
			
		||||
	pushl %ebp
 | 
			
		||||
	pushl %edi
 | 
			
		||||
	pushl %esi
 | 
			
		||||
	pushl %edx
 | 
			
		||||
	decl %eax			# eax = -1
 | 
			
		||||
	pushl %ecx
 | 
			
		||||
	pushl %ebx
 | 
			
		||||
	cld
 | 
			
		||||
	xorl %ebx,%ebx			# zero ebx
 | 
			
		||||
	xchgl %eax, ORIG_EAX(%esp)	# orig_eax (get the error code. )
 | 
			
		||||
	mov %gs,%bx			# get the lower order bits of gs
 | 
			
		||||
	movl %esp,%edx
 | 
			
		||||
	xchgl %ebx, GS(%esp)		# get the address and save gs.
 | 
			
		||||
	pushl %eax			# push the error code
 | 
			
		||||
	pushl %edx
 | 
			
		||||
	movl $(KERNEL_DS),%edx
 | 
			
		||||
	mov %dx,%ds
 | 
			
		||||
	mov %dx,%es
 | 
			
		||||
	movl $(USER_DS),%edx
 | 
			
		||||
	mov %dx,%fs
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	ENTER_KERNEL
 | 
			
		||||
	GET_PROCESSOR_OFFSET(%eax)
 | 
			
		||||
	movl SYMBOL_NAME(current_set)(,%eax), %eax
 | 
			
		||||
#else
 | 
			
		||||
	movl SYMBOL_NAME(current_set),%eax
 | 
			
		||||
#endif
 | 
			
		||||
	movl %db6,%edx
 | 
			
		||||
	movl %edx,dbgreg6(%eax)  # save current hardware debugging status
 | 
			
		||||
	call *%ebx
 | 
			
		||||
	addl $8,%esp
 | 
			
		||||
	jmp ret_from_sys_call
 | 
			
		||||
 | 
			
		||||
ENTRY(coprocessor_error)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_coprocessor_error)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(device_not_available)
 | 
			
		||||
	pushl $-1		# mark this as an int
 | 
			
		||||
	SAVE_ALL
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	ENTER_KERNEL
 | 
			
		||||
#endif
 | 
			
		||||
	pushl $ret_from_sys_call
 | 
			
		||||
	movl %cr0,%eax
 | 
			
		||||
	testl $0x4,%eax			# EM (math emulation bit)
 | 
			
		||||
	je SYMBOL_NAME(math_state_restore)
 | 
			
		||||
	pushl $0		# temporary storage for ORIG_EIP
 | 
			
		||||
	call  SYMBOL_NAME(math_emulate)
 | 
			
		||||
	addl $4,%esp
 | 
			
		||||
	ret
 | 
			
		||||
 | 
			
		||||
ENTRY(debug)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_debug)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(nmi)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_nmi)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(int3)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_int3)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(overflow)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_overflow)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(bounds)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_bounds)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(invalid_op)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_invalid_op)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(coprocessor_segment_overrun)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(reserved)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_reserved)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(double_fault)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_double_fault)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(invalid_TSS)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_invalid_TSS)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(segment_not_present)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_segment_not_present)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(stack_segment)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_stack_segment)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(general_protection)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_general_protection)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(alignment_check)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_alignment_check)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(page_fault)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_page_fault)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(spurious_interrupt_bug)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_spurious_interrupt_bug)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
.data
 | 
			
		||||
ENTRY(sys_call_table)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setup)		/* 0 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_exit)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fork)
 | 
			
		||||
	.long SYMBOL_NAME(sys_read)
 | 
			
		||||
	.long SYMBOL_NAME(sys_write)
 | 
			
		||||
	.long SYMBOL_NAME(sys_open)		/* 5 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_close)
 | 
			
		||||
	.long SYMBOL_NAME(sys_waitpid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_creat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_link)
 | 
			
		||||
	.long SYMBOL_NAME(sys_unlink)		/* 10 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_execve)
 | 
			
		||||
	.long SYMBOL_NAME(sys_chdir)
 | 
			
		||||
	.long SYMBOL_NAME(sys_time)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mknod)
 | 
			
		||||
	.long SYMBOL_NAME(sys_chmod)		/* 15 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_chown)
 | 
			
		||||
	.long SYMBOL_NAME(sys_break)
 | 
			
		||||
	.long SYMBOL_NAME(sys_stat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_lseek)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpid)		/* 20 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_mount)
 | 
			
		||||
	.long SYMBOL_NAME(sys_umount)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_stime)		/* 25 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ptrace)
 | 
			
		||||
	.long SYMBOL_NAME(sys_alarm)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_pause)
 | 
			
		||||
	.long SYMBOL_NAME(sys_utime)		/* 30 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_stty)
 | 
			
		||||
	.long SYMBOL_NAME(sys_gtty)
 | 
			
		||||
	.long SYMBOL_NAME(sys_access)
 | 
			
		||||
	.long SYMBOL_NAME(sys_nice)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ftime)		/* 35 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_kill)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rename)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mkdir)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rmdir)		/* 40 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_dup)
 | 
			
		||||
	.long SYMBOL_NAME(sys_pipe)
 | 
			
		||||
	.long SYMBOL_NAME(sys_times)
 | 
			
		||||
	.long SYMBOL_NAME(sys_prof)
 | 
			
		||||
	.long SYMBOL_NAME(sys_brk)		/* 45 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_signal)
 | 
			
		||||
	.long SYMBOL_NAME(sys_geteuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getegid)		/* 50 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_acct)
 | 
			
		||||
	.long SYMBOL_NAME(sys_phys)
 | 
			
		||||
	.long SYMBOL_NAME(sys_lock)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ioctl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fcntl)		/* 55 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_mpx)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setpgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ulimit)
 | 
			
		||||
	.long SYMBOL_NAME(sys_olduname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_umask)		/* 60 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_chroot)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ustat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_dup2)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getppid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpgrp)		/* 65 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setsid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigaction)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sgetmask)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ssetmask)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setreuid)		/* 70 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setregid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigsuspend)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigpending)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sethostname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setrlimit)	/* 75 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getrlimit)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getrusage)
 | 
			
		||||
	.long SYMBOL_NAME(sys_gettimeofday)
 | 
			
		||||
	.long SYMBOL_NAME(sys_settimeofday)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getgroups)	/* 80 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setgroups)
 | 
			
		||||
	.long SYMBOL_NAME(old_select)
 | 
			
		||||
	.long SYMBOL_NAME(sys_symlink)
 | 
			
		||||
	.long SYMBOL_NAME(sys_lstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_readlink)		/* 85 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_uselib)
 | 
			
		||||
	.long SYMBOL_NAME(sys_swapon)
 | 
			
		||||
	.long SYMBOL_NAME(sys_reboot)
 | 
			
		||||
	.long SYMBOL_NAME(old_readdir)
 | 
			
		||||
	.long SYMBOL_NAME(old_mmap)		/* 90 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_munmap)
 | 
			
		||||
	.long SYMBOL_NAME(sys_truncate)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ftruncate)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fchmod)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fchown)		/* 95 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpriority)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setpriority)
 | 
			
		||||
	.long SYMBOL_NAME(sys_profil)
 | 
			
		||||
	.long SYMBOL_NAME(sys_statfs)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fstatfs)		/* 100 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ioperm)
 | 
			
		||||
	.long SYMBOL_NAME(sys_socketcall)
 | 
			
		||||
	.long SYMBOL_NAME(sys_syslog)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setitimer)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getitimer)	/* 105 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_newstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_newlstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_newfstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_uname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_iopl)		/* 110 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_vhangup)
 | 
			
		||||
	.long SYMBOL_NAME(sys_idle)
 | 
			
		||||
	.long SYMBOL_NAME(sys_vm86old)
 | 
			
		||||
	.long SYMBOL_NAME(sys_wait4)
 | 
			
		||||
	.long SYMBOL_NAME(sys_swapoff)		/* 115 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sysinfo)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ipc)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fsync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigreturn)
 | 
			
		||||
	.long SYMBOL_NAME(sys_clone)		/* 120 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setdomainname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_newuname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_modify_ldt)
 | 
			
		||||
	.long SYMBOL_NAME(sys_adjtimex)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mprotect)		/* 125 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigprocmask)
 | 
			
		||||
	.long SYMBOL_NAME(sys_create_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_init_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_delete_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_get_kernel_syms)	/* 130 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_quotactl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fchdir)
 | 
			
		||||
	.long SYMBOL_NAME(sys_bdflush)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sysfs)		/* 135 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_personality)
 | 
			
		||||
	.long 0					/* for afs_syscall */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setfsuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setfsgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_llseek)		/* 140 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getdents)
 | 
			
		||||
	.long SYMBOL_NAME(sys_select)
 | 
			
		||||
	.long SYMBOL_NAME(sys_flock)
 | 
			
		||||
	.long SYMBOL_NAME(sys_msync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_readv)		/* 145 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_writev)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getsid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fdatasync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sysctl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mlock)		/* 150 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_munlock)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mlockall)
 | 
			
		||||
	.long SYMBOL_NAME(sys_munlockall)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_setparam)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_getparam)   /* 155 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_setscheduler)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_getscheduler)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_yield)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_get_priority_max)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_rr_get_interval)
 | 
			
		||||
	.long SYMBOL_NAME(sys_nanosleep)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mremap)
 | 
			
		||||
	.long 0,0
 | 
			
		||||
	.long SYMBOL_NAME(sys_vm86)
 | 
			
		||||
	.long 0,0,0,0					/* 170 */
 | 
			
		||||
	.long 0,0,0,0,0,0,0,0,0,0			/* 180 */
 | 
			
		||||
	.long 0,0,0,0,0,0,0
 | 
			
		||||
	.long SYMBOL_NAME(sys_table)
 | 
			
		||||
	.space (NR_syscalls-188)*4
 | 
			
		||||
@@ -1,51 +0,0 @@
 | 
			
		||||
diff -ur linux-2.0.32/Makefile linux-hacked/Makefile
 | 
			
		||||
--- linux-2.0.32/Makefile	Fri Nov  7 19:51:05 1997
 | 
			
		||||
+++ linux-hacked/Makefile	Thu Jun 11 20:41:12 1998
 | 
			
		||||
@@ -87,7 +87,7 @@
 | 
			
		||||
 # standard CFLAGS
 | 
			
		||||
 #
 | 
			
		||||
 
 | 
			
		||||
-CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce
 | 
			
		||||
+CFLAGS = -Wall -Wstrict-prototypes -g -O2 -fomit-frame-pointer -fno-strength-reduce
 | 
			
		||||
 
 | 
			
		||||
 ifdef CONFIG_CPP
 | 
			
		||||
 CFLAGS := $(CFLAGS) -x c++
 | 
			
		||||
@@ -113,12 +113,12 @@
 | 
			
		||||
 # Include the make variables (CC, etc...)
 | 
			
		||||
 #
 | 
			
		||||
 
 | 
			
		||||
-ARCHIVES	=kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o net/network.a
 | 
			
		||||
+ARCHIVES	=kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o net/network.a table/table.o
 | 
			
		||||
 FILESYSTEMS	=fs/filesystems.a
 | 
			
		||||
 DRIVERS		=drivers/block/block.a \
 | 
			
		||||
 		 drivers/char/char.a
 | 
			
		||||
 LIBS		=$(TOPDIR)/lib/lib.a
 | 
			
		||||
-SUBDIRS		=kernel drivers mm fs net ipc lib
 | 
			
		||||
+SUBDIRS		=kernel drivers mm fs net ipc lib table
 | 
			
		||||
 
 | 
			
		||||
 ifeq ($(CONFIG_ISDN),y)
 | 
			
		||||
 DRIVERS := $(DRIVERS) drivers/isdn/isdn.a
 | 
			
		||||
diff -ur linux-2.0.32/arch/i386/kernel/entry.S linux-hacked/arch/i386/kernel/entry.S
 | 
			
		||||
--- linux-2.0.32/arch/i386/kernel/entry.S	Tue Sep 16 23:42:45 1997
 | 
			
		||||
+++ linux-hacked/arch/i386/kernel/entry.S	Thu Jun 11 21:37:20 1998
 | 
			
		||||
@@ -699,4 +699,8 @@
 | 
			
		||||
 	.long SYMBOL_NAME(sys_mremap)
 | 
			
		||||
 	.long 0,0
 | 
			
		||||
 	.long SYMBOL_NAME(sys_vm86)
 | 
			
		||||
-	.space (NR_syscalls-166)*4
 | 
			
		||||
+	.long 0,0,0,0					/* 170 */
 | 
			
		||||
+	.long 0,0,0,0,0,0,0,0,0,0			/* 180 */
 | 
			
		||||
+	.long 0,0,0,0,0,0,0
 | 
			
		||||
+	.long SYMBOL_NAME(sys_table)
 | 
			
		||||
+	.space (NR_syscalls-188)*4
 | 
			
		||||
diff -ur linux-2.0.32/include/asm-i386/unistd.h linux-hacked/include/asm-i386/unistd.h
 | 
			
		||||
--- linux-2.0.32/include/asm-i386/unistd.h	Fri Mar 22 07:34:02 1996
 | 
			
		||||
+++ linux-hacked/include/asm-i386/unistd.h	Thu Jun 11 21:37:03 1998
 | 
			
		||||
@@ -169,6 +169,7 @@
 | 
			
		||||
 #define __NR_sched_rr_get_interval	161
 | 
			
		||||
 #define __NR_nanosleep		162
 | 
			
		||||
 #define __NR_mremap		163
 | 
			
		||||
+#define __NR_table		188
 | 
			
		||||
 
 | 
			
		||||
 /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
 | 
			
		||||
 #define _syscall0(type,name) \
 | 
			
		||||
@@ -1,468 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * linux/table/table_impl.c
 | 
			
		||||
 * Copyright (C) 1998 Martin Baulig
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/errno.h>
 | 
			
		||||
#include <linux/sched.h>
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
#include <linux/kernel_stat.h>
 | 
			
		||||
#include <linux/tty.h>
 | 
			
		||||
#include <linux/user.h>
 | 
			
		||||
#include <linux/a.out.h>
 | 
			
		||||
#include <linux/string.h>
 | 
			
		||||
#include <linux/mman.h>
 | 
			
		||||
#include <linux/proc_fs.h>
 | 
			
		||||
#include <linux/ioport.h>
 | 
			
		||||
#include <linux/config.h>
 | 
			
		||||
#include <linux/mm.h>
 | 
			
		||||
#include <linux/pagemap.h>
 | 
			
		||||
#include <linux/swap.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/segment.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/io.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/table.h>
 | 
			
		||||
 | 
			
		||||
#include "version.h"
 | 
			
		||||
 | 
			
		||||
#if defined(__i386__)
 | 
			
		||||
# define KSTK_EIP(tsk)	(((unsigned long *)tsk->kernel_stack_page)[1019])
 | 
			
		||||
# define KSTK_ESP(tsk)	(((unsigned long *)tsk->kernel_stack_page)[1022])
 | 
			
		||||
#elif defined(__alpha__)
 | 
			
		||||
  /*
 | 
			
		||||
   * See arch/alpha/kernel/ptrace.c for details.
 | 
			
		||||
   */
 | 
			
		||||
# define PT_REG(reg)		(PAGE_SIZE - sizeof(struct pt_regs)	\
 | 
			
		||||
				 + (long)&((struct pt_regs *)0)->reg)
 | 
			
		||||
# define KSTK_EIP(tsk)	(*(unsigned long *)(tsk->kernel_stack_page + PT_REG(pc)))
 | 
			
		||||
# define KSTK_ESP(tsk)	((tsk) == current ? rdusp() : (tsk)->tss.usp)
 | 
			
		||||
#elif defined(__sparc__)
 | 
			
		||||
# define PT_REG(reg)            (PAGE_SIZE - sizeof(struct pt_regs)     \
 | 
			
		||||
                                 + (long)&((struct pt_regs *)0)->reg)
 | 
			
		||||
# define KSTK_EIP(tsk)  (*(unsigned long *)(tsk->kernel_stack_page + PT_REG(pc)))
 | 
			
		||||
# define KSTK_ESP(tsk)  (*(unsigned long *)(tsk->kernel_stack_page + PT_REG(u_regs[UREG_FP])))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static struct task_struct *
 | 
			
		||||
get_task (pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	struct task_struct ** p;
 | 
			
		||||
	
 | 
			
		||||
	p = task;
 | 
			
		||||
	while (++p < task+NR_TASKS) {
 | 
			
		||||
		if (*p && (*p)->pid == pid)
 | 
			
		||||
			return *p;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void statm_pte_range(pmd_t * pmd, unsigned long address, unsigned long size,
 | 
			
		||||
	int * pages, int * shared, int * dirty, int * total)
 | 
			
		||||
{
 | 
			
		||||
	pte_t * pte;
 | 
			
		||||
	unsigned long end;
 | 
			
		||||
 | 
			
		||||
	if (pmd_none(*pmd))
 | 
			
		||||
		return;
 | 
			
		||||
	if (pmd_bad(*pmd)) {
 | 
			
		||||
		printk("statm_pte_range: bad pmd (%08lx)\n", pmd_val(*pmd));
 | 
			
		||||
		pmd_clear(pmd);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	pte = pte_offset(pmd, address);
 | 
			
		||||
	address &= ~PMD_MASK;
 | 
			
		||||
	end = address + size;
 | 
			
		||||
	if (end > PMD_SIZE)
 | 
			
		||||
		end = PMD_SIZE;
 | 
			
		||||
	do {
 | 
			
		||||
		pte_t page = *pte;
 | 
			
		||||
 | 
			
		||||
		address += PAGE_SIZE;
 | 
			
		||||
		pte++;
 | 
			
		||||
		if (pte_none(page))
 | 
			
		||||
			continue;
 | 
			
		||||
		++*total;
 | 
			
		||||
		if (!pte_present(page))
 | 
			
		||||
			continue;
 | 
			
		||||
		++*pages;
 | 
			
		||||
		if (pte_dirty(page))
 | 
			
		||||
			++*dirty;
 | 
			
		||||
		if (pte_page(page) >= high_memory)
 | 
			
		||||
			continue;
 | 
			
		||||
		if (mem_map[MAP_NR(pte_page(page))].count > 1)
 | 
			
		||||
			++*shared;
 | 
			
		||||
	} while (address < end);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void statm_pmd_range(pgd_t * pgd, unsigned long address, unsigned long size,
 | 
			
		||||
	int * pages, int * shared, int * dirty, int * total)
 | 
			
		||||
{
 | 
			
		||||
	pmd_t * pmd;
 | 
			
		||||
	unsigned long end;
 | 
			
		||||
 | 
			
		||||
	if (pgd_none(*pgd))
 | 
			
		||||
		return;
 | 
			
		||||
	if (pgd_bad(*pgd)) {
 | 
			
		||||
		printk("statm_pmd_range: bad pgd (%08lx)\n", pgd_val(*pgd));
 | 
			
		||||
		pgd_clear(pgd);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	pmd = pmd_offset(pgd, address);
 | 
			
		||||
	address &= ~PGDIR_MASK;
 | 
			
		||||
	end = address + size;
 | 
			
		||||
	if (end > PGDIR_SIZE)
 | 
			
		||||
		end = PGDIR_SIZE;
 | 
			
		||||
	do {
 | 
			
		||||
		statm_pte_range(pmd, address, end - address, pages, shared, dirty, total);
 | 
			
		||||
		address = (address + PMD_SIZE) & PMD_MASK;
 | 
			
		||||
		pmd++;
 | 
			
		||||
	} while (address < end);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void statm_pgd_range(pgd_t * pgd, unsigned long address, unsigned long end,
 | 
			
		||||
	int * pages, int * shared, int * dirty, int * total)
 | 
			
		||||
{
 | 
			
		||||
	while (address < end) {
 | 
			
		||||
		statm_pmd_range(pgd, address, end - address, pages, shared, dirty, total);
 | 
			
		||||
		address = (address + PGDIR_SIZE) & PGDIR_MASK;
 | 
			
		||||
		pgd++;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static unsigned long
 | 
			
		||||
get_wchan (struct task_struct *p)
 | 
			
		||||
{
 | 
			
		||||
	if (!p || p == current || p->state == TASK_RUNNING)
 | 
			
		||||
		return 0;
 | 
			
		||||
#if defined(__i386__)
 | 
			
		||||
	{
 | 
			
		||||
		unsigned long ebp, eip;
 | 
			
		||||
		unsigned long stack_page;
 | 
			
		||||
		int count = 0;
 | 
			
		||||
 | 
			
		||||
		stack_page = p->kernel_stack_page;
 | 
			
		||||
		if (!stack_page)
 | 
			
		||||
			return 0;
 | 
			
		||||
		ebp = p->tss.ebp;
 | 
			
		||||
		do {
 | 
			
		||||
			if (ebp < stack_page || ebp >= 4092+stack_page)
 | 
			
		||||
				return 0;
 | 
			
		||||
			eip = *(unsigned long *) (ebp+4);
 | 
			
		||||
			if (eip < (unsigned long) interruptible_sleep_on
 | 
			
		||||
			    || eip >= (unsigned long) add_timer)
 | 
			
		||||
				return eip;
 | 
			
		||||
			ebp = *(unsigned long *) ebp;
 | 
			
		||||
		} while (count++ < 16);
 | 
			
		||||
	}
 | 
			
		||||
#elif defined(__alpha__)
 | 
			
		||||
	/*
 | 
			
		||||
	 * This one depends on the frame size of schedule().  Do a
 | 
			
		||||
	 * "disass schedule" in gdb to find the frame size.  Also, the
 | 
			
		||||
	 * code assumes that sleep_on() follows immediately after
 | 
			
		||||
	 * interruptible_sleep_on() and that add_timer() follows
 | 
			
		||||
	 * immediately after interruptible_sleep().  Ugly, isn't it?
 | 
			
		||||
	 * Maybe adding a wchan field to task_struct would be better,
 | 
			
		||||
	 * after all...
 | 
			
		||||
	 */
 | 
			
		||||
	{
 | 
			
		||||
		unsigned long schedule_frame;
 | 
			
		||||
		unsigned long pc;
 | 
			
		||||
		
 | 
			
		||||
		pc = thread_saved_pc(&p->tss);
 | 
			
		||||
		if (pc >= (unsigned long) interruptible_sleep_on && pc < (unsigned long) add_timer) {
 | 
			
		||||
			schedule_frame = ((unsigned long *)p->tss.ksp)[6];
 | 
			
		||||
			return ((unsigned long *)schedule_frame)[12];
 | 
			
		||||
		}
 | 
			
		||||
		return pc;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
asmlinkage int
 | 
			
		||||
sys_table (int type, union table *buf, const void *param)
 | 
			
		||||
{
 | 
			
		||||
	union table tbl;
 | 
			
		||||
	struct sysinfo i;
 | 
			
		||||
	struct task_struct *tsk = NULL;
 | 
			
		||||
	struct ip_chain *chain;
 | 
			
		||||
	struct ip_fwkernel *rule;
 | 
			
		||||
	char devname [9];
 | 
			
		||||
	int index, err;
 | 
			
		||||
	pid_t pid;
 | 
			
		||||
 | 
			
		||||
	if (type == TABLE_VERSION)
 | 
			
		||||
		return _TABLE_VERSION;
 | 
			
		||||
 | 
			
		||||
	if (!buf)
 | 
			
		||||
		return -EFAULT;
 | 
			
		||||
 | 
			
		||||
	memset (&tbl, 0, sizeof (union table));
 | 
			
		||||
 | 
			
		||||
	/* For TABLE_PROC_*, read pid and get task_struct */
 | 
			
		||||
 | 
			
		||||
	switch (type) {
 | 
			
		||||
	case TABLE_PROC_UID:
 | 
			
		||||
	case TABLE_PROC_MEM:
 | 
			
		||||
	case TABLE_PROC_SEGMENT:
 | 
			
		||||
	case TABLE_PROC_TIME:
 | 
			
		||||
	case TABLE_PROC_STATE:
 | 
			
		||||
	case TABLE_PROC_SIGNAL:
 | 
			
		||||
	case TABLE_PROC_KERNEL:
 | 
			
		||||
	  err = verify_area (VERIFY_READ, param, sizeof (pid_t));
 | 
			
		||||
		if (err)
 | 
			
		||||
			return err;
 | 
			
		||||
		memcpy_fromfs (&pid, param, sizeof (pid_t));
 | 
			
		||||
 | 
			
		||||
		tsk = get_task (pid);
 | 
			
		||||
		if (tsk == NULL)
 | 
			
		||||
			return -ESRCH;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_NETACCT:
 | 
			
		||||
		err = verify_area (VERIFY_READ, param, 5);
 | 
			
		||||
		if (err)
 | 
			
		||||
			return err;
 | 
			
		||||
		copy_from_user (devname, param, 5);
 | 
			
		||||
		devname [5] = 0;
 | 
			
		||||
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Main function dispatcher */
 | 
			
		||||
 | 
			
		||||
	switch (type) {
 | 
			
		||||
	case TABLE_PROCLIST:
 | 
			
		||||
		tsk = task [0];
 | 
			
		||||
		for (index = 0; index < nr_tasks; index++) {
 | 
			
		||||
			tbl.proclist.pids [index] = tsk->pid;
 | 
			
		||||
			tsk = tsk->next_task;
 | 
			
		||||
		}
 | 
			
		||||
		tbl.proclist.nr_running = nr_running;
 | 
			
		||||
		tbl.proclist.nr_tasks = nr_tasks;
 | 
			
		||||
		tbl.proclist.last_pid = last_pid;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_CPU:
 | 
			
		||||
		tbl.cpu.total = jiffies;    
 | 
			
		||||
		tbl.cpu.user  = kstat.cpu_user;
 | 
			
		||||
		tbl.cpu.nice  = kstat.cpu_nice;
 | 
			
		||||
		tbl.cpu.sys   = kstat.cpu_system;
 | 
			
		||||
		tbl.cpu.idle  = tbl.cpu.total -
 | 
			
		||||
			(tbl.cpu.user + tbl.cpu.nice + tbl.cpu.sys);
 | 
			
		||||
		tbl.cpu.frequency = HZ;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_MEM:
 | 
			
		||||
		si_meminfo (&i);
 | 
			
		||||
		tbl.mem.total  = i.totalram;
 | 
			
		||||
		tbl.mem.used   = i.totalram - i.freeram;
 | 
			
		||||
		tbl.mem.free   = i.freeram;
 | 
			
		||||
		tbl.mem.shared = i.sharedram;
 | 
			
		||||
		tbl.mem.buffer = i.bufferram;
 | 
			
		||||
		tbl.mem.cached = page_cache_size << PAGE_SHIFT;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_SWAP:
 | 
			
		||||
		si_swapinfo (&i);
 | 
			
		||||
		tbl.swap.total = i.totalswap;
 | 
			
		||||
		tbl.swap.used  = i.totalswap - i.freeswap;
 | 
			
		||||
		tbl.swap.free  = i.freeswap;
 | 
			
		||||
		tbl.swap.pagein = kstat.pswpin;
 | 
			
		||||
		tbl.swap.pageout = kstat.pswpout;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_LOADAVG:
 | 
			
		||||
		tbl.loadavg.loadavg [0] = (double) avenrun [0] / (1 << FSHIFT);
 | 
			
		||||
		tbl.loadavg.loadavg [1] = (double) avenrun [1] / (1 << FSHIFT);
 | 
			
		||||
		tbl.loadavg.loadavg [2] = (double) avenrun [2] / (1 << FSHIFT);
 | 
			
		||||
		tbl.loadavg.nr_running = nr_running;
 | 
			
		||||
		tbl.loadavg.nr_tasks = nr_tasks;
 | 
			
		||||
		tbl.loadavg.last_pid = last_pid;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_UPTIME:
 | 
			
		||||
		tbl.uptime.uptime = jiffies;
 | 
			
		||||
		tbl.uptime.idle   = task[0]->utime + task[0]->stime;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_STATE:
 | 
			
		||||
		tbl.proc_state.state = tsk->state;
 | 
			
		||||
		tbl.proc_state.flags = tsk->flags;
 | 
			
		||||
		memcpy (tbl.proc_state.comm, tsk->comm,
 | 
			
		||||
			sizeof (tbl.proc_state.comm));
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_UID:
 | 
			
		||||
		tbl.proc_uid.uid = tsk->uid;
 | 
			
		||||
		tbl.proc_uid.euid = tsk->euid;
 | 
			
		||||
		tbl.proc_uid.suid = tsk->suid;
 | 
			
		||||
		tbl.proc_uid.fsuid = tsk->fsuid;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.gid = tsk->gid;
 | 
			
		||||
		tbl.proc_uid.egid = tsk->egid;
 | 
			
		||||
		tbl.proc_uid.sgid = tsk->sgid;
 | 
			
		||||
		tbl.proc_uid.fsgid = tsk->fsgid;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.pid = tsk->pid;
 | 
			
		||||
		tbl.proc_uid.pgrp = tsk->pgrp;
 | 
			
		||||
		tbl.proc_uid.ppid = tsk->p_pptr->pid;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.session = tsk->session;
 | 
			
		||||
	        tbl.proc_uid.tty = tsk->tty ?
 | 
			
		||||
			kdev_t_to_nr (tsk->tty->device) : 0;
 | 
			
		||||
		tbl.proc_uid.tpgid = tsk->tty ? tsk->tty->pgrp : -1;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.priority = tsk->priority;
 | 
			
		||||
		tbl.proc_uid.counter = tsk->counter;
 | 
			
		||||
		tbl.proc_uid.def_priority = DEF_PRIORITY;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_SIGNAL:
 | 
			
		||||
		tbl.proc_signal.signal = tsk->signal;
 | 
			
		||||
		tbl.proc_signal.blocked = tsk->blocked;
 | 
			
		||||
 | 
			
		||||
		if (tsk->sig) {
 | 
			
		||||
			struct sigaction * action = tsk->sig->action;
 | 
			
		||||
			unsigned long sig_ign = 0, sig_caught = 0;
 | 
			
		||||
			unsigned long bit = 1;
 | 
			
		||||
			int i;
 | 
			
		||||
			
 | 
			
		||||
			for (i = 0; i < 32; i++) {
 | 
			
		||||
				switch((unsigned long) action->sa_handler) {
 | 
			
		||||
				case 0:
 | 
			
		||||
					break;
 | 
			
		||||
				case 1:
 | 
			
		||||
					sig_ign |= bit;
 | 
			
		||||
					break;
 | 
			
		||||
				default:
 | 
			
		||||
					sig_caught |= bit;
 | 
			
		||||
				}
 | 
			
		||||
				bit <<= 1;
 | 
			
		||||
				action++;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			tbl.proc_signal.ignored = sig_ign;
 | 
			
		||||
			tbl.proc_signal.caught  = sig_caught;
 | 
			
		||||
		} else {
 | 
			
		||||
			tbl.proc_signal.ignored = 0;
 | 
			
		||||
			tbl.proc_signal.caught  = 0;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_MEM:
 | 
			
		||||
		if (tsk->mm && tsk->mm != &init_mm) {
 | 
			
		||||
			tbl.proc_mem.context = tsk->mm->context;
 | 
			
		||||
			tbl.proc_mem.start_code = tsk->mm->start_code;
 | 
			
		||||
			tbl.proc_mem.end_code = tsk->mm->end_code;
 | 
			
		||||
			tbl.proc_mem.start_data = tsk->mm-> start_data;
 | 
			
		||||
			tbl.proc_mem.end_data = tsk->mm->end_data;
 | 
			
		||||
			tbl.proc_mem.start_brk = tsk->mm->start_brk;
 | 
			
		||||
			tbl.proc_mem.brk = tsk->mm->brk;
 | 
			
		||||
			tbl.proc_mem.start_stack = tsk->mm->start_stack;
 | 
			
		||||
			tbl.proc_mem.start_mmap = tsk->mm->start_mmap;
 | 
			
		||||
			tbl.proc_mem.arg_start = tsk->mm->arg_start;
 | 
			
		||||
			tbl.proc_mem.arg_end = tsk->mm->arg_end;
 | 
			
		||||
			tbl.proc_mem.env_start = tsk->mm->env_start;
 | 
			
		||||
			tbl.proc_mem.env_end = tsk->mm->env_end;
 | 
			
		||||
			tbl.proc_mem.rss = tsk->mm->rss;
 | 
			
		||||
			tbl.proc_mem.total_vm = tsk->mm->total_vm;
 | 
			
		||||
			tbl.proc_mem.locked_vm = tsk->mm->locked_vm;
 | 
			
		||||
		}
 | 
			
		||||
		tbl.proc_mem.rlim = tsk->rlim ?
 | 
			
		||||
			tsk->rlim[RLIMIT_RSS].rlim_cur : 0;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_SEGMENT:
 | 
			
		||||
		if (tsk->mm && tsk->mm != &init_mm) {
 | 
			
		||||
			unsigned long vsize = 0;
 | 
			
		||||
			int size = 0, resident = 0, share = 0;
 | 
			
		||||
			int trs = 0, lrs = 0, drs = 0, dt = 0;
 | 
			
		||||
			struct vm_area_struct * vma = tsk->mm->mmap;
 | 
			
		||||
 | 
			
		||||
			while (vma) {
 | 
			
		||||
				pgd_t *pgd = pgd_offset(tsk->mm, vma->vm_start);
 | 
			
		||||
				int pages = 0, shared = 0, dirty = 0, total = 0;
 | 
			
		||||
				
 | 
			
		||||
				vsize += vma->vm_end - vma->vm_start;
 | 
			
		||||
 | 
			
		||||
				statm_pgd_range (pgd, vma->vm_start, vma->vm_end,
 | 
			
		||||
						 &pages, &shared, &dirty, &total);
 | 
			
		||||
				resident += pages;
 | 
			
		||||
				share += shared;
 | 
			
		||||
				dt += dirty;
 | 
			
		||||
				size += total;
 | 
			
		||||
				if (vma->vm_flags & VM_EXECUTABLE)
 | 
			
		||||
					trs += pages;	/* text */
 | 
			
		||||
				else if (vma->vm_flags & VM_GROWSDOWN)
 | 
			
		||||
					drs += pages;	/* stack */
 | 
			
		||||
				else if (vma->vm_end > 0x60000000)
 | 
			
		||||
					lrs += pages;	/* library */
 | 
			
		||||
				else
 | 
			
		||||
					drs += pages;
 | 
			
		||||
				vma = vma->vm_next;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			tbl.proc_segment.vsize = vsize;
 | 
			
		||||
			tbl.proc_segment.size = size;
 | 
			
		||||
			tbl.proc_segment.resident = resident;
 | 
			
		||||
			tbl.proc_segment.shared = share;
 | 
			
		||||
			tbl.proc_segment.trs = trs;
 | 
			
		||||
			tbl.proc_segment.lrs = lrs;
 | 
			
		||||
			tbl.proc_segment.dt = dt;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_TIME:
 | 
			
		||||
		tbl.proc_time.utime = tsk->utime;
 | 
			
		||||
		tbl.proc_time.stime = tsk->stime;
 | 
			
		||||
		tbl.proc_time.cutime = tsk->cutime;
 | 
			
		||||
		tbl.proc_time.cstime = tsk->cstime;
 | 
			
		||||
 | 
			
		||||
		tbl.proc_time.start_time = tsk->start_time;
 | 
			
		||||
		tbl.proc_time.timeout = tsk->timeout;
 | 
			
		||||
		tbl.proc_time.policy = tsk->policy;
 | 
			
		||||
		tbl.proc_time.rt_priority = tsk->rt_priority;
 | 
			
		||||
 | 
			
		||||
		tbl.proc_time.it_real_value = tsk->it_real_value;
 | 
			
		||||
		tbl.proc_time.it_prof_value = tsk->it_prof_value;
 | 
			
		||||
		tbl.proc_time.it_virt_value = tsk->it_virt_value;
 | 
			
		||||
		tbl.proc_time.it_real_incr = tsk->it_real_incr;
 | 
			
		||||
		tbl.proc_time.it_prof_incr = tsk->it_prof_incr;
 | 
			
		||||
		tbl.proc_time.it_virt_incr = tsk->it_virt_incr;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_KERNEL:
 | 
			
		||||
		tbl.proc_kernel.min_flt = tsk->min_flt;
 | 
			
		||||
		tbl.proc_kernel.cmin_flt = tsk->cmin_flt;
 | 
			
		||||
		tbl.proc_kernel.maj_flt = tsk->maj_flt;
 | 
			
		||||
		tbl.proc_kernel.cmaj_flt = tsk->cmaj_flt;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_kernel.kesp = tsk->kernel_stack_page ? KSTK_EIP(tsk) : 0;
 | 
			
		||||
		tbl.proc_kernel.keip = tsk->kernel_stack_page ? KSTK_ESP(tsk) : 0;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_kernel.nswap = tsk->nswap;
 | 
			
		||||
		tbl.proc_kernel.cnswap = tsk->cnswap;
 | 
			
		||||
 | 
			
		||||
		tbl.proc_kernel.wchan = get_wchan (tsk);
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_NETACCT:
 | 
			
		||||
		for (chain = ip_fw_chains; chain; chain = chain->next) {
 | 
			
		||||
			for (rule = chain->chain; rule; rule = rule->next) {
 | 
			
		||||
				const char *name = rule->ipfw.fw_vianame;
 | 
			
		||||
				int k;
 | 
			
		||||
				
 | 
			
		||||
				if (name [0] && !strncmp (param, name, 5))
 | 
			
		||||
					continue;
 | 
			
		||||
				
 | 
			
		||||
				for (k = 0; k < NUM_SLOTS; k++) {
 | 
			
		||||
					tbl.netacct.packets +=
 | 
			
		||||
						rule->counters[k].pcnt;
 | 
			
		||||
					tbl.netacct.bytes +=
 | 
			
		||||
						rule->counters[k].bcnt;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = verify_area (VERIFY_WRITE, buf, sizeof (struct table));
 | 
			
		||||
	if (err)
 | 
			
		||||
		return err;
 | 
			
		||||
 | 
			
		||||
	memcpy_tofs (buf, &tbl, sizeof (union table));
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,324 +0,0 @@
 | 
			
		||||
#ifndef _ASM_I386_UNISTD_H_
 | 
			
		||||
#define _ASM_I386_UNISTD_H_
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file contains the system call numbers.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define __NR_setup		  0	/* used only by init, to get system going */
 | 
			
		||||
#define __NR_exit		  1
 | 
			
		||||
#define __NR_fork		  2
 | 
			
		||||
#define __NR_read		  3
 | 
			
		||||
#define __NR_write		  4
 | 
			
		||||
#define __NR_open		  5
 | 
			
		||||
#define __NR_close		  6
 | 
			
		||||
#define __NR_waitpid		  7
 | 
			
		||||
#define __NR_creat		  8
 | 
			
		||||
#define __NR_link		  9
 | 
			
		||||
#define __NR_unlink		 10
 | 
			
		||||
#define __NR_execve		 11
 | 
			
		||||
#define __NR_chdir		 12
 | 
			
		||||
#define __NR_time		 13
 | 
			
		||||
#define __NR_mknod		 14
 | 
			
		||||
#define __NR_chmod		 15
 | 
			
		||||
#define __NR_chown		 16
 | 
			
		||||
#define __NR_break		 17
 | 
			
		||||
#define __NR_oldstat		 18
 | 
			
		||||
#define __NR_lseek		 19
 | 
			
		||||
#define __NR_getpid		 20
 | 
			
		||||
#define __NR_mount		 21
 | 
			
		||||
#define __NR_umount		 22
 | 
			
		||||
#define __NR_setuid		 23
 | 
			
		||||
#define __NR_getuid		 24
 | 
			
		||||
#define __NR_stime		 25
 | 
			
		||||
#define __NR_ptrace		 26
 | 
			
		||||
#define __NR_alarm		 27
 | 
			
		||||
#define __NR_oldfstat		 28
 | 
			
		||||
#define __NR_pause		 29
 | 
			
		||||
#define __NR_utime		 30
 | 
			
		||||
#define __NR_stty		 31
 | 
			
		||||
#define __NR_gtty		 32
 | 
			
		||||
#define __NR_access		 33
 | 
			
		||||
#define __NR_nice		 34
 | 
			
		||||
#define __NR_ftime		 35
 | 
			
		||||
#define __NR_sync		 36
 | 
			
		||||
#define __NR_kill		 37
 | 
			
		||||
#define __NR_rename		 38
 | 
			
		||||
#define __NR_mkdir		 39
 | 
			
		||||
#define __NR_rmdir		 40
 | 
			
		||||
#define __NR_dup		 41
 | 
			
		||||
#define __NR_pipe		 42
 | 
			
		||||
#define __NR_times		 43
 | 
			
		||||
#define __NR_prof		 44
 | 
			
		||||
#define __NR_brk		 45
 | 
			
		||||
#define __NR_setgid		 46
 | 
			
		||||
#define __NR_getgid		 47
 | 
			
		||||
#define __NR_signal		 48
 | 
			
		||||
#define __NR_geteuid		 49
 | 
			
		||||
#define __NR_getegid		 50
 | 
			
		||||
#define __NR_acct		 51
 | 
			
		||||
#define __NR_phys		 52
 | 
			
		||||
#define __NR_lock		 53
 | 
			
		||||
#define __NR_ioctl		 54
 | 
			
		||||
#define __NR_fcntl		 55
 | 
			
		||||
#define __NR_mpx		 56
 | 
			
		||||
#define __NR_setpgid		 57
 | 
			
		||||
#define __NR_ulimit		 58
 | 
			
		||||
#define __NR_oldolduname	 59
 | 
			
		||||
#define __NR_umask		 60
 | 
			
		||||
#define __NR_chroot		 61
 | 
			
		||||
#define __NR_ustat		 62
 | 
			
		||||
#define __NR_dup2		 63
 | 
			
		||||
#define __NR_getppid		 64
 | 
			
		||||
#define __NR_getpgrp		 65
 | 
			
		||||
#define __NR_setsid		 66
 | 
			
		||||
#define __NR_sigaction		 67
 | 
			
		||||
#define __NR_sgetmask		 68
 | 
			
		||||
#define __NR_ssetmask		 69
 | 
			
		||||
#define __NR_setreuid		 70
 | 
			
		||||
#define __NR_setregid		 71
 | 
			
		||||
#define __NR_sigsuspend		 72
 | 
			
		||||
#define __NR_sigpending		 73
 | 
			
		||||
#define __NR_sethostname	 74
 | 
			
		||||
#define __NR_setrlimit		 75
 | 
			
		||||
#define __NR_getrlimit		 76
 | 
			
		||||
#define __NR_getrusage		 77
 | 
			
		||||
#define __NR_gettimeofday	 78
 | 
			
		||||
#define __NR_settimeofday	 79
 | 
			
		||||
#define __NR_getgroups		 80
 | 
			
		||||
#define __NR_setgroups		 81
 | 
			
		||||
#define __NR_select		 82
 | 
			
		||||
#define __NR_symlink		 83
 | 
			
		||||
#define __NR_oldlstat		 84
 | 
			
		||||
#define __NR_readlink		 85
 | 
			
		||||
#define __NR_uselib		 86
 | 
			
		||||
#define __NR_swapon		 87
 | 
			
		||||
#define __NR_reboot		 88
 | 
			
		||||
#define __NR_readdir		 89
 | 
			
		||||
#define __NR_mmap		 90
 | 
			
		||||
#define __NR_munmap		 91
 | 
			
		||||
#define __NR_truncate		 92
 | 
			
		||||
#define __NR_ftruncate		 93
 | 
			
		||||
#define __NR_fchmod		 94
 | 
			
		||||
#define __NR_fchown		 95
 | 
			
		||||
#define __NR_getpriority	 96
 | 
			
		||||
#define __NR_setpriority	 97
 | 
			
		||||
#define __NR_profil		 98
 | 
			
		||||
#define __NR_statfs		 99
 | 
			
		||||
#define __NR_fstatfs		100
 | 
			
		||||
#define __NR_ioperm		101
 | 
			
		||||
#define __NR_socketcall		102
 | 
			
		||||
#define __NR_syslog		103
 | 
			
		||||
#define __NR_setitimer		104
 | 
			
		||||
#define __NR_getitimer		105
 | 
			
		||||
#define __NR_stat		106
 | 
			
		||||
#define __NR_lstat		107
 | 
			
		||||
#define __NR_fstat		108
 | 
			
		||||
#define __NR_olduname		109
 | 
			
		||||
#define __NR_iopl		110
 | 
			
		||||
#define __NR_vhangup		111
 | 
			
		||||
#define __NR_idle		112
 | 
			
		||||
#define __NR_vm86		113
 | 
			
		||||
#define __NR_wait4		114
 | 
			
		||||
#define __NR_swapoff		115
 | 
			
		||||
#define __NR_sysinfo		116
 | 
			
		||||
#define __NR_ipc		117
 | 
			
		||||
#define __NR_fsync		118
 | 
			
		||||
#define __NR_sigreturn		119
 | 
			
		||||
#define __NR_clone		120
 | 
			
		||||
#define __NR_setdomainname	121
 | 
			
		||||
#define __NR_uname		122
 | 
			
		||||
#define __NR_modify_ldt		123
 | 
			
		||||
#define __NR_adjtimex		124
 | 
			
		||||
#define __NR_mprotect		125
 | 
			
		||||
#define __NR_sigprocmask	126
 | 
			
		||||
#define __NR_create_module	127
 | 
			
		||||
#define __NR_init_module	128
 | 
			
		||||
#define __NR_delete_module	129
 | 
			
		||||
#define __NR_get_kernel_syms	130
 | 
			
		||||
#define __NR_quotactl		131
 | 
			
		||||
#define __NR_getpgid		132
 | 
			
		||||
#define __NR_fchdir		133
 | 
			
		||||
#define __NR_bdflush		134
 | 
			
		||||
#define __NR_sysfs		135
 | 
			
		||||
#define __NR_personality	136
 | 
			
		||||
#define __NR_afs_syscall	137 /* Syscall for Andrew File System */
 | 
			
		||||
#define __NR_setfsuid		138
 | 
			
		||||
#define __NR_setfsgid		139
 | 
			
		||||
#define __NR__llseek		140
 | 
			
		||||
#define __NR_getdents		141
 | 
			
		||||
#define __NR__newselect		142
 | 
			
		||||
#define __NR_flock		143
 | 
			
		||||
#define __NR_msync		144
 | 
			
		||||
#define __NR_readv		145
 | 
			
		||||
#define __NR_writev		146
 | 
			
		||||
#define __NR_getsid		147
 | 
			
		||||
#define __NR_fdatasync		148
 | 
			
		||||
#define __NR__sysctl		149
 | 
			
		||||
#define __NR_mlock		150
 | 
			
		||||
#define __NR_munlock		151
 | 
			
		||||
#define __NR_mlockall		152
 | 
			
		||||
#define __NR_munlockall		153
 | 
			
		||||
#define __NR_sched_setparam		154
 | 
			
		||||
#define __NR_sched_getparam		155
 | 
			
		||||
#define __NR_sched_setscheduler		156
 | 
			
		||||
#define __NR_sched_getscheduler		157
 | 
			
		||||
#define __NR_sched_yield		158
 | 
			
		||||
#define __NR_sched_get_priority_max	159
 | 
			
		||||
#define __NR_sched_get_priority_min	160
 | 
			
		||||
#define __NR_sched_rr_get_interval	161
 | 
			
		||||
#define __NR_nanosleep		162
 | 
			
		||||
#define __NR_mremap		163
 | 
			
		||||
#define __NR_table		188
 | 
			
		||||
 | 
			
		||||
/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
 | 
			
		||||
#define _syscall0(type,name) \
 | 
			
		||||
type name(void) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name)); \
 | 
			
		||||
if (__res >= 0) \
 | 
			
		||||
	return (type) __res; \
 | 
			
		||||
errno = -__res; \
 | 
			
		||||
return -1; \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall1(type,name,type1,arg1) \
 | 
			
		||||
type name(type1 arg1) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1))); \
 | 
			
		||||
if (__res >= 0) \
 | 
			
		||||
	return (type) __res; \
 | 
			
		||||
errno = -__res; \
 | 
			
		||||
return -1; \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall2(type,name,type1,arg1,type2,arg2) \
 | 
			
		||||
type name(type1 arg1,type2 arg2) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2))); \
 | 
			
		||||
if (__res >= 0) \
 | 
			
		||||
	return (type) __res; \
 | 
			
		||||
errno = -__res; \
 | 
			
		||||
return -1; \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
 | 
			
		||||
type name(type1 arg1,type2 arg2,type3 arg3) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
 | 
			
		||||
		  "d" ((long)(arg3))); \
 | 
			
		||||
if (__res>=0) \
 | 
			
		||||
	return (type) __res; \
 | 
			
		||||
errno=-__res; \
 | 
			
		||||
return -1; \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
 | 
			
		||||
type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
 | 
			
		||||
	  "d" ((long)(arg3)),"S" ((long)(arg4))); \
 | 
			
		||||
if (__res>=0) \
 | 
			
		||||
	return (type) __res; \
 | 
			
		||||
errno=-__res; \
 | 
			
		||||
return -1; \
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
 | 
			
		||||
	  type5,arg5) \
 | 
			
		||||
type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
 | 
			
		||||
	  "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
 | 
			
		||||
if (__res>=0) \
 | 
			
		||||
	return (type) __res; \
 | 
			
		||||
errno=-__res; \
 | 
			
		||||
return -1; \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __KERNEL_SYSCALLS__
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * we need this inline - forking from kernel space will result
 | 
			
		||||
 * in NO COPY ON WRITE (!!!), until an execve is executed. This
 | 
			
		||||
 * is no problem, but for the stack. This is handled by not letting
 | 
			
		||||
 * main() use the stack at all after fork(). Thus, no function
 | 
			
		||||
 * calls - which means inline code for fork too, as otherwise we
 | 
			
		||||
 * would use the stack upon exit from 'fork()'.
 | 
			
		||||
 *
 | 
			
		||||
 * Actually only pause and fork are needed inline, so that there
 | 
			
		||||
 * won't be any messing with the stack from main(), but we define
 | 
			
		||||
 * some others too.
 | 
			
		||||
 */
 | 
			
		||||
#define __NR__exit __NR_exit
 | 
			
		||||
static inline _syscall0(int,idle)
 | 
			
		||||
static inline _syscall0(int,fork)
 | 
			
		||||
static inline _syscall2(int,clone,unsigned long,flags,char *,esp)
 | 
			
		||||
static inline _syscall0(int,pause)
 | 
			
		||||
static inline _syscall0(int,setup)
 | 
			
		||||
static inline _syscall0(int,sync)
 | 
			
		||||
static inline _syscall0(pid_t,setsid)
 | 
			
		||||
static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
 | 
			
		||||
static inline _syscall1(int,dup,int,fd)
 | 
			
		||||
static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
 | 
			
		||||
static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
 | 
			
		||||
static inline _syscall1(int,close,int,fd)
 | 
			
		||||
static inline _syscall1(int,_exit,int,exitcode)
 | 
			
		||||
static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
 | 
			
		||||
 | 
			
		||||
static inline pid_t wait(int * wait_stat)
 | 
			
		||||
{
 | 
			
		||||
	return waitpid(-1,wait_stat,0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is the mechanism for creating a new kernel thread.
 | 
			
		||||
 *
 | 
			
		||||
 * NOTE! Only a kernel-only process(ie the swapper or direct descendants
 | 
			
		||||
 * who haven't done an "execve()") should use this: it will work within
 | 
			
		||||
 * a system call from a "real" process, but the process memory space will
 | 
			
		||||
 * not be free'd until both the parent and the child have exited.
 | 
			
		||||
 */
 | 
			
		||||
static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
 | 
			
		||||
{
 | 
			
		||||
	long retval;
 | 
			
		||||
 | 
			
		||||
	__asm__ __volatile__(
 | 
			
		||||
		"movl %%esp,%%esi\n\t"
 | 
			
		||||
		"int $0x80\n\t"		/* Linux/i386 system call */
 | 
			
		||||
		"cmpl %%esp,%%esi\n\t"	/* child or parent? */
 | 
			
		||||
		"je 1f\n\t"		/* parent - jump */
 | 
			
		||||
		"pushl %3\n\t"		/* push argument */
 | 
			
		||||
		"call *%4\n\t"		/* call fn */
 | 
			
		||||
		"movl %2,%0\n\t"	/* exit */
 | 
			
		||||
		"int $0x80\n"
 | 
			
		||||
		"1:\t"
 | 
			
		||||
		:"=a" (retval)
 | 
			
		||||
		:"0" (__NR_clone), "i" (__NR_exit),
 | 
			
		||||
		 "r" (arg), "r" (fn),
 | 
			
		||||
		 "b" (flags | CLONE_VM)
 | 
			
		||||
		:"si");
 | 
			
		||||
	return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_I386_UNISTD_H_ */
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
#define _TABLE_VERSION	1
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
kernel.patch
 | 
			
		||||
.main.o.flags
 | 
			
		||||
.table.o.flags
 | 
			
		||||
.module.o.flags
 | 
			
		||||
@@ -1,16 +0,0 @@
 | 
			
		||||
#
 | 
			
		||||
# Makefile for the linux system information tables.
 | 
			
		||||
#
 | 
			
		||||
# Note! Dependencies are done automagically by 'make dep', which also
 | 
			
		||||
# removes any old dependencies. DON'T put your own dependencies here
 | 
			
		||||
# unless it's something special (ie not a .c file).
 | 
			
		||||
#
 | 
			
		||||
# Note 2! The CFLAGS definition is now in the main makefile...
 | 
			
		||||
 | 
			
		||||
O_TARGET := table.o
 | 
			
		||||
OX_OBJS  := main.o
 | 
			
		||||
 | 
			
		||||
M_TARGET := table_mod.o
 | 
			
		||||
MX_OBJS  := module.o
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/Rules.make
 | 
			
		||||
@@ -1,21 +0,0 @@
 | 
			
		||||
This is a new system call `table ()' for the Linux table. It is faster
 | 
			
		||||
than reading from /proc and can be used to fetch all information required
 | 
			
		||||
for libgtop until whe have some other function (extended sysctl, ...) in
 | 
			
		||||
standard kernels.
 | 
			
		||||
 | 
			
		||||
I didn't want to change sysctl or some other function myself cause this may
 | 
			
		||||
cause other applications relying upon those function to fail. This is
 | 
			
		||||
something for the ``real'' kernel gurus ...
 | 
			
		||||
 | 
			
		||||
To use this new system call for libgtop, do the following:
 | 
			
		||||
 | 
			
		||||
* Copy this directory to /usr/src/linux/table
 | 
			
		||||
* Make /usr/src/linux/include/linux/table.h symlink to /usr/src/linux/table/table.h
 | 
			
		||||
* Apply the patch `kernel.patch' to the kernel, compile, install and reboot
 | 
			
		||||
* Recompile libgtop (remove `config.cache' and run the `autogen.sh' again).
 | 
			
		||||
 | 
			
		||||
If you want to change and/or add something - feel free to do so !
 | 
			
		||||
 | 
			
		||||
Have fun,
 | 
			
		||||
 | 
			
		||||
Martin
 | 
			
		||||
@@ -1,571 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  linux/arch/i386/entry.S
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 1991, 1992  Linus Torvalds
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * entry.S contains the system-call and fault low-level handling routines.
 | 
			
		||||
 * This also contains the timer-interrupt handler, as well as all interrupts
 | 
			
		||||
 * and faults that can result in a task-switch.
 | 
			
		||||
 *
 | 
			
		||||
 * NOTE: This code handles signal-recognition, which happens every time
 | 
			
		||||
 * after a timer-interrupt and after each system call.
 | 
			
		||||
 *
 | 
			
		||||
 * I changed all the .align's to 4 (16 byte alignment), as that's faster
 | 
			
		||||
 * on a 486.
 | 
			
		||||
 *
 | 
			
		||||
 * Stack layout in 'ret_from_system_call':
 | 
			
		||||
 * 	ptrace needs to have all regs on the stack.
 | 
			
		||||
 *	if the order here is changed, it needs to be
 | 
			
		||||
 *	updated in fork.c:copy_process, signal.c:do_signal,
 | 
			
		||||
 *	ptrace.c and ptrace.h
 | 
			
		||||
 *
 | 
			
		||||
 *	 0(%esp) - %ebx
 | 
			
		||||
 *	 4(%esp) - %ecx
 | 
			
		||||
 *	 8(%esp) - %edx
 | 
			
		||||
 *       C(%esp) - %esi
 | 
			
		||||
 *	10(%esp) - %edi
 | 
			
		||||
 *	14(%esp) - %ebp
 | 
			
		||||
 *	18(%esp) - %eax
 | 
			
		||||
 *	1C(%esp) - %ds
 | 
			
		||||
 *	20(%esp) - %es
 | 
			
		||||
 *	24(%esp) - orig_eax
 | 
			
		||||
 *	28(%esp) - %eip
 | 
			
		||||
 *	2C(%esp) - %cs
 | 
			
		||||
 *	30(%esp) - %eflags
 | 
			
		||||
 *	34(%esp) - %oldesp
 | 
			
		||||
 *	38(%esp) - %oldss
 | 
			
		||||
 *
 | 
			
		||||
 * "current" is in register %ebx during any slow entries.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/sys.h>
 | 
			
		||||
#include <linux/linkage.h>
 | 
			
		||||
#include <asm/segment.h>
 | 
			
		||||
#define ASSEMBLY
 | 
			
		||||
#include <asm/smp.h>
 | 
			
		||||
 | 
			
		||||
EBX		= 0x00
 | 
			
		||||
ECX		= 0x04
 | 
			
		||||
EDX		= 0x08
 | 
			
		||||
ESI		= 0x0C
 | 
			
		||||
EDI		= 0x10
 | 
			
		||||
EBP		= 0x14
 | 
			
		||||
EAX		= 0x18
 | 
			
		||||
DS		= 0x1C
 | 
			
		||||
ES		= 0x20
 | 
			
		||||
ORIG_EAX	= 0x24
 | 
			
		||||
EIP		= 0x28
 | 
			
		||||
CS		= 0x2C
 | 
			
		||||
EFLAGS		= 0x30
 | 
			
		||||
OLDESP		= 0x34
 | 
			
		||||
OLDSS		= 0x38
 | 
			
		||||
 | 
			
		||||
CF_MASK		= 0x00000001
 | 
			
		||||
IF_MASK		= 0x00000200
 | 
			
		||||
NT_MASK		= 0x00004000
 | 
			
		||||
VM_MASK		= 0x00020000
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * these are offsets into the task-struct.
 | 
			
		||||
 */
 | 
			
		||||
state		=  0
 | 
			
		||||
flags		=  4
 | 
			
		||||
sigpending	=  8
 | 
			
		||||
addr_limit	= 12
 | 
			
		||||
exec_domain	= 16
 | 
			
		||||
need_resched	= 20
 | 
			
		||||
 | 
			
		||||
ENOSYS = 38
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SAVE_ALL \
 | 
			
		||||
	cld; \
 | 
			
		||||
	pushl %es; \
 | 
			
		||||
	pushl %ds; \
 | 
			
		||||
	pushl %eax; \
 | 
			
		||||
	pushl %ebp; \
 | 
			
		||||
	pushl %edi; \
 | 
			
		||||
	pushl %esi; \
 | 
			
		||||
	pushl %edx; \
 | 
			
		||||
	pushl %ecx; \
 | 
			
		||||
	pushl %ebx; \
 | 
			
		||||
	movl $(__KERNEL_DS),%edx; \
 | 
			
		||||
	movl %dx,%ds; \
 | 
			
		||||
	movl %dx,%es;
 | 
			
		||||
 | 
			
		||||
#define RESTORE_ALL	\
 | 
			
		||||
	popl %ebx;	\
 | 
			
		||||
	popl %ecx;	\
 | 
			
		||||
	popl %edx;	\
 | 
			
		||||
	popl %esi;	\
 | 
			
		||||
	popl %edi;	\
 | 
			
		||||
	popl %ebp;	\
 | 
			
		||||
	popl %eax;	\
 | 
			
		||||
1:	popl %ds;	\
 | 
			
		||||
2:	popl %es;	\
 | 
			
		||||
3:	addl $4,%esp;	\
 | 
			
		||||
	iret;		\
 | 
			
		||||
.section fixup,"ax";	\
 | 
			
		||||
4:	pushl $0;	\
 | 
			
		||||
	popl %ds;	\
 | 
			
		||||
	jmp 2b;		\
 | 
			
		||||
5:	pushl $0;	\
 | 
			
		||||
	popl %es;	\
 | 
			
		||||
	jmp 3b;		\
 | 
			
		||||
.previous;		\
 | 
			
		||||
.section __ex_table,"a";\
 | 
			
		||||
	.align 4;	\
 | 
			
		||||
	.long 1b,4b;	\
 | 
			
		||||
	.long 2b,5b;	\
 | 
			
		||||
.previous
 | 
			
		||||
 | 
			
		||||
#define GET_CURRENT(reg) \
 | 
			
		||||
	movl %esp, reg; \
 | 
			
		||||
	andl $-8192, reg;
 | 
			
		||||
 | 
			
		||||
ENTRY(lcall7)
 | 
			
		||||
	pushfl			# We get a different stack layout with call gates,
 | 
			
		||||
	pushl %eax		# which has to be cleaned up later..
 | 
			
		||||
	SAVE_ALL
 | 
			
		||||
	movl EIP(%esp),%eax	# due to call gates, this is eflags, not eip..
 | 
			
		||||
	movl CS(%esp),%edx	# this is eip..
 | 
			
		||||
	movl EFLAGS(%esp),%ecx	# and this is cs..
 | 
			
		||||
	movl %eax,EFLAGS(%esp)	#
 | 
			
		||||
	movl %edx,EIP(%esp)	# Now we move them to their "normal" places
 | 
			
		||||
	movl %ecx,CS(%esp)	#
 | 
			
		||||
	movl %esp,%ebx
 | 
			
		||||
	pushl %ebx
 | 
			
		||||
	andl $-8192,%ebx	# GET_CURRENT
 | 
			
		||||
	movl exec_domain(%ebx),%edx	# Get the execution domain
 | 
			
		||||
	movl 4(%edx),%edx	# Get the lcall7 handler for the domain
 | 
			
		||||
	call *%edx
 | 
			
		||||
	popl %eax
 | 
			
		||||
	jmp ret_from_sys_call
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	ALIGN
 | 
			
		||||
	.globl	ret_from_smpfork
 | 
			
		||||
ret_from_smpfork:
 | 
			
		||||
	GET_CURRENT(%ebx)
 | 
			
		||||
	btrl	$0, SYMBOL_NAME(scheduler_lock)
 | 
			
		||||
	jmp	ret_from_sys_call
 | 
			
		||||
#endif /* __SMP__ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return to user mode is not as complex as all this looks,
 | 
			
		||||
 * but we want the default path for a system call return to
 | 
			
		||||
 * go as quickly as possible which is why some of this is
 | 
			
		||||
 * less clear than it otherwise should be.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
ENTRY(system_call)
 | 
			
		||||
	pushl %eax			# save orig_eax
 | 
			
		||||
	SAVE_ALL
 | 
			
		||||
	GET_CURRENT(%ebx)
 | 
			
		||||
	cmpl $(NR_syscalls),%eax
 | 
			
		||||
	jae badsys
 | 
			
		||||
	testb $0x20,flags(%ebx)		# PF_TRACESYS
 | 
			
		||||
	jne tracesys
 | 
			
		||||
	call *SYMBOL_NAME(sys_call_table)(,%eax,4)
 | 
			
		||||
	movl %eax,EAX(%esp)		# save the return value
 | 
			
		||||
	ALIGN
 | 
			
		||||
	.globl ret_from_sys_call
 | 
			
		||||
	.globl ret_from_intr
 | 
			
		||||
ret_from_sys_call:
 | 
			
		||||
	movl SYMBOL_NAME(bh_mask),%eax
 | 
			
		||||
	andl SYMBOL_NAME(bh_active),%eax
 | 
			
		||||
	jne handle_bottom_half
 | 
			
		||||
ret_with_reschedule:
 | 
			
		||||
	cmpl $0,need_resched(%ebx)
 | 
			
		||||
	jne reschedule
 | 
			
		||||
	cmpl $0,sigpending(%ebx)
 | 
			
		||||
	jne signal_return
 | 
			
		||||
	RESTORE_ALL
 | 
			
		||||
	ALIGN
 | 
			
		||||
signal_return:
 | 
			
		||||
	testl $(VM_MASK),EFLAGS(%esp)
 | 
			
		||||
	pushl %esp
 | 
			
		||||
	jne v86_signal_return
 | 
			
		||||
	pushl $0
 | 
			
		||||
	call SYMBOL_NAME(do_signal)
 | 
			
		||||
	addl $8,%esp
 | 
			
		||||
	RESTORE_ALL
 | 
			
		||||
	ALIGN
 | 
			
		||||
v86_signal_return:
 | 
			
		||||
	call SYMBOL_NAME(save_v86_state)
 | 
			
		||||
	movl %eax,%esp
 | 
			
		||||
	pushl %eax
 | 
			
		||||
	pushl $0
 | 
			
		||||
	call SYMBOL_NAME(do_signal)
 | 
			
		||||
	addl $8,%esp
 | 
			
		||||
	RESTORE_ALL
 | 
			
		||||
	ALIGN
 | 
			
		||||
tracesys:
 | 
			
		||||
	movl $-ENOSYS,EAX(%esp)
 | 
			
		||||
	call SYMBOL_NAME(syscall_trace)
 | 
			
		||||
	movl ORIG_EAX(%esp),%eax
 | 
			
		||||
	call *SYMBOL_NAME(sys_call_table)(,%eax,4)
 | 
			
		||||
	movl %eax,EAX(%esp)		# save the return value
 | 
			
		||||
	call SYMBOL_NAME(syscall_trace)
 | 
			
		||||
	jmp ret_from_sys_call
 | 
			
		||||
badsys:
 | 
			
		||||
	movl $-ENOSYS,EAX(%esp)
 | 
			
		||||
	jmp ret_from_sys_call
 | 
			
		||||
 | 
			
		||||
	ALIGN
 | 
			
		||||
ret_from_exception:
 | 
			
		||||
	movl SYMBOL_NAME(bh_mask),%eax
 | 
			
		||||
	andl SYMBOL_NAME(bh_active),%eax
 | 
			
		||||
	jne handle_bottom_half
 | 
			
		||||
	ALIGN
 | 
			
		||||
ret_from_intr:
 | 
			
		||||
	GET_CURRENT(%ebx)
 | 
			
		||||
	movl EFLAGS(%esp),%eax		# mix EFLAGS and CS
 | 
			
		||||
	movb CS(%esp),%al
 | 
			
		||||
	testl $(VM_MASK | 3),%eax	# return to VM86 mode or non-supervisor?
 | 
			
		||||
	jne ret_with_reschedule
 | 
			
		||||
	RESTORE_ALL
 | 
			
		||||
 | 
			
		||||
	ALIGN
 | 
			
		||||
handle_bottom_half:
 | 
			
		||||
	pushl $ret_from_intr
 | 
			
		||||
	jmp SYMBOL_NAME(do_bottom_half)
 | 
			
		||||
 | 
			
		||||
	ALIGN
 | 
			
		||||
reschedule:
 | 
			
		||||
	pushl $ret_from_sys_call
 | 
			
		||||
	jmp SYMBOL_NAME(schedule)    # test
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ENTRY(divide_error)
 | 
			
		||||
	pushl $0		# no error code
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_divide_error)
 | 
			
		||||
	ALIGN
 | 
			
		||||
error_code:
 | 
			
		||||
	pushl %ds
 | 
			
		||||
	pushl %eax
 | 
			
		||||
	xorl %eax,%eax
 | 
			
		||||
	pushl %ebp
 | 
			
		||||
	pushl %edi
 | 
			
		||||
	pushl %esi
 | 
			
		||||
	pushl %edx
 | 
			
		||||
	decl %eax			# eax = -1
 | 
			
		||||
	pushl %ecx
 | 
			
		||||
	pushl %ebx
 | 
			
		||||
#if 1
 | 
			
		||||
	xorl %ecx,%ecx			# zero ecx
 | 
			
		||||
	cld
 | 
			
		||||
	mov %es,%cx			# get the lower order bits of es
 | 
			
		||||
#else
 | 
			
		||||
	cld
 | 
			
		||||
# Some older processors leave the top 16 bits of the 32 bit destination
 | 
			
		||||
# register undefined, rather than zeroed in the following instruction.
 | 
			
		||||
# This won't matter when restoring or loading a segment register from the
 | 
			
		||||
# stack.  It may be a problem if any code reads the full 32 bit value.
 | 
			
		||||
# dosemu? kernel?  Would somebody like to verify that this way is really OK?
 | 
			
		||||
	movl %es,%cx
 | 
			
		||||
#endif
 | 
			
		||||
	xchgl %eax, ORIG_EAX(%esp)	# orig_eax (get the error code. )
 | 
			
		||||
	movl %esp,%edx
 | 
			
		||||
	xchgl %ecx, ES(%esp)		# get the address and save es.
 | 
			
		||||
	pushl %eax			# push the error code
 | 
			
		||||
	pushl %edx
 | 
			
		||||
	movl $(__KERNEL_DS),%edx
 | 
			
		||||
	movl %dx,%ds
 | 
			
		||||
	movl %dx,%es
 | 
			
		||||
	GET_CURRENT(%ebx)
 | 
			
		||||
	call *%ecx
 | 
			
		||||
	addl $8,%esp
 | 
			
		||||
	jmp ret_from_exception
 | 
			
		||||
 | 
			
		||||
ENTRY(coprocessor_error)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_coprocessor_error)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(device_not_available)
 | 
			
		||||
	pushl $-1		# mark this as an int
 | 
			
		||||
	SAVE_ALL
 | 
			
		||||
	GET_CURRENT(%ebx)
 | 
			
		||||
	pushl $ret_from_exception
 | 
			
		||||
	movl %cr0,%eax
 | 
			
		||||
	testl $0x4,%eax			# EM (math emulation bit)
 | 
			
		||||
	je SYMBOL_NAME(math_state_restore)
 | 
			
		||||
	pushl $0		# temporary storage for ORIG_EIP
 | 
			
		||||
	call  SYMBOL_NAME(math_emulate)
 | 
			
		||||
	addl $4,%esp
 | 
			
		||||
	ret
 | 
			
		||||
 | 
			
		||||
ENTRY(debug)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_debug)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(nmi)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_nmi)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(int3)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_int3)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(overflow)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_overflow)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(bounds)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_bounds)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(invalid_op)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_invalid_op)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(coprocessor_segment_overrun)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(reserved)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_reserved)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(double_fault)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_double_fault)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(invalid_TSS)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_invalid_TSS)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(segment_not_present)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_segment_not_present)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(stack_segment)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_stack_segment)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(general_protection)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_general_protection)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(alignment_check)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_alignment_check)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(page_fault)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_page_fault)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(spurious_interrupt_bug)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_spurious_interrupt_bug)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
.data
 | 
			
		||||
ENTRY(sys_call_table)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setup)		/* 0 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_exit)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fork)
 | 
			
		||||
	.long SYMBOL_NAME(sys_read)
 | 
			
		||||
	.long SYMBOL_NAME(sys_write)
 | 
			
		||||
	.long SYMBOL_NAME(sys_open)		/* 5 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_close)
 | 
			
		||||
	.long SYMBOL_NAME(sys_waitpid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_creat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_link)
 | 
			
		||||
	.long SYMBOL_NAME(sys_unlink)		/* 10 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_execve)
 | 
			
		||||
	.long SYMBOL_NAME(sys_chdir)
 | 
			
		||||
	.long SYMBOL_NAME(sys_time)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mknod)
 | 
			
		||||
	.long SYMBOL_NAME(sys_chmod)		/* 15 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_lchown)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old break syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_stat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_lseek)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpid)		/* 20 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_mount)
 | 
			
		||||
	.long SYMBOL_NAME(sys_umount)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_stime)		/* 25 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ptrace)
 | 
			
		||||
	.long SYMBOL_NAME(sys_alarm)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_pause)
 | 
			
		||||
	.long SYMBOL_NAME(sys_utime)		/* 30 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old stty syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old gtty syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_access)
 | 
			
		||||
	.long SYMBOL_NAME(sys_nice)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)	/* 35 */		/* old ftime syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_kill)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rename)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mkdir)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rmdir)		/* 40 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_dup)
 | 
			
		||||
	.long SYMBOL_NAME(sys_pipe)
 | 
			
		||||
	.long SYMBOL_NAME(sys_times)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old prof syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_brk)		/* 45 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_signal)
 | 
			
		||||
	.long SYMBOL_NAME(sys_geteuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getegid)		/* 50 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_acct)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old phys syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old lock syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ioctl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fcntl)		/* 55 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old mpx syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setpgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old ulimit syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_olduname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_umask)		/* 60 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_chroot)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ustat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_dup2)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getppid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpgrp)		/* 65 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setsid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigaction)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sgetmask)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ssetmask)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setreuid)		/* 70 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setregid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigsuspend)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigpending)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sethostname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setrlimit)	/* 75 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getrlimit)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getrusage)
 | 
			
		||||
	.long SYMBOL_NAME(sys_gettimeofday)
 | 
			
		||||
	.long SYMBOL_NAME(sys_settimeofday)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getgroups)	/* 80 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setgroups)
 | 
			
		||||
	.long SYMBOL_NAME(old_select)
 | 
			
		||||
	.long SYMBOL_NAME(sys_symlink)
 | 
			
		||||
	.long SYMBOL_NAME(sys_lstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_readlink)		/* 85 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_uselib)
 | 
			
		||||
	.long SYMBOL_NAME(sys_swapon)
 | 
			
		||||
	.long SYMBOL_NAME(sys_reboot)
 | 
			
		||||
	.long SYMBOL_NAME(old_readdir)
 | 
			
		||||
	.long SYMBOL_NAME(old_mmap)		/* 90 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_munmap)
 | 
			
		||||
	.long SYMBOL_NAME(sys_truncate)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ftruncate)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fchmod)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fchown)		/* 95 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpriority)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setpriority)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old profil syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_statfs)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fstatfs)		/* 100 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ioperm)
 | 
			
		||||
	.long SYMBOL_NAME(sys_socketcall)
 | 
			
		||||
	.long SYMBOL_NAME(sys_syslog)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setitimer)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getitimer)	/* 105 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_newstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_newlstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_newfstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_uname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_iopl)		/* 110 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_vhangup)
 | 
			
		||||
	.long SYMBOL_NAME(sys_idle)
 | 
			
		||||
	.long SYMBOL_NAME(sys_vm86old)
 | 
			
		||||
	.long SYMBOL_NAME(sys_wait4)
 | 
			
		||||
	.long SYMBOL_NAME(sys_swapoff)		/* 115 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sysinfo)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ipc)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fsync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigreturn)
 | 
			
		||||
	.long SYMBOL_NAME(sys_clone)		/* 120 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setdomainname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_newuname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_modify_ldt)
 | 
			
		||||
	.long SYMBOL_NAME(sys_adjtimex)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mprotect)		/* 125 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigprocmask)
 | 
			
		||||
	.long SYMBOL_NAME(sys_create_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_init_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_delete_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_get_kernel_syms)	/* 130 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_quotactl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fchdir)
 | 
			
		||||
	.long SYMBOL_NAME(sys_bdflush)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sysfs)		/* 135 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_personality)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)	/* for afs_syscall */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setfsuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setfsgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_llseek)		/* 140 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getdents)
 | 
			
		||||
	.long SYMBOL_NAME(sys_select)
 | 
			
		||||
	.long SYMBOL_NAME(sys_flock)
 | 
			
		||||
	.long SYMBOL_NAME(sys_msync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_readv)		/* 145 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_writev)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getsid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fdatasync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sysctl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mlock)		/* 150 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_munlock)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mlockall)
 | 
			
		||||
	.long SYMBOL_NAME(sys_munlockall)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_setparam)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_getparam)   /* 155 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_setscheduler)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_getscheduler)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_yield)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_get_priority_max)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_rr_get_interval)
 | 
			
		||||
	.long SYMBOL_NAME(sys_nanosleep)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mremap)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setresuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getresuid)	/* 165 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_vm86)
 | 
			
		||||
	.long SYMBOL_NAME(sys_query_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_poll)
 | 
			
		||||
	.long SYMBOL_NAME(sys_nfsservctl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setresgid)	/* 170 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getresgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_prctl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigreturn)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigaction)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigprocmask)	/* 175 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigpending)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigtimedwait)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigqueueinfo)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigsuspend)
 | 
			
		||||
	.long SYMBOL_NAME(sys_pread)		/* 180 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_pwrite)
 | 
			
		||||
	.long SYMBOL_NAME(sys_chown)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getcwd)
 | 
			
		||||
	.long SYMBOL_NAME(sys_capget)
 | 
			
		||||
	.long SYMBOL_NAME(sys_capset)           /* 185 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigaltstack)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sendfile)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)		/* streams1 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)		/* streams2 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_table)		/* 190 */
 | 
			
		||||
	
 | 
			
		||||
	.rept NR_syscalls-190
 | 
			
		||||
		.long SYMBOL_NAME(sys_ni_syscall)
 | 
			
		||||
	.endr
 | 
			
		||||
@@ -1,61 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * linux/table/table_impl.c
 | 
			
		||||
 * Copyright (C) 1998 Martin Baulig
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/errno.h>
 | 
			
		||||
#include <linux/sched.h>
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
#include <linux/kernel_stat.h>
 | 
			
		||||
#include <linux/tty.h>
 | 
			
		||||
#include <linux/user.h>
 | 
			
		||||
#include <linux/a.out.h>
 | 
			
		||||
#include <linux/string.h>
 | 
			
		||||
#include <linux/mman.h>
 | 
			
		||||
#include <linux/proc_fs.h>
 | 
			
		||||
#include <linux/ioport.h>
 | 
			
		||||
#include <linux/config.h>
 | 
			
		||||
#include <linux/mm.h>
 | 
			
		||||
#include <linux/pagemap.h>
 | 
			
		||||
#include <linux/swap.h>
 | 
			
		||||
#include <linux/slab.h>
 | 
			
		||||
#include <linux/smp.h>
 | 
			
		||||
#include <linux/signal.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/uaccess.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/io.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
#include <linux/table.h>
 | 
			
		||||
 | 
			
		||||
#include "version.h"
 | 
			
		||||
 | 
			
		||||
extern void scheduling_functions_start_here(void);
 | 
			
		||||
extern void scheduling_functions_end_here(void);
 | 
			
		||||
 | 
			
		||||
int (*table_function_ptr) (int, union table *, const void *) = 0;
 | 
			
		||||
 | 
			
		||||
EXPORT_SYMBOL(table_function_ptr);
 | 
			
		||||
 | 
			
		||||
EXPORT_SYMBOL(nr_running);
 | 
			
		||||
EXPORT_SYMBOL(pidhash);
 | 
			
		||||
EXPORT_SYMBOL(task);
 | 
			
		||||
EXPORT_SYMBOL(si_swapinfo);
 | 
			
		||||
EXPORT_SYMBOL(scheduling_functions_start_here);
 | 
			
		||||
EXPORT_SYMBOL(scheduling_functions_end_here);
 | 
			
		||||
EXPORT_SYMBOL(avenrun);
 | 
			
		||||
EXPORT_SYMBOL(nr_tasks);
 | 
			
		||||
EXPORT_SYMBOL(last_pid);
 | 
			
		||||
EXPORT_SYMBOL(page_cache_size);
 | 
			
		||||
EXPORT_SYMBOL(init_mm);
 | 
			
		||||
 | 
			
		||||
asmlinkage int
 | 
			
		||||
sys_table (int type, union table *buf, const void *param)
 | 
			
		||||
{
 | 
			
		||||
	if (table_function_ptr == 0)
 | 
			
		||||
		return -ENOSYS;
 | 
			
		||||
 | 
			
		||||
	return (*table_function_ptr) (type, buf, param);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,607 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * linux/table/table_impl.c
 | 
			
		||||
 * Copyright (C) 1998 Martin Baulig
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/errno.h>
 | 
			
		||||
#include <linux/sched.h>
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
#include <linux/kernel_stat.h>
 | 
			
		||||
#include <linux/tty.h>
 | 
			
		||||
#include <linux/user.h>
 | 
			
		||||
#include <linux/a.out.h>
 | 
			
		||||
#include <linux/string.h>
 | 
			
		||||
#include <linux/mman.h>
 | 
			
		||||
#include <linux/proc_fs.h>
 | 
			
		||||
#include <linux/ioport.h>
 | 
			
		||||
#include <linux/config.h>
 | 
			
		||||
#include <linux/mm.h>
 | 
			
		||||
#include <linux/pagemap.h>
 | 
			
		||||
#include <linux/swap.h>
 | 
			
		||||
#include <linux/slab.h>
 | 
			
		||||
#include <linux/smp.h>
 | 
			
		||||
#include <linux/signal.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/uaccess.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/io.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
#include <linux/table.h>
 | 
			
		||||
 | 
			
		||||
#include "version.h"
 | 
			
		||||
 | 
			
		||||
extern int (*table_function_ptr) (int, union table *, const void *);
 | 
			
		||||
 | 
			
		||||
int table_fkt (int, union table *, const void *);
 | 
			
		||||
 | 
			
		||||
EXPORT_NO_SYMBOLS;
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
init_module(void)
 | 
			
		||||
{
 | 
			
		||||
	printk ("init_module () = %p - %d, %d\n",
 | 
			
		||||
		table_fkt, sizeof (union table), sizeof (sigset_t));
 | 
			
		||||
	table_function_ptr = table_fkt;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cleanup_module(void)
 | 
			
		||||
{
 | 
			
		||||
	table_function_ptr = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define LOAD_INT(x) ((x) >> FSHIFT)
 | 
			
		||||
#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_DEBUG_MALLOC
 | 
			
		||||
int get_malloc(char * buffer);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign,
 | 
			
		||||
				    sigset_t *catch)
 | 
			
		||||
{
 | 
			
		||||
	struct k_sigaction *k;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	sigemptyset(ign);
 | 
			
		||||
	sigemptyset(catch);
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
	printk ("collect_sigign_sigcatch: %p - %p\n",
 | 
			
		||||
		p, p->sig);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (p->sig) {
 | 
			
		||||
		k = p->sig->action;
 | 
			
		||||
		for (i = 1; i <= _NSIG; ++i, ++k) {
 | 
			
		||||
#if 0
 | 
			
		||||
			printk ("signal: %d - %p (%p, %p)\n",
 | 
			
		||||
				i, k->sa.sa_handler, SIG_IGN, SIG_DFL);
 | 
			
		||||
#endif
 | 
			
		||||
			if (k->sa.sa_handler == SIG_IGN)
 | 
			
		||||
				sigaddset(ign, i);
 | 
			
		||||
			else if (k->sa.sa_handler != SIG_DFL)
 | 
			
		||||
				sigaddset(catch, i);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * These bracket the sleeping functions..
 | 
			
		||||
 */
 | 
			
		||||
extern void scheduling_functions_start_here(void);
 | 
			
		||||
extern void scheduling_functions_end_here(void);
 | 
			
		||||
#define first_sched	((unsigned long) scheduling_functions_start_here)
 | 
			
		||||
#define last_sched	((unsigned long) scheduling_functions_end_here)
 | 
			
		||||
 | 
			
		||||
static unsigned long get_wchan(struct task_struct *p)
 | 
			
		||||
{
 | 
			
		||||
	if (!p || p == current || p->state == TASK_RUNNING)
 | 
			
		||||
		return 0;
 | 
			
		||||
#if defined(__i386__)
 | 
			
		||||
	{
 | 
			
		||||
		unsigned long ebp, eip;
 | 
			
		||||
		unsigned long stack_page;
 | 
			
		||||
		int count = 0;
 | 
			
		||||
 | 
			
		||||
		stack_page = 4096 + (unsigned long)p;
 | 
			
		||||
		if (!stack_page)
 | 
			
		||||
			return 0;
 | 
			
		||||
		ebp = p->tss.ebp;
 | 
			
		||||
		do {
 | 
			
		||||
			if (ebp < stack_page || ebp >= 4092+stack_page)
 | 
			
		||||
				return 0;
 | 
			
		||||
			eip = *(unsigned long *) (ebp+4);
 | 
			
		||||
			if (eip < first_sched || eip >= last_sched)
 | 
			
		||||
				return eip;
 | 
			
		||||
			ebp = *(unsigned long *) ebp;
 | 
			
		||||
		} while (count++ < 16);
 | 
			
		||||
	}
 | 
			
		||||
#elif defined(__alpha__)
 | 
			
		||||
	/*
 | 
			
		||||
	 * This one depends on the frame size of schedule().  Do a
 | 
			
		||||
	 * "disass schedule" in gdb to find the frame size.  Also, the
 | 
			
		||||
	 * code assumes that sleep_on() follows immediately after
 | 
			
		||||
	 * interruptible_sleep_on() and that add_timer() follows
 | 
			
		||||
	 * immediately after interruptible_sleep().  Ugly, isn't it?
 | 
			
		||||
	 * Maybe adding a wchan field to task_struct would be better,
 | 
			
		||||
	 * after all...
 | 
			
		||||
	 */
 | 
			
		||||
	{
 | 
			
		||||
	    unsigned long schedule_frame;
 | 
			
		||||
	    unsigned long pc;
 | 
			
		||||
 | 
			
		||||
	    pc = thread_saved_pc(&p->tss);
 | 
			
		||||
	    if (pc >= first_sched && pc < last_sched) {
 | 
			
		||||
		schedule_frame = ((unsigned long *)p->tss.ksp)[6];
 | 
			
		||||
		return ((unsigned long *)schedule_frame)[12];
 | 
			
		||||
	    }
 | 
			
		||||
	    return pc;
 | 
			
		||||
	}	
 | 
			
		||||
#elif defined(__mc68000__)
 | 
			
		||||
	{
 | 
			
		||||
	    unsigned long fp, pc;
 | 
			
		||||
	    unsigned long stack_page;
 | 
			
		||||
	    int count = 0;
 | 
			
		||||
	    extern int sys_pause (void);
 | 
			
		||||
 | 
			
		||||
	    stack_page = p->kernel_stack_page;
 | 
			
		||||
	    if (!stack_page)
 | 
			
		||||
		    return 0;
 | 
			
		||||
	    fp = ((struct switch_stack *)p->tss.ksp)->a6;
 | 
			
		||||
	    do {
 | 
			
		||||
		    if (fp < stack_page || fp >= 4088+stack_page)
 | 
			
		||||
			    return 0;
 | 
			
		||||
		    pc = ((unsigned long *)fp)[1];
 | 
			
		||||
		/* FIXME: This depends on the order of these functions. */
 | 
			
		||||
		    if (pc < first_sched || pc >= last_sched)
 | 
			
		||||
		      return pc;
 | 
			
		||||
		    fp = *(unsigned long *) fp;
 | 
			
		||||
	    } while (count++ < 16);
 | 
			
		||||
	}
 | 
			
		||||
#elif defined(__powerpc__)
 | 
			
		||||
	return (p->tss.wchan);
 | 
			
		||||
#elif defined (CONFIG_ARM)
 | 
			
		||||
	{
 | 
			
		||||
		unsigned long fp, lr;
 | 
			
		||||
		unsigned long stack_page;
 | 
			
		||||
		int count = 0;
 | 
			
		||||
 | 
			
		||||
		stack_page = 4096 + (unsigned long)p;
 | 
			
		||||
		fp = get_css_fp (&p->tss);
 | 
			
		||||
		do {
 | 
			
		||||
			if (fp < stack_page || fp > 4092+stack_page)
 | 
			
		||||
				return 0;
 | 
			
		||||
			lr = pc_pointer (((unsigned long *)fp)[-1]);
 | 
			
		||||
			if (lr < first_sched || lr > last_sched)
 | 
			
		||||
				return lr;
 | 
			
		||||
			fp = *(unsigned long *) (fp - 12);
 | 
			
		||||
		} while (count ++ < 16);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(__i386__)
 | 
			
		||||
# define KSTK_EIP(tsk)	(((unsigned long *)(4096+(unsigned long)(tsk)))[1019])
 | 
			
		||||
# define KSTK_ESP(tsk)	(((unsigned long *)(4096+(unsigned long)(tsk)))[1022])
 | 
			
		||||
#elif defined(__alpha__)
 | 
			
		||||
  /*
 | 
			
		||||
   * See arch/alpha/kernel/ptrace.c for details.
 | 
			
		||||
   */
 | 
			
		||||
# define PT_REG(reg)		(PAGE_SIZE - sizeof(struct pt_regs)	\
 | 
			
		||||
				 + (long)&((struct pt_regs *)0)->reg)
 | 
			
		||||
# define KSTK_EIP(tsk) \
 | 
			
		||||
    (*(unsigned long *)(PT_REG(pc) + PAGE_SIZE + (unsigned long)(tsk)))
 | 
			
		||||
# define KSTK_ESP(tsk)	((tsk) == current ? rdusp() : (tsk)->tss.usp)
 | 
			
		||||
#elif defined(CONFIG_ARM)
 | 
			
		||||
# define KSTK_EIP(tsk)	(((unsigned long *)(4096+(unsigned long)(tsk)))[1022])
 | 
			
		||||
# define KSTK_ESP(tsk)	(((unsigned long *)(4096+(unsigned long)(tsk)))[1020])
 | 
			
		||||
#elif defined(__mc68000__)
 | 
			
		||||
#define	KSTK_EIP(tsk)	\
 | 
			
		||||
    ({			\
 | 
			
		||||
	unsigned long eip = 0;	 \
 | 
			
		||||
 	if ((tsk)->tss.esp0 > PAGE_SIZE && \
 | 
			
		||||
	    MAP_NR((tsk)->tss.esp0) < max_mapnr) \
 | 
			
		||||
	      eip = ((struct pt_regs *) (tsk)->tss.esp0)->pc;	 \
 | 
			
		||||
        eip; })
 | 
			
		||||
#define	KSTK_ESP(tsk)	((tsk) == current ? rdusp() : (tsk)->tss.usp)
 | 
			
		||||
#elif defined(__powerpc__)
 | 
			
		||||
#define KSTK_EIP(tsk)	((tsk)->tss.regs->nip)
 | 
			
		||||
#define KSTK_ESP(tsk)	((tsk)->tss.regs->gpr[1])
 | 
			
		||||
#elif defined (__sparc_v9__)
 | 
			
		||||
# define KSTK_EIP(tsk)  ((tsk)->tss.kregs->tpc)
 | 
			
		||||
# define KSTK_ESP(tsk)  ((tsk)->tss.kregs->u_regs[UREG_FP])
 | 
			
		||||
#elif defined(__sparc__)
 | 
			
		||||
# define KSTK_EIP(tsk)  ((tsk)->tss.kregs->pc)
 | 
			
		||||
# define KSTK_ESP(tsk)  ((tsk)->tss.kregs->u_regs[UREG_FP])
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Gcc optimizes away "strlen(x)" for constant x */
 | 
			
		||||
#define ADDBUF(buffer, string) \
 | 
			
		||||
do { memcpy(buffer, string, strlen(string)); \
 | 
			
		||||
     buffer += strlen(string); } while (0)
 | 
			
		||||
 | 
			
		||||
static inline void statm_pte_range(pmd_t * pmd, unsigned long address, unsigned long size,
 | 
			
		||||
	int * pages, int * shared, int * dirty, int * total)
 | 
			
		||||
{
 | 
			
		||||
	pte_t * pte;
 | 
			
		||||
	unsigned long end;
 | 
			
		||||
 | 
			
		||||
	if (pmd_none(*pmd))
 | 
			
		||||
		return;
 | 
			
		||||
	if (pmd_bad(*pmd)) {
 | 
			
		||||
		printk("statm_pte_range: bad pmd (%08lx)\n", pmd_val(*pmd));
 | 
			
		||||
		pmd_clear(pmd);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	pte = pte_offset(pmd, address);
 | 
			
		||||
	address &= ~PMD_MASK;
 | 
			
		||||
	end = address + size;
 | 
			
		||||
	if (end > PMD_SIZE)
 | 
			
		||||
		end = PMD_SIZE;
 | 
			
		||||
	do {
 | 
			
		||||
		pte_t page = *pte;
 | 
			
		||||
 | 
			
		||||
		address += PAGE_SIZE;
 | 
			
		||||
		pte++;
 | 
			
		||||
		if (pte_none(page))
 | 
			
		||||
			continue;
 | 
			
		||||
		++*total;
 | 
			
		||||
		if (!pte_present(page))
 | 
			
		||||
			continue;
 | 
			
		||||
		++*pages;
 | 
			
		||||
		if (pte_dirty(page))
 | 
			
		||||
			++*dirty;
 | 
			
		||||
		if (MAP_NR(pte_page(page)) >= max_mapnr)
 | 
			
		||||
			continue;
 | 
			
		||||
		if (atomic_read(&mem_map[MAP_NR(pte_page(page))].count) > 1)
 | 
			
		||||
			++*shared;
 | 
			
		||||
	} while (address < end);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void statm_pmd_range(pgd_t * pgd, unsigned long address, unsigned long size,
 | 
			
		||||
	int * pages, int * shared, int * dirty, int * total)
 | 
			
		||||
{
 | 
			
		||||
	pmd_t * pmd;
 | 
			
		||||
	unsigned long end;
 | 
			
		||||
 | 
			
		||||
	if (pgd_none(*pgd))
 | 
			
		||||
		return;
 | 
			
		||||
	if (pgd_bad(*pgd)) {
 | 
			
		||||
		printk("statm_pmd_range: bad pgd (%08lx)\n", pgd_val(*pgd));
 | 
			
		||||
		pgd_clear(pgd);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	pmd = pmd_offset(pgd, address);
 | 
			
		||||
	address &= ~PGDIR_MASK;
 | 
			
		||||
	end = address + size;
 | 
			
		||||
	if (end > PGDIR_SIZE)
 | 
			
		||||
		end = PGDIR_SIZE;
 | 
			
		||||
	do {
 | 
			
		||||
		statm_pte_range(pmd, address, end - address, pages, shared, dirty, total);
 | 
			
		||||
		address = (address + PMD_SIZE) & PMD_MASK;
 | 
			
		||||
		pmd++;
 | 
			
		||||
	} while (address < end);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void statm_pgd_range(pgd_t * pgd, unsigned long address, unsigned long end,
 | 
			
		||||
	int * pages, int * shared, int * dirty, int * total)
 | 
			
		||||
{
 | 
			
		||||
	while (address < end) {
 | 
			
		||||
		statm_pmd_range(pgd, address, end - address, pages, shared, dirty, total);
 | 
			
		||||
		address = (address + PGDIR_SIZE) & PGDIR_MASK;
 | 
			
		||||
		pgd++;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
table_fkt (int type, union table *buf, const void *param)
 | 
			
		||||
{
 | 
			
		||||
	union table tbl;
 | 
			
		||||
	struct sysinfo i;
 | 
			
		||||
	struct task_struct *tsk = NULL;
 | 
			
		||||
	struct proclist_args plistargs;
 | 
			
		||||
	int index, tindex, err, tty;
 | 
			
		||||
	sigset_t sigign, sigcatch;
 | 
			
		||||
	pid_t pid;
 | 
			
		||||
 | 
			
		||||
	if (type == TABLE_VERSION)
 | 
			
		||||
		return _TABLE_VERSION;
 | 
			
		||||
 | 
			
		||||
	if (!buf)
 | 
			
		||||
		return -EFAULT;
 | 
			
		||||
 | 
			
		||||
	memset (&tbl, 0, sizeof (union table));
 | 
			
		||||
 | 
			
		||||
	/* For TABLE_PROC_*, read pid and get task_struct */
 | 
			
		||||
 | 
			
		||||
	switch (type) {
 | 
			
		||||
	case TABLE_PROC_UID:
 | 
			
		||||
	case TABLE_PROC_MEM:
 | 
			
		||||
	case TABLE_PROC_SEGMENT:
 | 
			
		||||
	case TABLE_PROC_TIME:
 | 
			
		||||
	case TABLE_PROC_STATE:
 | 
			
		||||
	case TABLE_PROC_SIGNAL:
 | 
			
		||||
	case TABLE_PROC_KERNEL:
 | 
			
		||||
		err = verify_area (VERIFY_READ, param, sizeof (pid_t));
 | 
			
		||||
		if (err)
 | 
			
		||||
			return err;
 | 
			
		||||
		copy_from_user (&pid, param, sizeof (pid_t));
 | 
			
		||||
 | 
			
		||||
		read_lock (&tasklist_lock);
 | 
			
		||||
		tsk = find_task_by_pid (pid);
 | 
			
		||||
		/* FIXME!! This should be done after the last use */
 | 
			
		||||
		read_unlock(&tasklist_lock);
 | 
			
		||||
 | 
			
		||||
		if (tsk == NULL)
 | 
			
		||||
			return -ESRCH;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROCLIST:
 | 
			
		||||
		err = verify_area (VERIFY_READ, param,
 | 
			
		||||
				   sizeof (struct proclist_args));
 | 
			
		||||
		if (err)
 | 
			
		||||
			return err;
 | 
			
		||||
		copy_from_user (&plistargs, param,
 | 
			
		||||
				sizeof (struct proclist_args));
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Main function dispatcher */
 | 
			
		||||
 | 
			
		||||
	switch (type) {
 | 
			
		||||
	case TABLE_PROCLIST:
 | 
			
		||||
		tsk = task [0];
 | 
			
		||||
		read_lock (&tasklist_lock);
 | 
			
		||||
		for (index = tindex = 0; index < nr_tasks;
 | 
			
		||||
		     index++, tsk = tsk->next_task) {
 | 
			
		||||
			if (tsk->pid == 0) continue;
 | 
			
		||||
			switch (plistargs.which & TABLE_KERN_PROC_MASK) {
 | 
			
		||||
			case TABLE_KERN_PROC_PID:
 | 
			
		||||
				if (tsk->pid != plistargs.arg) continue;
 | 
			
		||||
				break;
 | 
			
		||||
			case TABLE_KERN_PROC_PGRP:
 | 
			
		||||
				if (tsk->pgrp != plistargs.arg) continue;
 | 
			
		||||
				break;
 | 
			
		||||
			case TABLE_KERN_PROC_SESSION:
 | 
			
		||||
				if (tsk->session != plistargs.arg) continue;
 | 
			
		||||
			case TABLE_KERN_PROC_TTY:
 | 
			
		||||
				tty = tsk->tty ?
 | 
			
		||||
					kdev_t_to_nr (tsk->tty->device) : 0;
 | 
			
		||||
				if (tty != plistargs.arg) continue;
 | 
			
		||||
				break;
 | 
			
		||||
			case TABLE_KERN_PROC_UID:
 | 
			
		||||
				if (tsk->uid != plistargs.arg) continue;
 | 
			
		||||
				break;
 | 
			
		||||
			case TABLE_KERN_PROC_RUID:
 | 
			
		||||
				if (tsk->euid != plistargs.arg) continue;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if ((plistargs.which & TABLE_EXCLUDE_IDLE) &&
 | 
			
		||||
			    (tsk->state != 0))
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
			if ((plistargs.which & TABLE_EXCLUDE_NOTTY) &&
 | 
			
		||||
			    (tsk->tty == NULL))
 | 
			
		||||
				continue;
 | 
			
		||||
			
 | 
			
		||||
			tbl.proclist.pids [tindex++] = tsk->pid;
 | 
			
		||||
		}
 | 
			
		||||
		tbl.proclist.nr_running = nr_running;
 | 
			
		||||
		tbl.proclist.last_pid = last_pid;
 | 
			
		||||
		tbl.proclist.nr_tasks = tindex;
 | 
			
		||||
		read_unlock(&tasklist_lock);
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_CPU:
 | 
			
		||||
		tbl.cpu.total = jiffies;    
 | 
			
		||||
		tbl.cpu.user  = kstat.cpu_user;
 | 
			
		||||
		tbl.cpu.nice  = kstat.cpu_nice;
 | 
			
		||||
		tbl.cpu.sys   = kstat.cpu_system;
 | 
			
		||||
		tbl.cpu.idle  = tbl.cpu.total -
 | 
			
		||||
			(tbl.cpu.user + tbl.cpu.nice + tbl.cpu.sys);
 | 
			
		||||
		tbl.cpu.frequency = HZ;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_MEM:
 | 
			
		||||
		si_meminfo (&i);
 | 
			
		||||
		tbl.mem.total  = i.totalram;
 | 
			
		||||
		tbl.mem.used   = i.totalram - i.freeram;
 | 
			
		||||
		tbl.mem.free   = i.freeram;
 | 
			
		||||
		tbl.mem.shared = i.sharedram;
 | 
			
		||||
		tbl.mem.buffer = i.bufferram;
 | 
			
		||||
		tbl.mem.cached = page_cache_size << PAGE_SHIFT;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_SWAP:
 | 
			
		||||
		si_swapinfo (&i);
 | 
			
		||||
		tbl.swap.total = i.totalswap;
 | 
			
		||||
		tbl.swap.used  = i.totalswap - i.freeswap;
 | 
			
		||||
		tbl.swap.free  = i.freeswap;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_LOADAVG:
 | 
			
		||||
		tbl.loadavg.loadavg [0] = (double) avenrun [0] / (1 << FSHIFT);
 | 
			
		||||
		tbl.loadavg.loadavg [1] = (double) avenrun [1] / (1 << FSHIFT);
 | 
			
		||||
		tbl.loadavg.loadavg [2] = (double) avenrun [2] / (1 << FSHIFT);
 | 
			
		||||
		tbl.loadavg.nr_running = nr_running;
 | 
			
		||||
		tbl.loadavg.nr_tasks = nr_tasks;
 | 
			
		||||
		tbl.loadavg.last_pid = last_pid;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_UPTIME:
 | 
			
		||||
		tbl.uptime.uptime = jiffies;
 | 
			
		||||
		tbl.uptime.idle   = task[0]->times.tms_utime +
 | 
			
		||||
			task[0]->times.tms_stime;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_STATE:
 | 
			
		||||
		tbl.proc_state.uid = tsk->uid;
 | 
			
		||||
		tbl.proc_state.gid = tsk->gid;
 | 
			
		||||
		tbl.proc_state.state = tsk->state;
 | 
			
		||||
		tbl.proc_state.flags = tsk->flags;
 | 
			
		||||
		memcpy (tbl.proc_state.comm, tsk->comm,
 | 
			
		||||
			sizeof (tbl.proc_state.comm));
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_UID:
 | 
			
		||||
		tbl.proc_uid.uid = tsk->uid;
 | 
			
		||||
		tbl.proc_uid.euid = tsk->euid;
 | 
			
		||||
		tbl.proc_uid.suid = tsk->suid;
 | 
			
		||||
		tbl.proc_uid.fsuid = tsk->fsuid;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.gid = tsk->gid;
 | 
			
		||||
		tbl.proc_uid.egid = tsk->egid;
 | 
			
		||||
		tbl.proc_uid.sgid = tsk->sgid;
 | 
			
		||||
		tbl.proc_uid.fsgid = tsk->fsgid;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.pid = tsk->pid;
 | 
			
		||||
		tbl.proc_uid.pgrp = tsk->pgrp;
 | 
			
		||||
		tbl.proc_uid.ppid = tsk->p_pptr->pid;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.session = tsk->session;
 | 
			
		||||
	        tbl.proc_uid.tty = tsk->tty ?
 | 
			
		||||
			kdev_t_to_nr (tsk->tty->device) : 0;
 | 
			
		||||
		tbl.proc_uid.tpgid = tsk->tty ? tsk->tty->pgrp : -1;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.priority = tsk->priority;
 | 
			
		||||
		tbl.proc_uid.counter = tsk->counter;
 | 
			
		||||
		tbl.proc_uid.def_priority = DEF_PRIORITY;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_SIGNAL:
 | 
			
		||||
		memcpy (&tbl.proc_signal.signal, &tsk->signal,
 | 
			
		||||
			sizeof (tbl.proc_signal.signal));
 | 
			
		||||
 | 
			
		||||
		memcpy (&tbl.proc_signal.blocked, &tsk->blocked,
 | 
			
		||||
			sizeof (tbl.proc_signal.blocked));
 | 
			
		||||
 | 
			
		||||
		collect_sigign_sigcatch (tsk, &sigign, &sigcatch);
 | 
			
		||||
 | 
			
		||||
		memcpy (&tbl.proc_signal.ignored, &sigign,
 | 
			
		||||
			sizeof (tbl.proc_signal.ignored));
 | 
			
		||||
 | 
			
		||||
		memcpy (&tbl.proc_signal.caught, &sigcatch,
 | 
			
		||||
			sizeof (tbl.proc_signal.caught));
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
		printk ("PROC_SIGNAL: (%lu, %lu) - (%lu, %lu)\n",
 | 
			
		||||
			tbl.proc_signal.ignored.sig [0],
 | 
			
		||||
			tbl.proc_signal.ignored.sig [1],
 | 
			
		||||
			tbl.proc_signal.caught.sig [0],
 | 
			
		||||
			tbl.proc_signal.caught.sig [1]);
 | 
			
		||||
#endif
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_MEM:
 | 
			
		||||
		if (tsk->mm && tsk->mm != &init_mm) {
 | 
			
		||||
			tbl.proc_mem.context = tsk->mm->context;
 | 
			
		||||
			tbl.proc_mem.start_code = tsk->mm->start_code;
 | 
			
		||||
			tbl.proc_mem.end_code = tsk->mm->end_code;
 | 
			
		||||
			tbl.proc_mem.start_data = tsk->mm-> start_data;
 | 
			
		||||
			tbl.proc_mem.end_data = tsk->mm->end_data;
 | 
			
		||||
			tbl.proc_mem.start_brk = tsk->mm->start_brk;
 | 
			
		||||
			tbl.proc_mem.brk = tsk->mm->brk;
 | 
			
		||||
			tbl.proc_mem.start_stack = tsk->mm->start_stack;
 | 
			
		||||
			tbl.proc_mem.start_mmap = tsk->mm->mmap ?
 | 
			
		||||
				tsk->mm->mmap->vm_start : 0;
 | 
			
		||||
			tbl.proc_mem.arg_start = tsk->mm->arg_start;
 | 
			
		||||
			tbl.proc_mem.arg_end = tsk->mm->arg_end;
 | 
			
		||||
			tbl.proc_mem.env_start = tsk->mm->env_start;
 | 
			
		||||
			tbl.proc_mem.env_end = tsk->mm->env_end;
 | 
			
		||||
			tbl.proc_mem.rss = tsk->mm->rss << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_mem.total_vm = tsk->mm->total_vm;
 | 
			
		||||
			tbl.proc_mem.locked_vm = tsk->mm->locked_vm;
 | 
			
		||||
		}
 | 
			
		||||
		tbl.proc_mem.rlim = tsk->rlim ? tsk->rlim[RLIMIT_RSS].rlim_cur : 0;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_SEGMENT:
 | 
			
		||||
		if (tsk->mm && tsk->mm != &init_mm) {
 | 
			
		||||
			unsigned long vsize = 0;
 | 
			
		||||
			int size = 0, resident = 0, share = 0;
 | 
			
		||||
			int trs = 0, lrs = 0, drs = 0, srs = 0, dt = 0;
 | 
			
		||||
			struct vm_area_struct * vma = tsk->mm->mmap;
 | 
			
		||||
 | 
			
		||||
			while (vma) {
 | 
			
		||||
				pgd_t *pgd = pgd_offset(tsk->mm, vma->vm_start);
 | 
			
		||||
				int pages = 0, shared = 0, dirty = 0, total = 0;
 | 
			
		||||
				
 | 
			
		||||
				vsize += vma->vm_end - vma->vm_start;
 | 
			
		||||
 | 
			
		||||
				statm_pgd_range (pgd, vma->vm_start, vma->vm_end,
 | 
			
		||||
 | 
			
		||||
						 &pages, &shared, &dirty, &total);
 | 
			
		||||
 | 
			
		||||
				resident += pages;
 | 
			
		||||
				share += shared;
 | 
			
		||||
				dt += dirty;
 | 
			
		||||
				size += total;
 | 
			
		||||
 | 
			
		||||
				/* Well, shared library seem to get mapped
 | 
			
		||||
				 * above 0x40000000 and are executable,
 | 
			
		||||
				 * so I use this hack to get their size.
 | 
			
		||||
				 */
 | 
			
		||||
 | 
			
		||||
				if (vma->vm_flags & VM_GROWSDOWN)
 | 
			
		||||
					srs += pages;	/* stack */
 | 
			
		||||
				else if ((vma->vm_flags & VM_EXEC) &&
 | 
			
		||||
					 (vma->vm_start > 0x40000000))
 | 
			
		||||
					lrs += pages;	/* library */
 | 
			
		||||
				else if (vma->vm_flags & VM_EXECUTABLE)
 | 
			
		||||
					trs += pages;	/* text */
 | 
			
		||||
				else
 | 
			
		||||
					drs += pages;
 | 
			
		||||
 | 
			
		||||
				vma = vma->vm_next;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			tbl.proc_segment.vsize = vsize;
 | 
			
		||||
			tbl.proc_segment.size = size << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.resident = resident << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.shared = share << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.trs = trs << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.lrs = lrs << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.drs = drs << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.srs = srs << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.dt = dt << PAGE_SHIFT;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_TIME:
 | 
			
		||||
		tbl.proc_time.utime = tsk->times.tms_utime;
 | 
			
		||||
		tbl.proc_time.stime = tsk->times.tms_stime;
 | 
			
		||||
		tbl.proc_time.cutime = tsk->times.tms_cutime;
 | 
			
		||||
		tbl.proc_time.cstime = tsk->times.tms_cstime;
 | 
			
		||||
 | 
			
		||||
		tbl.proc_time.start_time = tsk->start_time;
 | 
			
		||||
		tbl.proc_time.timeout = tsk->timeout;
 | 
			
		||||
		tbl.proc_time.policy = tsk->policy;
 | 
			
		||||
		tbl.proc_time.rt_priority = tsk->rt_priority;
 | 
			
		||||
 | 
			
		||||
		tbl.proc_time.it_real_value = tsk->it_real_value;
 | 
			
		||||
		tbl.proc_time.it_prof_value = tsk->it_prof_value;
 | 
			
		||||
		tbl.proc_time.it_virt_value = tsk->it_virt_value;
 | 
			
		||||
		tbl.proc_time.it_real_incr = tsk->it_real_incr;
 | 
			
		||||
		tbl.proc_time.it_prof_incr = tsk->it_prof_incr;
 | 
			
		||||
		tbl.proc_time.it_virt_incr = tsk->it_virt_incr;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_KERNEL:
 | 
			
		||||
		tbl.proc_kernel.min_flt = tsk->min_flt;
 | 
			
		||||
		tbl.proc_kernel.cmin_flt = tsk->cmin_flt;
 | 
			
		||||
		tbl.proc_kernel.maj_flt = tsk->maj_flt;
 | 
			
		||||
		tbl.proc_kernel.cmaj_flt = tsk->cmaj_flt;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_kernel.kesp = KSTK_ESP(tsk);
 | 
			
		||||
		tbl.proc_kernel.keip = KSTK_EIP(tsk);
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_kernel.nswap = tsk->nswap;
 | 
			
		||||
		tbl.proc_kernel.cnswap = tsk->cnswap;
 | 
			
		||||
 | 
			
		||||
		tbl.proc_kernel.wchan = get_wchan (tsk);
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = verify_area (VERIFY_WRITE, buf, sizeof (struct table));
 | 
			
		||||
	if (err)
 | 
			
		||||
		return err;
 | 
			
		||||
 | 
			
		||||
	copy_to_user (buf, &tbl, sizeof (union table));
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,344 +0,0 @@
 | 
			
		||||
#ifndef _ASM_I386_UNISTD_H_
 | 
			
		||||
#define _ASM_I386_UNISTD_H_
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file contains the system call numbers.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define __NR_setup		  0	/* used only by init, to get system going */
 | 
			
		||||
#define __NR_exit		  1
 | 
			
		||||
#define __NR_fork		  2
 | 
			
		||||
#define __NR_read		  3
 | 
			
		||||
#define __NR_write		  4
 | 
			
		||||
#define __NR_open		  5
 | 
			
		||||
#define __NR_close		  6
 | 
			
		||||
#define __NR_waitpid		  7
 | 
			
		||||
#define __NR_creat		  8
 | 
			
		||||
#define __NR_link		  9
 | 
			
		||||
#define __NR_unlink		 10
 | 
			
		||||
#define __NR_execve		 11
 | 
			
		||||
#define __NR_chdir		 12
 | 
			
		||||
#define __NR_time		 13
 | 
			
		||||
#define __NR_mknod		 14
 | 
			
		||||
#define __NR_chmod		 15
 | 
			
		||||
#define __NR_lchown		 16
 | 
			
		||||
#define __NR_break		 17
 | 
			
		||||
#define __NR_oldstat		 18
 | 
			
		||||
#define __NR_lseek		 19
 | 
			
		||||
#define __NR_getpid		 20
 | 
			
		||||
#define __NR_mount		 21
 | 
			
		||||
#define __NR_umount		 22
 | 
			
		||||
#define __NR_setuid		 23
 | 
			
		||||
#define __NR_getuid		 24
 | 
			
		||||
#define __NR_stime		 25
 | 
			
		||||
#define __NR_ptrace		 26
 | 
			
		||||
#define __NR_alarm		 27
 | 
			
		||||
#define __NR_oldfstat		 28
 | 
			
		||||
#define __NR_pause		 29
 | 
			
		||||
#define __NR_utime		 30
 | 
			
		||||
#define __NR_stty		 31
 | 
			
		||||
#define __NR_gtty		 32
 | 
			
		||||
#define __NR_access		 33
 | 
			
		||||
#define __NR_nice		 34
 | 
			
		||||
#define __NR_ftime		 35
 | 
			
		||||
#define __NR_sync		 36
 | 
			
		||||
#define __NR_kill		 37
 | 
			
		||||
#define __NR_rename		 38
 | 
			
		||||
#define __NR_mkdir		 39
 | 
			
		||||
#define __NR_rmdir		 40
 | 
			
		||||
#define __NR_dup		 41
 | 
			
		||||
#define __NR_pipe		 42
 | 
			
		||||
#define __NR_times		 43
 | 
			
		||||
#define __NR_prof		 44
 | 
			
		||||
#define __NR_brk		 45
 | 
			
		||||
#define __NR_setgid		 46
 | 
			
		||||
#define __NR_getgid		 47
 | 
			
		||||
#define __NR_signal		 48
 | 
			
		||||
#define __NR_geteuid		 49
 | 
			
		||||
#define __NR_getegid		 50
 | 
			
		||||
#define __NR_acct		 51
 | 
			
		||||
#define __NR_phys		 52
 | 
			
		||||
#define __NR_lock		 53
 | 
			
		||||
#define __NR_ioctl		 54
 | 
			
		||||
#define __NR_fcntl		 55
 | 
			
		||||
#define __NR_mpx		 56
 | 
			
		||||
#define __NR_setpgid		 57
 | 
			
		||||
#define __NR_ulimit		 58
 | 
			
		||||
#define __NR_oldolduname	 59
 | 
			
		||||
#define __NR_umask		 60
 | 
			
		||||
#define __NR_chroot		 61
 | 
			
		||||
#define __NR_ustat		 62
 | 
			
		||||
#define __NR_dup2		 63
 | 
			
		||||
#define __NR_getppid		 64
 | 
			
		||||
#define __NR_getpgrp		 65
 | 
			
		||||
#define __NR_setsid		 66
 | 
			
		||||
#define __NR_sigaction		 67
 | 
			
		||||
#define __NR_sgetmask		 68
 | 
			
		||||
#define __NR_ssetmask		 69
 | 
			
		||||
#define __NR_setreuid		 70
 | 
			
		||||
#define __NR_setregid		 71
 | 
			
		||||
#define __NR_sigsuspend		 72
 | 
			
		||||
#define __NR_sigpending		 73
 | 
			
		||||
#define __NR_sethostname	 74
 | 
			
		||||
#define __NR_setrlimit		 75
 | 
			
		||||
#define __NR_getrlimit		 76
 | 
			
		||||
#define __NR_getrusage		 77
 | 
			
		||||
#define __NR_gettimeofday	 78
 | 
			
		||||
#define __NR_settimeofday	 79
 | 
			
		||||
#define __NR_getgroups		 80
 | 
			
		||||
#define __NR_setgroups		 81
 | 
			
		||||
#define __NR_select		 82
 | 
			
		||||
#define __NR_symlink		 83
 | 
			
		||||
#define __NR_oldlstat		 84
 | 
			
		||||
#define __NR_readlink		 85
 | 
			
		||||
#define __NR_uselib		 86
 | 
			
		||||
#define __NR_swapon		 87
 | 
			
		||||
#define __NR_reboot		 88
 | 
			
		||||
#define __NR_readdir		 89
 | 
			
		||||
#define __NR_mmap		 90
 | 
			
		||||
#define __NR_munmap		 91
 | 
			
		||||
#define __NR_truncate		 92
 | 
			
		||||
#define __NR_ftruncate		 93
 | 
			
		||||
#define __NR_fchmod		 94
 | 
			
		||||
#define __NR_fchown		 95
 | 
			
		||||
#define __NR_getpriority	 96
 | 
			
		||||
#define __NR_setpriority	 97
 | 
			
		||||
#define __NR_profil		 98
 | 
			
		||||
#define __NR_statfs		 99
 | 
			
		||||
#define __NR_fstatfs		100
 | 
			
		||||
#define __NR_ioperm		101
 | 
			
		||||
#define __NR_socketcall		102
 | 
			
		||||
#define __NR_syslog		103
 | 
			
		||||
#define __NR_setitimer		104
 | 
			
		||||
#define __NR_getitimer		105
 | 
			
		||||
#define __NR_stat		106
 | 
			
		||||
#define __NR_lstat		107
 | 
			
		||||
#define __NR_fstat		108
 | 
			
		||||
#define __NR_olduname		109
 | 
			
		||||
#define __NR_iopl		110
 | 
			
		||||
#define __NR_vhangup		111
 | 
			
		||||
#define __NR_idle		112
 | 
			
		||||
#define __NR_vm86old		113
 | 
			
		||||
#define __NR_wait4		114
 | 
			
		||||
#define __NR_swapoff		115
 | 
			
		||||
#define __NR_sysinfo		116
 | 
			
		||||
#define __NR_ipc		117
 | 
			
		||||
#define __NR_fsync		118
 | 
			
		||||
#define __NR_sigreturn		119
 | 
			
		||||
#define __NR_clone		120
 | 
			
		||||
#define __NR_setdomainname	121
 | 
			
		||||
#define __NR_uname		122
 | 
			
		||||
#define __NR_modify_ldt		123
 | 
			
		||||
#define __NR_adjtimex		124
 | 
			
		||||
#define __NR_mprotect		125
 | 
			
		||||
#define __NR_sigprocmask	126
 | 
			
		||||
#define __NR_create_module	127
 | 
			
		||||
#define __NR_init_module	128
 | 
			
		||||
#define __NR_delete_module	129
 | 
			
		||||
#define __NR_get_kernel_syms	130
 | 
			
		||||
#define __NR_quotactl		131
 | 
			
		||||
#define __NR_getpgid		132
 | 
			
		||||
#define __NR_fchdir		133
 | 
			
		||||
#define __NR_bdflush		134
 | 
			
		||||
#define __NR_sysfs		135
 | 
			
		||||
#define __NR_personality	136
 | 
			
		||||
#define __NR_afs_syscall	137 /* Syscall for Andrew File System */
 | 
			
		||||
#define __NR_setfsuid		138
 | 
			
		||||
#define __NR_setfsgid		139
 | 
			
		||||
#define __NR__llseek		140
 | 
			
		||||
#define __NR_getdents		141
 | 
			
		||||
#define __NR__newselect		142
 | 
			
		||||
#define __NR_flock		143
 | 
			
		||||
#define __NR_msync		144
 | 
			
		||||
#define __NR_readv		145
 | 
			
		||||
#define __NR_writev		146
 | 
			
		||||
#define __NR_getsid		147
 | 
			
		||||
#define __NR_fdatasync		148
 | 
			
		||||
#define __NR__sysctl		149
 | 
			
		||||
#define __NR_mlock		150
 | 
			
		||||
#define __NR_munlock		151
 | 
			
		||||
#define __NR_mlockall		152
 | 
			
		||||
#define __NR_munlockall		153
 | 
			
		||||
#define __NR_sched_setparam		154
 | 
			
		||||
#define __NR_sched_getparam		155
 | 
			
		||||
#define __NR_sched_setscheduler		156
 | 
			
		||||
#define __NR_sched_getscheduler		157
 | 
			
		||||
#define __NR_sched_yield		158
 | 
			
		||||
#define __NR_sched_get_priority_max	159
 | 
			
		||||
#define __NR_sched_get_priority_min	160
 | 
			
		||||
#define __NR_sched_rr_get_interval	161
 | 
			
		||||
#define __NR_nanosleep		162
 | 
			
		||||
#define __NR_mremap		163
 | 
			
		||||
#define __NR_setresuid		164
 | 
			
		||||
#define __NR_getresuid		165
 | 
			
		||||
#define __NR_vm86		166
 | 
			
		||||
#define __NR_query_module	167
 | 
			
		||||
#define __NR_poll		168
 | 
			
		||||
#define __NR_nfsservctl		169
 | 
			
		||||
#define __NR_setresgid		170
 | 
			
		||||
#define __NR_getresgid		171
 | 
			
		||||
#define __NR_prctl              172
 | 
			
		||||
#define __NR_rt_sigreturn	173
 | 
			
		||||
#define __NR_rt_sigaction	174
 | 
			
		||||
#define __NR_rt_sigprocmask	175
 | 
			
		||||
#define __NR_rt_sigpending	176
 | 
			
		||||
#define __NR_rt_sigtimedwait	177
 | 
			
		||||
#define __NR_rt_sigqueueinfo	178
 | 
			
		||||
#define __NR_rt_sigsuspend	179
 | 
			
		||||
#define __NR_pread		180
 | 
			
		||||
#define __NR_pwrite		181
 | 
			
		||||
#define __NR_chown		182
 | 
			
		||||
#define __NR_getcwd		183
 | 
			
		||||
#define __NR_capget		184
 | 
			
		||||
#define __NR_capset		185
 | 
			
		||||
#define __NR_sigaltstack	186
 | 
			
		||||
#define __NR_sendfile		187
 | 
			
		||||
#define __NR_streams1		188	/* some people actually want it */
 | 
			
		||||
#define __NR_streams2		189	/* some people actually want it */
 | 
			
		||||
#define __NR_table		190
 | 
			
		||||
 | 
			
		||||
/* user-visible error numbers are in the range -1 - -122: see <asm-i386/errno.h> */
 | 
			
		||||
 | 
			
		||||
#define __syscall_return(type, res) \
 | 
			
		||||
do { \
 | 
			
		||||
	if ((unsigned long)(res) >= (unsigned long)(-125)) { \
 | 
			
		||||
		errno = -(res); \
 | 
			
		||||
		res = -1; \
 | 
			
		||||
	} \
 | 
			
		||||
	return (type) (res); \
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
 | 
			
		||||
#define _syscall0(type,name) \
 | 
			
		||||
type name(void) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name)); \
 | 
			
		||||
__syscall_return(type,__res); \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall1(type,name,type1,arg1) \
 | 
			
		||||
type name(type1 arg1) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1))); \
 | 
			
		||||
__syscall_return(type,__res); \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall2(type,name,type1,arg1,type2,arg2) \
 | 
			
		||||
type name(type1 arg1,type2 arg2) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2))); \
 | 
			
		||||
__syscall_return(type,__res); \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
 | 
			
		||||
type name(type1 arg1,type2 arg2,type3 arg3) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
 | 
			
		||||
		  "d" ((long)(arg3))); \
 | 
			
		||||
__syscall_return(type,__res); \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
 | 
			
		||||
type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
 | 
			
		||||
	  "d" ((long)(arg3)),"S" ((long)(arg4))); \
 | 
			
		||||
__syscall_return(type,__res); \
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
 | 
			
		||||
	  type5,arg5) \
 | 
			
		||||
type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
 | 
			
		||||
	  "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
 | 
			
		||||
__syscall_return(type,__res); \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __KERNEL_SYSCALLS__
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * we need this inline - forking from kernel space will result
 | 
			
		||||
 * in NO COPY ON WRITE (!!!), until an execve is executed. This
 | 
			
		||||
 * is no problem, but for the stack. This is handled by not letting
 | 
			
		||||
 * main() use the stack at all after fork(). Thus, no function
 | 
			
		||||
 * calls - which means inline code for fork too, as otherwise we
 | 
			
		||||
 * would use the stack upon exit from 'fork()'.
 | 
			
		||||
 *
 | 
			
		||||
 * Actually only pause and fork are needed inline, so that there
 | 
			
		||||
 * won't be any messing with the stack from main(), but we define
 | 
			
		||||
 * some others too.
 | 
			
		||||
 */
 | 
			
		||||
#define __NR__exit __NR_exit
 | 
			
		||||
static inline _syscall0(int,idle)
 | 
			
		||||
static inline _syscall0(int,pause)
 | 
			
		||||
static inline _syscall1(int,setup,int,magic)
 | 
			
		||||
static inline _syscall0(int,sync)
 | 
			
		||||
static inline _syscall0(pid_t,setsid)
 | 
			
		||||
static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
 | 
			
		||||
static inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
 | 
			
		||||
static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
 | 
			
		||||
static inline _syscall1(int,dup,int,fd)
 | 
			
		||||
static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
 | 
			
		||||
static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
 | 
			
		||||
static inline _syscall1(int,close,int,fd)
 | 
			
		||||
static inline _syscall1(int,_exit,int,exitcode)
 | 
			
		||||
static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
 | 
			
		||||
static inline _syscall1(int,delete_module,const char *,name)
 | 
			
		||||
 | 
			
		||||
static inline pid_t wait(int * wait_stat)
 | 
			
		||||
{
 | 
			
		||||
	return waitpid(-1,wait_stat,0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is the mechanism for creating a new kernel thread.
 | 
			
		||||
 *
 | 
			
		||||
 * NOTE! Only a kernel-only process(ie the swapper or direct descendants
 | 
			
		||||
 * who haven't done an "execve()") should use this: it will work within
 | 
			
		||||
 * a system call from a "real" process, but the process memory space will
 | 
			
		||||
 * not be free'd until both the parent and the child have exited.
 | 
			
		||||
 */
 | 
			
		||||
static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
 | 
			
		||||
{
 | 
			
		||||
	long retval;
 | 
			
		||||
 | 
			
		||||
	__asm__ __volatile__(
 | 
			
		||||
		"movl %%esp,%%esi\n\t"
 | 
			
		||||
		"int $0x80\n\t"		/* Linux/i386 system call */
 | 
			
		||||
		"cmpl %%esp,%%esi\n\t"	/* child or parent? */
 | 
			
		||||
		"je 1f\n\t"		/* parent - jump */
 | 
			
		||||
		"pushl %3\n\t"		/* push argument */
 | 
			
		||||
		"call *%4\n\t"		/* call fn */
 | 
			
		||||
		"movl %2,%0\n\t"	/* exit */
 | 
			
		||||
		"int $0x80\n"
 | 
			
		||||
		"1:\t"
 | 
			
		||||
		:"=a" (retval)
 | 
			
		||||
		:"0" (__NR_clone), "i" (__NR_exit),
 | 
			
		||||
		 "r" (arg), "r" (fn),
 | 
			
		||||
		 "b" (flags | CLONE_VM)
 | 
			
		||||
		:"si");
 | 
			
		||||
	return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_I386_UNISTD_H_ */
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
#define _TABLE_VERSION	1
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user