summaryrefslogtreecommitdiff
path: root/recipes/glibc/glibc-2.3.2/ldso-disable-hwcap.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/glibc/glibc-2.3.2/ldso-disable-hwcap.patch')
-rw-r--r--recipes/glibc/glibc-2.3.2/ldso-disable-hwcap.patch62
1 files changed, 62 insertions, 0 deletions
diff --git a/recipes/glibc/glibc-2.3.2/ldso-disable-hwcap.patch b/recipes/glibc/glibc-2.3.2/ldso-disable-hwcap.patch
new file mode 100644
index 0000000000..5538d20672
--- /dev/null
+++ b/recipes/glibc/glibc-2.3.2/ldso-disable-hwcap.patch
@@ -0,0 +1,62 @@
+--- glibc-2.3.2/sysdeps/generic/dl-sysdep.c.orig 2003-10-28 12:22:33.000000000 -0500
++++ glibc-2.3.2/sysdeps/generic/dl-sysdep.c 2003-10-28 12:38:49.000000000 -0500
+@@ -354,7 +354,11 @@ _dl_important_hwcaps (const char *platfo
+ #ifdef USE_TLS
+ /* For TLS enabled builds always add 'tls'. */
+ ++cnt;
+-#else
++#endif
++
++ if (__access ("/etc/ld.so.nohwcap", F_OK) == 0)
++ cnt = 0;
++
+ if (cnt == 0)
+ {
+ /* If we have platform name and no important capability we only have
+@@ -369,7 +373,6 @@ _dl_important_hwcaps (const char *platfo
+ *sz = 1;
+ return result;
+ }
+-#endif
+
+ /* Create temporary data structure to generate result table. */
+ temp = (struct r_strlenpair *) alloca (cnt * sizeof (*temp));
+@@ -411,9 +414,7 @@ _dl_important_hwcaps (const char *platfo
+ result = (struct r_strlenpair *) malloc (*sz * sizeof (*result) + total);
+ if (result == NULL)
+ {
+-#ifndef USE_TLS
+ no_memory:
+-#endif
+ INTUSE(_dl_signal_error) (ENOMEM, NULL, NULL,
+ N_("cannot create capability list"));
+ }
+--- glibc-2.3.2/sysdeps/generic/dl-cache.c.orig 2003-10-28 12:32:36.000000000 -0500
++++ glibc-2.3.2/sysdeps/generic/dl-cache.c 2003-10-28 12:38:57.000000000 -0500
+@@ -246,6 +246,7 @@ _dl_load_cache_lookup (const char *name)
+ /* This file ends in static libraries where we don't have a hwcap. */
+ unsigned long int *hwcap;
+ uint64_t platform;
++ int disable_hwcap = 0;
+ #ifndef SHARED
+ weak_extern (_dl_hwcap);
+ #endif
+@@ -261,6 +262,9 @@ _dl_load_cache_lookup (const char *name)
+ if (platform != (uint64_t) -1)
+ platform = 1ULL << platform;
+
++ if (__access ("/etc/ld.so.nohwcap", F_OK) == 0)
++ disable_hwcap = 1;
++
+ #ifdef USE_TLS
+ # define TLS_BIT (1ULL << 63)
+ #else
+@@ -272,6 +276,8 @@ _dl_load_cache_lookup (const char *name)
+ if (GL(dl_osversion) \
+ && cache_new->libs[middle].osversion > GL(dl_osversion)) \
+ continue; \
++ if (disable_hwcap && lib->hwcap != 0) \
++ continue; \
+ if (_DL_PLATFORMS_COUNT && platform != -1 \
+ && (lib->hwcap & _DL_HWCAP_PLATFORM) != 0 \
+ && (lib->hwcap & _DL_HWCAP_PLATFORM) != platform) \