summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/exec
diff options
context:
space:
mode:
authorRobert Mustacchi <rm@joyent.com>2012-12-13 11:29:00 -0800
committerRobert Mustacchi <rm@joyent.com>2012-12-20 11:08:41 -0800
commitebb8ac078e9265f87093fbb363e8c2cbc6ee13e6 (patch)
tree75ef00d213e7cb6ada89fc357ad3f54eebd7be50 /usr/src/uts/common/exec
parenteb23829ff08a873c612ac45d191d559394b4b408 (diff)
downloadillumos-gate-ebb8ac078e9265f87093fbb363e8c2cbc6ee13e6.tar.gz
3414 Need a new word of AT_SUN_HWCAP bits
3415 Add isainfo support for f16c and rdrand 3416 Need disassembler support for rdrand and f16c Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com> Reviewed by: Richard Lowe <richlowe@richlowe.net> Reviewed by: Hans Rosenfeld <hans.rosenfeld@nexenta.com> Approved by: Garrett D'Amore <garrett@damore.org>
Diffstat (limited to 'usr/src/uts/common/exec')
-rw-r--r--usr/src/uts/common/exec/elf/elf.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/usr/src/uts/common/exec/elf/elf.c b/usr/src/uts/common/exec/elf/elf.c
index cc78a40bbc..ab46ff3924 100644
--- a/usr/src/uts/common/exec/elf/elf.c
+++ b/usr/src/uts/common/exec/elf/elf.c
@@ -25,6 +25,9 @@
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
+/*
+ * Copyright (c) 2012, Joyent, Inc. All rights reserved.
+ */
#include <sys/types.h>
#include <sys/param.h>
@@ -415,11 +418,12 @@ elfexec(vnode_t *vp, execa_t *uap, uarg_t *args, intpdata_t *idatap,
* AT_PAGESZ
* AT_SUN_LDSECURE
* AT_SUN_HWCAP
+ * AT_SUN_HWCAP2
* AT_SUN_PLATFORM
* AT_SUN_EXECNAME
* AT_NULL
*
- * total == 8
+ * total == 9
*/
if (hasdy && hasu) {
/*
@@ -434,7 +438,7 @@ elfexec(vnode_t *vp, execa_t *uap, uarg_t *args, intpdata_t *idatap,
*
* total = 5
*/
- args->auxsize = (8 + 5) * sizeof (aux_entry_t);
+ args->auxsize = (9 + 5) * sizeof (aux_entry_t);
} else if (hasdy) {
/*
* Has PT_INTERP but no PT_PHDR
@@ -444,9 +448,9 @@ elfexec(vnode_t *vp, execa_t *uap, uarg_t *args, intpdata_t *idatap,
*
* total = 2
*/
- args->auxsize = (8 + 2) * sizeof (aux_entry_t);
+ args->auxsize = (9 + 2) * sizeof (aux_entry_t);
} else {
- args->auxsize = 8 * sizeof (aux_entry_t);
+ args->auxsize = 9 * sizeof (aux_entry_t);
}
} else {
args->auxsize = 0;
@@ -759,12 +763,16 @@ elfexec(vnode_t *vp, execa_t *uap, uarg_t *args, intpdata_t *idatap,
* (Potentially different between 32-bit and 64-bit ABIs)
*/
#if defined(_LP64)
- if (args->to_model == DATAMODEL_NATIVE)
+ if (args->to_model == DATAMODEL_NATIVE) {
ADDAUX(aux, AT_SUN_HWCAP, auxv_hwcap)
- else
+ ADDAUX(aux, AT_SUN_HWCAP2, auxv_hwcap_2)
+ } else {
ADDAUX(aux, AT_SUN_HWCAP, auxv_hwcap32)
+ ADDAUX(aux, AT_SUN_HWCAP2, auxv_hwcap32_2)
+ }
#else
ADDAUX(aux, AT_SUN_HWCAP, auxv_hwcap)
+ ADDAUX(aux, AT_SUN_HWCAP2, auxv_hwcap_2)
#endif
if (branded) {
/*