diff --git a/procps-3.2.8-fix-unknown-HZ.dif b/procps-3.2.8-fix-unknown-HZ.dif index d890afa..b201411 100644 --- a/procps-3.2.8-fix-unknown-HZ.dif +++ b/procps-3.2.8-fix-unknown-HZ.dif @@ -1,33 +1,48 @@ -Index: b/proc/version.c -=================================================================== +--- a/proc/sig.c ++++ b/proc/sig.c 2010-10-29 09:15:13.872426803 +0000 +@@ -231,7 +231,7 @@ void unix_print_signals(void){ + } + + /* sanity check */ +-static int init_signal_list(void) __attribute__((constructor)); ++static int init_signal_list(void) __attribute__((constructor (2))); + static int init_signal_list(void){ + if(number_of_signals != 31){ + fprintf(stderr, "WARNING: %d signals -- adjust and recompile.\n", number_of_signals); +--- a/proc/sysinfo.c ++++ b/proc/sysinfo.c 2010-10-29 09:12:17.768426168 +0000 +@@ -158,6 +158,14 @@ static void old_Hertz_hack(void){ + unsigned long long jiffies; + unsigned h; + char *restrict savelocale; ++ long hz; ++ ++#ifdef _SC_CLK_TCK ++ if((hz = sysconf(_SC_CLK_TCK)) > 0){ ++ Hertz = hz; ++ return; ++ } ++#endif + + savelocale = setlocale(LC_NUMERIC, NULL); + setlocale(LC_NUMERIC, "C"); +@@ -258,7 +266,7 @@ long smp_num_cpus(void) + return(_smp_num_cpus); + } + +-static void init_libproc(void) __attribute__((constructor)); ++static void init_libproc(void) __attribute__((constructor (1))); + static void init_libproc(void){ + have_privs = check_for_privs(); + --- a/proc/version.c -+++ b/proc/version.c -@@ -33,11 +33,13 @@ void display_version(void) { ++++ b/proc/version.c 2010-10-29 09:11:53.192426444 +0000 +@@ -33,7 +33,7 @@ void display_version(void) { int linux_version_code; -static void init_Linux_version(void) __attribute__((constructor)); --static void init_Linux_version(void) { -+void init_Linux_version(void) __attribute__((constructor)); -+void init_Linux_version(void) { ++static void init_Linux_version(void) __attribute__((constructor (0))); + static void init_Linux_version(void) { static struct utsname uts; int x = 0, y = 0, z = 0; /* cleared in case sscanf() < 3 */ - -+ if (init_Linux_version) -+ return; - if (uname(&uts) == -1) /* failure implies impending death */ - exit(1); - if (sscanf(uts.release, "%d.%d.%d", &x, &y, &z) < 3) -Index: b/proc/sysinfo.c -=================================================================== ---- a/proc/sysinfo.c -+++ b/proc/sysinfo.c -@@ -260,6 +260,8 @@ long smp_num_cpus(void) - - static void init_libproc(void) __attribute__((constructor)); - static void init_libproc(void){ -+ if(!linux_version_code) -+ init_Linux_version(); - have_privs = check_for_privs(); - - if(linux_version_code > LINUX_VERSION(2, 4, 0)){ diff --git a/procps.changes b/procps.changes index 6881124..34a6f56 100644 --- a/procps.changes +++ b/procps.changes @@ -1,7 +1,8 @@ ------------------------------------------------------------------- Fri Oct 29 10:14:51 CEST 2010 - werner@suse.de -- Avoid running HZ initialization twice +- Avoid running HZ initialization twice by using priority for + the constructors for excuting before main() - Add test on "Unknown HZ value!" -------------------------------------------------------------------