Dr. Werner Fink 2010-10-29 09:28:56 +00:00 committed by Git OBS Bridge
parent 11a96dd9ac
commit 4f0b037586
2 changed files with 43 additions and 27 deletions

View File

@ -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)){

View File

@ -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!"
-------------------------------------------------------------------