Browse Source

save AT_HWCAP from auxv for subsequent use in machine-specific code

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.
Rich Felker 12 years ago
parent
commit
e1b9c1b01b
3 changed files with 4 additions and 0 deletions
  1. 1 0
      src/env/__init_security.c
  2. 2 0
      src/internal/libc.c
  3. 1 0
      src/internal/libc.h

+ 1 - 0
src/env/__init_security.c

@@ -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;
 

+ 2 - 0
src/internal/libc.c

@@ -13,3 +13,5 @@ struct __libc __libc;
 #ifdef BROKEN_VISIBILITY
 __asm__(".hidden __libc");
 #endif
+
+size_t __hwcap;

+ 1 - 0
src/internal/libc.h

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