Compare commits
	
		
			194 Commits
		
	
	
		
			LIBGTOP_1_
			...
			LIBGTOP_1_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					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)
 | 
			
		||||
Drazen Kacar (dave@srce.hr)
 | 
			
		||||
Josh Sled <jsled@scam.XCF.Berkeley.EDU>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										216
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										216
									
								
								ChangeLog
									
									
									
									
									
								
							@@ -1,58 +1,13 @@
 | 
			
		||||
1999-09-24  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
1999-05-28  Martin Baulig  <baulig@Stud.Informatik.Uni-Trier.DE>
 | 
			
		||||
 | 
			
		||||
	Released LibGTop 1.0.4.
 | 
			
		||||
	* 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-09-22  Kjartan Maraas  <kmaraas@online.no>
 | 
			
		||||
1999-05-28  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* 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/*.po: merged *.po files from HEAD CVS
 | 
			
		||||
 | 
			
		||||
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-09-17  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* LIBGTOP-VERSION: Set version number to 1.0.4 binary age 3,
 | 
			
		||||
	interface age 3.
 | 
			
		||||
 | 
			
		||||
1999-09-16  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Merged everything since May 31 from HEAD and released
 | 
			
		||||
 	LibGTop 1.0.3.
 | 
			
		||||
 | 
			
		||||
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-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-05-31  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* LIBGTOP-VERSION: Set version number to 1.0.3 binary age 2,
 | 
			
		||||
	interface age 2.
 | 
			
		||||
 | 
			
		||||
1999-05-31  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Released LibGTop 1.0.2.
 | 
			
		||||
	* glibtop.h (GLIBTOP_MOUNTENTRY_LEN): Move this
 | 
			
		||||
	* include/glibtop/limits.h: here.
 | 
			
		||||
 | 
			
		||||
1999-05-26  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
@@ -63,9 +18,162 @@
 | 
			
		||||
 | 
			
		||||
	* libgtop-sysdeps.m4: Make the I4B check work for NetBSD.
 | 
			
		||||
 | 
			
		||||
1999-05-16  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
1999-05-15  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* doc: Merged the LibGTop Manual from the HEAD.
 | 
			
		||||
	* 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>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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=4
 | 
			
		||||
LIBGTOP_MINOR_VERSION=1
 | 
			
		||||
LIBGTOP_MICRO_VERSION=0
 | 
			
		||||
 | 
			
		||||
LIBGTOP_INTERFACE_AGE=3
 | 
			
		||||
LIBGTOP_BINARY_AGE=3
 | 
			
		||||
LIBGTOP_INTERFACE_AGE=0
 | 
			
		||||
LIBGTOP_BINARY_AGE=0
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								Makefile.am
									
									
									
									
									
								
							@@ -14,11 +14,22 @@ SUBDIRS = po intl $(support) macros misc include sysdeps lib src \
 | 
			
		||||
	  $(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
 | 
			
		||||
 | 
			
		||||
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:
 | 
			
		||||
	cp libgtop.spec $(distdir)
 | 
			
		||||
 | 
			
		||||
@@ -31,8 +42,6 @@ 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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										155
									
								
								configure.in
									
									
									
									
									
								
							
							
						
						
									
										155
									
								
								configure.in
									
									
									
									
									
								
							@@ -97,15 +97,10 @@ if test "x$gnome_found" != xyes; then
 | 
			
		||||
  fi
 | 
			
		||||
  GNOME_SUPPORT_CHECKS
 | 
			
		||||
else
 | 
			
		||||
  if test "x$want_gnome" != xno ; then
 | 
			
		||||
    AM_CONDITIONAL(BUILD_GNOME_SUPPORT, false)
 | 
			
		||||
  else
 | 
			
		||||
    GNOME_SUPPORT_CHECKS
 | 
			
		||||
  fi
 | 
			
		||||
  AM_CONDITIONAL(BUILD_GNOME_SUPPORT, false)
 | 
			
		||||
  AM_CONDITIONAL(CROSS_COMPILING, test "x$cross_compiling" = xyes)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AM_CONDITIONAL(CROSS_COMPILING, test "x$cross_compiling" = xyes)
 | 
			
		||||
 | 
			
		||||
GNOME_LIBGTOP_SYSDEPS
 | 
			
		||||
GNOME_LIBGTOP_TYPES
 | 
			
		||||
 | 
			
		||||
@@ -163,9 +158,6 @@ 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)
 | 
			
		||||
@@ -197,6 +189,11 @@ AC_CHECK_HEADERS(string.h strings.h, break)
 | 
			
		||||
AC_REPLACE_FUNCS(strerror)
 | 
			
		||||
AC_CHECK_LIB(kvm, kvm_open)
 | 
			
		||||
 | 
			
		||||
dnl Solaris
 | 
			
		||||
AC_CHECK_LIB(kstat, kstat_open)
 | 
			
		||||
AC_CHECK_FUNCS(getloadavg swapctl)
 | 
			
		||||
AC_CHECK_HEADERS(procfs.h sys/procfs.h, break)
 | 
			
		||||
 | 
			
		||||
dnl For DEC OSF1
 | 
			
		||||
AC_CHECK_LIB(mach, vm_statistics)
 | 
			
		||||
 | 
			
		||||
@@ -234,7 +231,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="da de es es_DO es_GT es_HN es_MX es_PA es_PE es_SV fi fr ja ko nl no pl sv"
 | 
			
		||||
ALL_LINGUAS="de es es_DO es_GT es_HN es_MX es_PA es_PE es_SV fi fr ko no ja"
 | 
			
		||||
AM_GNOME_GETTEXT
 | 
			
		||||
 | 
			
		||||
AC_PATH_XTRA
 | 
			
		||||
@@ -295,7 +292,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"
 | 
			
		||||
@@ -395,6 +392,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 u_int64_t unsigned long long int
 | 
			
		||||
#endif
 | 
			
		||||
_______EOF
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if test x$glibtop_int64_t != xyes ; then
 | 
			
		||||
	  did_typedefs=yes
 | 
			
		||||
	  cat >> $outfile <<\_______EOF
 | 
			
		||||
 | 
			
		||||
#ifndef int64_t
 | 
			
		||||
typedef int64_t signed long long int
 | 
			
		||||
#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
 | 
			
		||||
@@ -415,6 +545,7 @@ sysdeps/osf1/Makefile
 | 
			
		||||
sysdeps/linux/Makefile
 | 
			
		||||
sysdeps/kernel/Makefile
 | 
			
		||||
sysdeps/freebsd/Makefile
 | 
			
		||||
sysdeps/solaris/Makefile
 | 
			
		||||
src/Makefile
 | 
			
		||||
src/daemon/Makefile
 | 
			
		||||
src/inodedb/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
 | 
			
		||||
							
								
								
									
										33
									
								
								doc/ChangeLog
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								doc/ChangeLog
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										43
									
								
								doc/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								doc/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
info_TEXINFOS		= libgtop.texi
 | 
			
		||||
 | 
			
		||||
libgtop_TEXINFOS	= libgtop.texi about.texi reference.texi \
 | 
			
		||||
			  auto-macros.texi version.texi main.texi \
 | 
			
		||||
			  white-paper.texi internals.texi
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										9
									
								
								doc/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								doc/README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
This directory is shared between the HEAD and the LIBGTOP_STABLE_1_0
 | 
			
		||||
branch (`LIBGTOP_STABLE_1_0' is just an ordinary tag and no branch tag
 | 
			
		||||
here).
 | 
			
		||||
 | 
			
		||||
Whenever we make a new release of LibGTop 1.0.x, we'll move that tag to
 | 
			
		||||
point to a "stable" version of the documentation.
 | 
			
		||||
 | 
			
		||||
May 16, 1999
 | 
			
		||||
Martin Baulig
 | 
			
		||||
							
								
								
									
										114
									
								
								doc/about.texi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								doc/about.texi
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
			
		||||
@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.
 | 
			
		||||
 | 
			
		||||
@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.
 | 
			
		||||
 | 
			
		||||
@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
 | 
			
		||||
 | 
			
		||||
There will be a Solaris port of LibGTop very soon. Especially Drazen Kacar and
 | 
			
		||||
some other people have been doing excellent work here and I'm sure that this
 | 
			
		||||
port will be ready soon.
 | 
			
		||||
 | 
			
		||||
@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.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										80
									
								
								doc/libgtop.texi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								doc/libgtop.texi
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
\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.
 | 
			
		||||
 | 
			
		||||
@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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										103
									
								
								doc/main.texi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								doc/main.texi
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
			
		||||
@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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1791
									
								
								doc/reference.texi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1791
									
								
								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.
 | 
			
		||||
@@ -3,6 +3,12 @@
 | 
			
		||||
	* 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
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
	unsigned method, count, port, i;
 | 
			
		||||
	struct in_addr addr, subnet;
 | 
			
		||||
	char *address_string, *subnet_string;
 | 
			
		||||
	char buffer [BUFSIZ];
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,8 @@
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
#include <glibtop/sysdeps.h>
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
output (pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,8 @@
 | 
			
		||||
#include <glibtop/cpu.h>
 | 
			
		||||
#include <glibtop/xmalloc.h>
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
@@ -65,7 +67,7 @@ main (int argc, char *argv [])
 | 
			
		||||
	memset (separator, '-', 91);
 | 
			
		||||
	separator [92] = '\0';
 | 
			
		||||
 | 
			
		||||
	sprintf (buffer, _("Ticks (%ld per second):"), frequency);
 | 
			
		||||
	sprintf (buffer, _("Ticks (%d 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;
 | 
			
		||||
	unsigned method, count, port, i;
 | 
			
		||||
	char buffer [BUFSIZ];
 | 
			
		||||
 | 
			
		||||
	count = PROFILE_COUNT;
 | 
			
		||||
 
 | 
			
		||||
@@ -70,11 +70,14 @@ int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
	glibtop_union data;
 | 
			
		||||
	unsigned c, count, *ptr;
 | 
			
		||||
	glibtop_sysdeps sysdeps;
 | 
			
		||||
	unsigned c, count, port, i, *ptr;
 | 
			
		||||
	struct rusage total_start, total_end;
 | 
			
		||||
	struct rusage rusage_start, rusage_end;
 | 
			
		||||
	struct timeval elapsed_utime, elapsed_stime;
 | 
			
		||||
	pid_t pid;
 | 
			
		||||
	char buffer [BUFSIZ];
 | 
			
		||||
	pid_t pid, ppid;
 | 
			
		||||
	char *args;
 | 
			
		||||
 | 
			
		||||
	count = PROFILE_COUNT;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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,59 +30,50 @@
 | 
			
		||||
 | 
			
		||||
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 G_GNUC_UNUSED
 | 
			
		||||
static void
 | 
			
		||||
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 G_GNUC_UNUSED
 | 
			
		||||
static void
 | 
			
		||||
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 G_GNUC_UNUSED
 | 
			
		||||
static void
 | 
			
		||||
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 G_GNUC_UNUSED
 | 
			
		||||
static void
 | 
			
		||||
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__
 | 
			
		||||
@@ -96,37 +89,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)
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,12 @@ 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.
 | 
			
		||||
							
								
								
									
										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,13 +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
 | 
			
		||||
O_OBJS   := main.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,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
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
#define _TABLE_VERSION	1
 | 
			
		||||
@@ -243,6 +243,8 @@ glibtop_init_s (glibtop **server_ptr, unsigned long features, unsigned flags)
 | 
			
		||||
 | 
			
		||||
		for (init_fkt = _glibtop_init_hook_s; *init_fkt; init_fkt++)
 | 
			
		||||
			(*init_fkt) (server);
 | 
			
		||||
 | 
			
		||||
		server->sysdeps.pointer_size = sizeof (void*)*8;
 | 
			
		||||
		
 | 
			
		||||
		server->flags |= _GLIBTOP_INIT_STATE_SYSDEPS;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
usage="\
 | 
			
		||||
    Usage: libgtop-config [--version] [--config] [--features-def-file]"
 | 
			
		||||
Usage: libgtop-config [--version] [--config] [--features-def-file] [--cflags] [--libs] [--extra-libs]"
 | 
			
		||||
 | 
			
		||||
config_file="@LIBGTOP_LIBDIR@/libgtopConf.sh"
 | 
			
		||||
. $config_file
 | 
			
		||||
@@ -29,6 +29,15 @@ while test $# -gt 0; do
 | 
			
		||||
    --features-def-file)
 | 
			
		||||
      echo $features_def_file
 | 
			
		||||
      ;;
 | 
			
		||||
    --cflags)
 | 
			
		||||
      echo $LIBGTOP_INCS
 | 
			
		||||
      ;;
 | 
			
		||||
    --libs)
 | 
			
		||||
      echo $LIBGTOP_LIBS
 | 
			
		||||
      ;;
 | 
			
		||||
    --extra-libs)
 | 
			
		||||
      echo $LIBGTOP_EXTRA_LIBS
 | 
			
		||||
      ;;
 | 
			
		||||
    *)
 | 
			
		||||
      echo "${usage}" 1>&2
 | 
			
		||||
      exit 1
 | 
			
		||||
 
 | 
			
		||||
@@ -15,45 +15,44 @@ AC_DEFUN([LIBGTOP_HACKER_TESTS],[
 | 
			
		||||
 | 
			
		||||
	case "$host_os" in
 | 
			
		||||
	linux*)
 | 
			
		||||
	  AC_ARG_WITH(linux-table,
 | 
			
		||||
	  [  --with-linux-table      Use the table () function from Martin Baulig],[
 | 
			
		||||
	  linux_table="$withval"],[linux_table=auto])
 | 
			
		||||
	  if test $linux_table = yes ; then
 | 
			
		||||
	    AC_CHECK_HEADER(linux/table.h, linux_table=yes, linux_table=no)
 | 
			
		||||
	  elif test $linux_table = auto ; then
 | 
			
		||||
	    AC_MSG_CHECKING(for table function in Linux Kernel)
 | 
			
		||||
	  AC_ARG_WITH(linux-sysctl,
 | 
			
		||||
	  [  --with-linux-sysctl     Use the sysctl () interface from Martin Baulig],[
 | 
			
		||||
	  linux_sysctl="$withval"],[linux_sysctl=auto])
 | 
			
		||||
	  if test $linux_sysctl = yes ; then
 | 
			
		||||
	    AC_CHECK_HEADER(linux/libgtop.h, linux_sysctl=yes, linux_sysctl=no)
 | 
			
		||||
	  elif test $linux_sysctl = auto ; then
 | 
			
		||||
	    AC_MSG_CHECKING(for LibGTop sysctl support in Linux Kernel)
 | 
			
		||||
	    AC_TRY_RUN([
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <linux/unistd.h>
 | 
			
		||||
#include <linux/table.h>
 | 
			
		||||
#include <sys/sysctl.h>
 | 
			
		||||
#include <linux/libgtop.h>
 | 
			
		||||
 | 
			
		||||
#include <syscall.h>
 | 
			
		||||
#define SIZE(x) sizeof(x)/sizeof(x[0])
 | 
			
		||||
 | 
			
		||||
static inline _syscall3 (int, table, int, type, union table *, tbl, const void *, param);
 | 
			
		||||
int name[2] = { CTL_LIBGTOP, LIBGTOP_VERSION };
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (void)
 | 
			
		||||
{
 | 
			
		||||
	union table tbl;
 | 
			
		||||
	int ret;
 | 
			
		||||
    unsigned version;
 | 
			
		||||
    size_t size = sizeof (version);
 | 
			
		||||
 | 
			
		||||
	ret = table (TABLE_VERSION, NULL, NULL);
 | 
			
		||||
 | 
			
		||||
	if (ret == -1)
 | 
			
		||||
		exit (-errno);
 | 
			
		||||
 | 
			
		||||
	exit (ret < 1 ? ret : 0);
 | 
			
		||||
    if (sysctl (name, SIZE (name), &version, &size, NULL, 0))
 | 
			
		||||
	exit (1);
 | 
			
		||||
    else if (version < 1)
 | 
			
		||||
	exit (2);
 | 
			
		||||
    else
 | 
			
		||||
	exit (0);
 | 
			
		||||
}
 | 
			
		||||
], linux_table=yes, linux_table=no, linux_table=no)
 | 
			
		||||
	    AC_MSG_RESULT($linux_table)
 | 
			
		||||
], linux_sysctl=yes, linux_sysctl=no, linux_sysctl=no)
 | 
			
		||||
	    AC_MSG_RESULT($linux_sysctl)
 | 
			
		||||
	  fi
 | 
			
		||||
	  if test $linux_table = yes ; then
 | 
			
		||||
	    AC_DEFINE(HAVE_LINUX_TABLE)
 | 
			
		||||
	  if test $linux_sysctl = yes ; then
 | 
			
		||||
	    AC_DEFINE(HAVE_LINUX_SYSCTL)
 | 
			
		||||
	  fi
 | 
			
		||||
	  AM_CONDITIONAL(LINUX_TABLE, test $linux_table = yes)
 | 
			
		||||
	  AM_CONDITIONAL(LINUX_SYSCTL, test $linux_sysctl = yes)
 | 
			
		||||
	  ;;
 | 
			
		||||
	esac
 | 
			
		||||
])
 | 
			
		||||
@@ -73,7 +72,7 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[
 | 
			
		||||
 | 
			
		||||
	AC_ARG_ENABLE(hacker-mode,
 | 
			
		||||
	[  --enable-hacker-mode    Enable building of unstable sysdeps],
 | 
			
		||||
	[hacker_mode="$withval"], [hacker_mode=no])
 | 
			
		||||
	[hacker_mode="$enableval"], [hacker_mode=no])
 | 
			
		||||
 | 
			
		||||
	AM_CONDITIONAL(HACKER_MODE, test x"$hacker_mode" = xyes)
 | 
			
		||||
 | 
			
		||||
@@ -108,32 +107,46 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[
 | 
			
		||||
 | 
			
		||||
	case "$host_os" in
 | 
			
		||||
	linux*)
 | 
			
		||||
	  if test x$linux_table = xyes ; then
 | 
			
		||||
	  if test x$linux_sysctl = xyes ; then
 | 
			
		||||
	    libgtop_sysdeps_dir=kernel
 | 
			
		||||
	    libgtop_use_machine_h=no
 | 
			
		||||
	  else
 | 
			
		||||
	    libgtop_sysdeps_dir=linux
 | 
			
		||||
	    libgtop_use_machine_h=no
 | 
			
		||||
	    libgtop_have_sysinfo=yes
 | 
			
		||||
	  fi
 | 
			
		||||
	  libgtop_have_sysinfo=yes
 | 
			
		||||
	  libgtop_need_server=no
 | 
			
		||||
	  ;;
 | 
			
		||||
	freebsd*|netbsd*|openbsd*|bsdi*)
 | 
			
		||||
	freebsd*|netbsd*|openbsd*)
 | 
			
		||||
	  libgtop_sysdeps_dir=freebsd
 | 
			
		||||
	  libgtop_use_machine_h=yes
 | 
			
		||||
	  libgtop_need_server=yes
 | 
			
		||||
	  libgtop_postinstall='chgrp kmem $(bindir)/libgtop_server && chmod 2755 $(bindir)/libgtop_server'
 | 
			
		||||
	  ;;
 | 
			
		||||
        bsdi*)
 | 
			
		||||
	  libgtop_sysdeps_dir=freebsd
 | 
			
		||||
	  libgtop_use_machine_h=yes
 | 
			
		||||
	  libgtop_need_server=yes
 | 
			
		||||
	  libgtop_postinstall='chgrp kmem $(bindir)/libgtop_server && chmod 2755 $(bindir)/libgtop_server'
 | 
			
		||||
	  ;;
 | 
			
		||||
	solaris*)
 | 
			
		||||
	  libgtop_sysdeps_dir=solaris
 | 
			
		||||
	  libgtop_use_machine_h=yes
 | 
			
		||||
	  libgtop_need_server=yes
 | 
			
		||||
	  libgtop_postinstall='chgrp sys $(bindir)/libgtop_server && chmod 2755 $(bindir)/libgtop_server'
 | 
			
		||||
	  ;;
 | 
			
		||||
	osf*)
 | 
			
		||||
	  libgtop_sysdeps_dir=osf1
 | 
			
		||||
	  libgtop_use_machine_h=yes
 | 
			
		||||
	  libgtop_need_server=yes
 | 
			
		||||
	  ;;
 | 
			
		||||
	*)
 | 
			
		||||
	  if test x$hacker_mode = xyes ; then
 | 
			
		||||
	    case "$host_os" in
 | 
			
		||||
	    sunos4*)
 | 
			
		||||
	      #Please note that this port is obsolete and not working at
 | 
			
		||||
	      #all. It is only useful for people who want to fix it ... :-)
 | 
			
		||||
	      libgtop_sysdeps_dir=sun4
 | 
			
		||||
	        libgtop_use_machine_h=yes
 | 
			
		||||
	      libgtop_need_server=yes
 | 
			
		||||
	      ;;
 | 
			
		||||
	    osf*)
 | 
			
		||||
	      libgtop_sysdeps_dir=osf1
 | 
			
		||||
	      libgtop_use_machine_h=yes
 | 
			
		||||
	      libgtop_need_server=yes
 | 
			
		||||
	      ;;
 | 
			
		||||
@@ -177,7 +190,7 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[
 | 
			
		||||
#include <net/netisr.h>
 | 
			
		||||
#include <net/route.h>
 | 
			
		||||
 | 
			
		||||
#if (defined __FreeBSD__) || (defined __NetBSD__)
 | 
			
		||||
#if defined(__FreeBSD__) || defined(__NetBSD__)
 | 
			
		||||
#include <net/if_sppp.h>
 | 
			
		||||
#else
 | 
			
		||||
#include <i4b/sppp/if_sppp.h>
 | 
			
		||||
@@ -249,6 +262,18 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[
 | 
			
		||||
	  AC_DEFINE_UNQUOTED(GLIBTOP_LINUX_VERSION_CODE, $os_version_code)
 | 
			
		||||
	  AC_MSG_RESULT($os_version_code)
 | 
			
		||||
	  ;;
 | 
			
		||||
	solaris*)
 | 
			
		||||
	  os_major_version=`uname -r | sed 's/\([[0-9]]*\).\([[0-9]]\)\.*\([[0-9]]*\)/\1/'`
 | 
			
		||||
	  os_minor_version=`uname -r | sed 's/\([[0-9]]*\).\([[0-9]]\)\.*\([[0-9]]*\)/\2/'`
 | 
			
		||||
	  os_micro_version=`uname -r | sed 's/\([[0-9]]*\).\([[0-9]]\)\.*\([[0-9]]*\)/\3/'`
 | 
			
		||||
	  test -z "$os_micro_version" && os_micro_version=0
 | 
			
		||||
	  os_version_expr="$os_major_version 100 * $os_minor_version 10 * + $os_micro_version + p q"
 | 
			
		||||
	  os_version_code=`echo "$os_version_expr" | dc`
 | 
			
		||||
 | 
			
		||||
	  AC_MSG_CHECKING(for Solaris release code)
 | 
			
		||||
	  AC_DEFINE_UNQUOTED(GLIBTOP_SOLARIS_RELEASE, $os_version_code)
 | 
			
		||||
	  AC_MSG_RESULT($os_version_code)
 | 
			
		||||
	  ;;
 | 
			
		||||
	esac
 | 
			
		||||
 | 
			
		||||
	AC_MSG_CHECKING(for machine.h in libgtop sysdeps dir)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
# Note that this is NOT a relocatable package
 | 
			
		||||
%define ver      @VERSION@
 | 
			
		||||
%define  RELEASE SNAP
 | 
			
		||||
%define  rel     %{?CUSTOM_RELEASE} %{!?CUSTOM_RELEASE:%RELEASE}
 | 
			
		||||
%define rel      SNAP
 | 
			
		||||
%define prefix   /usr
 | 
			
		||||
 | 
			
		||||
Summary: LibGTop library
 | 
			
		||||
@@ -119,9 +118,8 @@ rm -rf $RPM_BUILD_ROOT
 | 
			
		||||
%{prefix}/lib/*.sh
 | 
			
		||||
%{prefix}/lib/*.def
 | 
			
		||||
%{prefix}/include/*
 | 
			
		||||
%{prefix}/lib/libgtop
 | 
			
		||||
 | 
			
		||||
%files examples
 | 
			
		||||
%defattr(-,root,root)
 | 
			
		||||
 | 
			
		||||
%{prefix}/libexec/libgtop
 | 
			
		||||
%{prefix}/libexec/libgtop/*
 | 
			
		||||
 
 | 
			
		||||
@@ -31,8 +31,6 @@ LIBGTOP_MICRO_VERSION="@LIBGTOP_MICRO_VERSION@"
 | 
			
		||||
LIBGTOP_VERSION="@LIBGTOP_VERSION@"
 | 
			
		||||
LIBGTOP_VERSION_CODE="@LIBGTOP_VERSION_CODE@"
 | 
			
		||||
 | 
			
		||||
MODULE_VERSION="libgtop-@LIBGTOP_VERSION@"
 | 
			
		||||
 | 
			
		||||
LIBGTOP_SERVER_VERSION="@LIBGTOP_SERVER_VERSION@"
 | 
			
		||||
 | 
			
		||||
libgtop_sysdeps_dir="@libgtop_sysdeps_dir@"
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,6 @@ Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
POTFILES
 | 
			
		||||
cat-id-tbl.c
 | 
			
		||||
*.gmo
 | 
			
		||||
*.gmo *.mo
 | 
			
		||||
libgtop.pot
 | 
			
		||||
Makefile.in.in
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								po/ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								po/ChangeLog
									
									
									
									
									
								
							@@ -1,28 +1,19 @@
 | 
			
		||||
1999-09-22  Kjartan Maraas  <kmaraas@online.no>
 | 
			
		||||
1999-05-07  Yukihiro Nakai <Nakai@astec.co.jp>
 | 
			
		||||
 | 
			
		||||
	* da.po: Added Danish translation from Kenneth
 | 
			
		||||
	Christiansen <kenneth@ripen.dk>.
 | 
			
		||||
	* ja.po: Updated translation
 | 
			
		||||
 | 
			
		||||
1999-09-20  Vincent Renardias <vincent@ldsol.com>
 | 
			
		||||
1999-04-18  Tuomas J. Lukka <lukka@iki.fi
 | 
			
		||||
 | 
			
		||||
	* fr.po: 100% complete. removed ~40 old translations.
 | 
			
		||||
	* Small addition to fi.po
 | 
			
		||||
 | 
			
		||||
1999-09-17  Zbigniew Chyla  <chyla@alice.ci.pwr.wroc.pl>
 | 
			
		||||
1999-04-18  Tuomas J. Lukka <lukka@iki.fi
 | 
			
		||||
 | 
			
		||||
	* pl.po: Added translation.
 | 
			
		||||
	* Add fi.po
 | 
			
		||||
 | 
			
		||||
1999-09-16  Tomas Ogren  <stric@ing.umu.se>
 | 
			
		||||
 | 
			
		||||
	* sv.po: Synced
 | 
			
		||||
 | 
			
		||||
1999-07-11  Kjartan Maraas  <kmaraas@online.no>
 | 
			
		||||
1999-04-13  Kjartan Maraas  <kmaraas@online.no>
 | 
			
		||||
 | 
			
		||||
	* no.po: Updated translation.
 | 
			
		||||
	
 | 
			
		||||
1999-07-11  Tomas Ogren  <stric@ing.umu.se>
 | 
			
		||||
 | 
			
		||||
	* sv.po: New file
 | 
			
		||||
 | 
			
		||||
1999-01-27  Kjartan Maraas  <kmaraas@fib.hl.no>
 | 
			
		||||
 | 
			
		||||
	* no.po: Updated translation
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										705
									
								
								po/es_DO.po
									
									
									
									
									
								
							
							
						
						
									
										705
									
								
								po/es_DO.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										705
									
								
								po/es_GT.po
									
									
									
									
									
								
							
							
						
						
									
										705
									
								
								po/es_GT.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										705
									
								
								po/es_HN.po
									
									
									
									
									
								
							
							
						
						
									
										705
									
								
								po/es_HN.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										705
									
								
								po/es_MX.po
									
									
									
									
									
								
							
							
						
						
									
										705
									
								
								po/es_MX.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user