diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/generic/dl-procinfo.h | 27 | ||||
-rw-r--r-- | sysdeps/generic/dl-sysdep.c | 16 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/dl-procinfo.h | 73 |
3 files changed, 109 insertions, 7 deletions
diff --git a/sysdeps/generic/dl-procinfo.h b/sysdeps/generic/dl-procinfo.h new file mode 100644 index 0000000..801d4b6 --- /dev/null +++ b/sysdeps/generic/dl-procinfo.h @@ -0,0 +1,27 @@ +/* Stub version of processor capability information handling macros. + Copyright (C) 1998 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _DL_PROCINFO_H +#define _DL_PROCINFO_H 1 + +/* We cannot provide a general printing function. */ +#define _dl_procinfo(word) -1 + +#endif /* dl-procinfo.h */ diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c index b2ae75c..b007aa6 100644 --- a/sysdeps/generic/dl-sysdep.c +++ b/sysdeps/generic/dl-sysdep.c @@ -1,5 +1,5 @@ /* Operating system support for run-time dynamic linker. Generic Unix version. - Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -28,6 +28,7 @@ #include <stdio-common/_itoa.h> #include <dl-machine.h> +#include <dl-procinfo.h> extern int _dl_argc; extern char **_dl_argv; @@ -201,7 +202,7 @@ _dl_show_auxv (void) "\n", NULL); break; case AT_BASE: - _dl_sysdep_message ("AT_BASE: 0x", + _dl_sysdep_message ("AT_BASE: 0x", _itoa_word (av->a_un.a_val, buf + sizeof buf - 1, 16, 0), "\n", NULL); @@ -231,13 +232,14 @@ _dl_show_auxv (void) "\n", NULL); break; case AT_PLATFORM: - _dl_sysdep_message ("AT_PLATFORM: ", av->a_un.a_ptr, NULL); + _dl_sysdep_message ("AT_PLATFORM: ", av->a_un.a_ptr, "\n", NULL); break; case AT_HWCAP: - _dl_sysdep_message ("AT_HWCAP: ", - _itoa_word (av->a_un.a_val, buf + sizeof buf - 1, - 16, 0), - "\n", NULL); + if (_dl_procinfo (av->a_un.a_val) < 0) + _dl_sysdep_message ("AT_HWCAP: ", + _itoa_word (av->a_un.a_val, buf + sizeof buf - 1, + 16, 0), + "\n", NULL); break; } } diff --git a/sysdeps/unix/sysv/linux/i386/dl-procinfo.h b/sysdeps/unix/sysv/linux/i386/dl-procinfo.h new file mode 100644 index 0000000..48d5cd3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/i386/dl-procinfo.h @@ -0,0 +1,73 @@ +/* Linux/i386 version of processor capability information handling macros. + Copyright (C) 1998 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _DL_PROCINFO_H +#define _DL_PROCINFO_H 1 + +static inline int +__attribute__ ((unused)) +_dl_procinfo (int word) +{ + /* This table should match the information from arch/i386/kernel/setup.c + in the kernel sources. */ + static const char *x86_cap_flags[] = + { + "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce", + "cx8", "apic", "10", "sep", "mtrr", "pge", "mca", "cmov", + "fcmov", "17", "18", "19", "20", "21", "22", "mmx", + "cxmmx", "25", "26", "27", "28", "29", "30", "amd3d" + }; + int i; + + _dl_sysdep_message ("AT_HWCAP: ", NULL); + + for (i = 0; i < 32; ++i) + if (word & (1 << i)) + _dl_sysdep_message (" ", x86_cap_flags[i], NULL); + + _dl_sysdep_message ("\n", NULL); + + return 0; +} + +enum +{ + HWCAP_I386_FPU = 1 << 0, + HWCAP_I386_VME = 1 << 1, + HWCAP_I386_DE = 1 << 2, + HWCAP_I386_PSE = 1 << 3, + HWCAP_I386_TSC = 1 << 4, + HWCAP_I386_MSR = 1 << 5, + HWCAP_I386_PAE = 1 << 6, + HWCAP_I386_MCE = 1 << 7, + HWCAP_I386_CX8 = 1 << 8, + HWCAP_I386_APIC = 1 << 9, + HWCAP_I386_SEP = 1 << 11, + HWCAP_I386_MTRR = 1 << 12, + HWCAP_I386_PGE = 1 << 13, + HWCAP_I386_MCA = 1 << 14, + HWCAP_I386_CMOV = 1 << 15, + HWCAP_I386_FCMOV = 1 << 16, + HWCAP_I386_MMX = 1 << 23, + HWCAP_I386_CXMMX = 1 << 24, + HWCAP_I386_AMD3D = 1 << 31 +}; + +#endif /* dl-procinfo.h */ |