save AT_HWCAP from auxv for subsequent use in machine-specific code
authorRich Felker <dalias@aerifal.cx>
Fri, 27 Jul 2012 04:14:57 +0000 (00:14 -0400)
committerRich Felker <dalias@aerifal.cx>
Fri, 27 Jul 2012 04:14:57 +0000 (00:14 -0400)
it's expected that this will be needed/useful only in asm, so I've
given it its own symbol that can be addressed in pc-relative ways from
asm rather than adding a field in the __libc structure which would
require hard-coding the offset wherever it's used.

src/env/__init_security.c
src/internal/libc.c
src/internal/libc.h

index 59d546fa6838eee808c8cb3bac9993e3cc1b1647..f9de9c62e4620b069e8a9a2a4e68c2969c2e1bb6 100644 (file)
@@ -23,6 +23,7 @@ void __init_security(size_t *auxv)
 #endif
 
        for (; auxv[0]; auxv+=2) if (auxv[0]<AUX_CNT) aux[auxv[0]] = auxv[1];
+       __hwcap = aux[AT_HWCAP];
        if (aux[AT_UID]==aux[AT_EUID] && aux[AT_GID]==aux[AT_EGID]
                && !aux[AT_SECURE]) return;
 
index c1e21ca021a45ebe7f2736a4cba13d75e0c1613d..004c1a3359728c167784c9bc5b6ce992024eb141 100644 (file)
@@ -13,3 +13,5 @@ struct __libc __libc;
 #ifdef BROKEN_VISIBILITY
 __asm__(".hidden __libc");
 #endif
+
+size_t __hwcap;
index 53e4e8269a36d4e1596e192a63425ca5eb1c2c12..ea863d6730e11cd83ff9db32baea830dacc70be5 100644 (file)
@@ -18,6 +18,7 @@ struct __libc {
        int ofl_lock[2];
 };
 
+extern size_t __hwcap;
 
 #if !defined(__PIC__) || 100*__GNUC__+__GNUC_MINOR__ >= 303 || defined(__PCC__) || defined(__TINYC__)