Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F154722663
D12699.id34111.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
D12699.id34111.diff
View Options
Index: lib/libc/gen/Symbol.map
===================================================================
--- lib/libc/gen/Symbol.map
+++ lib/libc/gen/Symbol.map
@@ -398,6 +398,7 @@
devname;
devname_r;
dirname;
+ elf_aux_info;
fts_children;
fts_close;
fts_get_clientptr;
Index: lib/libc/gen/auxv.c
===================================================================
--- lib/libc/gen/auxv.c
+++ lib/libc/gen/auxv.c
@@ -33,6 +33,7 @@
#include <link.h>
#include <pthread.h>
#include <string.h>
+#include <sys/auxv.h>
#include "un-namespace.h"
#include "libc_private.h"
@@ -65,8 +66,10 @@
static pthread_once_t aux_once = PTHREAD_ONCE_INIT;
static int pagesize, osreldate, canary_len, ncpus, pagesizes_len;
+static int hwcap_present, hwcap2_present;
static char *canary, *pagesizes;
static void *timekeep;
+static u_long hwcap, hwcap2;
static void
init_aux(void)
@@ -83,6 +86,16 @@
canary_len = aux->a_un.a_val;
break;
+ case AT_HWCAP:
+ hwcap_present = 1;
+ hwcap = (u_long)(aux->a_un.a_val);
+ break;
+
+ case AT_HWCAP2:
+ hwcap2_present = 1;
+ hwcap2 = (u_long)(aux->a_un.a_val);
+ break;
+
case AT_PAGESIZES:
pagesizes = (char *)(aux->a_un.a_ptr);
break;
@@ -110,6 +123,8 @@
}
}
+__weak_reference(_elf_aux_info, elf_aux_info);
+
int
_elf_aux_info(int aux, void *buf, int buflen)
{
@@ -130,6 +145,20 @@
} else
res = ENOENT;
break;
+ case AT_HWCAP:
+ if (hwcap_present && buflen == sizeof(u_long)) {
+ *(u_long *)buf = hwcap;
+ res = 0;
+ } else
+ res = ENOENT;
+ break;
+ case AT_HWCAP2:
+ if (hwcap2_present && buflen == sizeof(u_long)) {
+ *(u_long *)buf = hwcap2;
+ res = 0;
+ } else
+ res = ENOENT;
+ break;
case AT_PAGESIZES:
if (pagesizes != NULL && pagesizes_len >= buflen) {
memcpy(buf, pagesizes, buflen);
@@ -137,7 +166,6 @@
} else
res = ENOENT;
break;
-
case AT_PAGESZ:
if (buflen == sizeof(int)) {
if (pagesize != 0) {
Index: sys/arm/include/elf.h
===================================================================
--- sys/arm/include/elf.h
+++ sys/arm/include/elf.h
@@ -86,8 +86,9 @@
#define AT_STACKPROT 23 /* Initial stack protection. */
#define AT_EHDRFLAGS 24 /* e_flags field from elf hdr */
#define AT_HWCAP 25 /* CPU feature flags. */
+#define AT_HWCAP2 26 /* CPU feature flags 2. */
-#define AT_COUNT 26 /* Count of defined aux entry types. */
+#define AT_COUNT 27 /* Count of defined aux entry types. */
#define R_ARM_COUNT 33 /* Count of defined relocation types. */
Index: sys/arm64/include/elf.h
===================================================================
--- sys/arm64/include/elf.h
+++ sys/arm64/include/elf.h
@@ -92,8 +92,9 @@
#define AT_STACKPROT 23 /* Initial stack protection. */
#define AT_EHDRFLAGS 24 /* e_flags field from elf hdr */
#define AT_HWCAP 25 /* CPU feature flags. */
+#define AT_HWCAP2 26 /* CPU feature flags 2. */
-#define AT_COUNT 26 /* Count of defined aux entry types. */
+#define AT_COUNT 27 /* Count of defined aux entry types. */
/* Define "machine" characteristics */
#define ELF_TARG_CLASS ELFCLASS64
Index: sys/kern/imgact_elf.c
===================================================================
--- sys/kern/imgact_elf.c
+++ sys/kern/imgact_elf.c
@@ -1133,6 +1133,8 @@
imgp->sysent->sv_stackprot);
if (imgp->sysent->sv_hwcap != NULL)
AUXARGS_ENTRY(pos, AT_HWCAP, *imgp->sysent->sv_hwcap);
+ if (imgp->sysent->sv_hwcap2 != NULL)
+ AUXARGS_ENTRY(pos, AT_HWCAP2, *imgp->sysent->sv_hwcap2);
AUXARGS_ENTRY(pos, AT_NULL, 0);
free(imgp->auxargs, M_TEMP);
Index: sys/mips/include/elf.h
===================================================================
--- sys/mips/include/elf.h
+++ sys/mips/include/elf.h
@@ -146,8 +146,9 @@
#define AT_STACKPROT 23 /* Initial stack protection. */
#define AT_EHDRFLAGS 24 /* e_flags field from elf hdr */
#define AT_HWCAP 25 /* CPU feature flags. */
+#define AT_HWCAP2 26 /* CPU feature flags 2. */
-#define AT_COUNT 26 /* Count of defined aux entry types. */
+#define AT_COUNT 27 /* Count of defined aux entry types. */
#define ET_DYN_LOAD_ADDR 0x0120000
Index: sys/powerpc/include/elf.h
===================================================================
--- sys/powerpc/include/elf.h
+++ sys/powerpc/include/elf.h
@@ -109,8 +109,9 @@
#define AT_TIMEKEEP 22 /* Pointer to timehands. */
#define AT_EHDRFLAGS 24 /* e_flags field from elf hdr */
#define AT_HWCAP 25 /* CPU feature flags. */
+#define AT_HWCAP2 26 /* CPU feature flags 2. */
-#define AT_COUNT 26 /* Count of defined aux entry types. */
+#define AT_COUNT 27 /* Count of defined aux entry types. */
/*
* Relocation types.
Index: sys/riscv/include/elf.h
===================================================================
--- sys/riscv/include/elf.h
+++ sys/riscv/include/elf.h
@@ -92,8 +92,9 @@
#define AT_STACKPROT 23 /* Initial stack protection. */
#define AT_EHDRFLAGS 24 /* e_flags field from elf hdr */
#define AT_HWCAP 25 /* CPU feature flags. */
+#define AT_HWCAP2 26 /* CPU feature flags 2. */
-#define AT_COUNT 26 /* Count of defined aux entry types. */
+#define AT_COUNT 27 /* Count of defined aux entry types. */
/* Define "machine" characteristics */
#define ELF_TARG_CLASS ELFCLASS64
Index: sys/sparc64/include/elf.h
===================================================================
--- sys/sparc64/include/elf.h
+++ sys/sparc64/include/elf.h
@@ -94,8 +94,9 @@
#define AT_STACKPROT 23 /* Initial stack protection. */
#define AT_EHDRFLAGS 24 /* e_flags field from elf hdr */
#define AT_HWCAP 25 /* CPU feature flags. */
+#define AT_HWCAP2 26 /* CPU feature flags 2. */
-#define AT_COUNT 26 /* Count of defined aux entry types. */
+#define AT_COUNT 27 /* Count of defined aux entry types. */
/* Define "machine" characteristics */
#if __ELF_WORD_SIZE == 32
Index: sys/sys/auxv.h
===================================================================
--- /dev/null
+++ sys/sys/auxv.h
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2017 Michal Meloun
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _SYS_AUXV_H_
+#define _SYS_AUXV_H_
+
+#include <sys/types.h>
+#include <machine/elf.h>
+
+unsigned long getauxval(unsigned long type);
+
+#endif /* !_SYS_AUXV_H_ */
Index: sys/sys/sysent.h
===================================================================
--- sys/sys/sysent.h
+++ sys/sys/sysent.h
@@ -130,6 +130,7 @@
void (*sv_thread_detach)(struct thread *);
int (*sv_trap)(struct thread *);
u_long *sv_hwcap; /* Value passed in AT_HWCAP. */
+ u_long *sv_hwcap2; /* Value passed in AT_HWCAP2. */
};
#define SV_ILP32 0x000100 /* 32-bit executable. */
Index: sys/x86/include/elf.h
===================================================================
--- sys/x86/include/elf.h
+++ sys/x86/include/elf.h
@@ -102,8 +102,9 @@
#define AT_STACKPROT 23 /* Initial stack protection. */
#define AT_EHDRFLAGS 24 /* e_flags field from elf hdr */
#define AT_HWCAP 25 /* CPU feature flags. */
+#define AT_HWCAP2 26 /* CPU feature flags 2. */
-#define AT_COUNT 26 /* Count of defined aux entry types. */
+#define AT_COUNT 27 /* Count of defined aux entry types. */
/*
* Relocation types.
@@ -189,8 +190,9 @@
#define AT_STACKPROT 23 /* Initial stack protection. */
#define AT_EHDRFLAGS 24 /* e_flags field from elf hdr */
#define AT_HWCAP 25 /* CPU feature flags. */
+#define AT_HWCAP2 26 /* CPU feature flags 2. */
-#define AT_COUNT 26 /* Count of defined aux entry types. */
+#define AT_COUNT 27 /* Count of defined aux entry types. */
/*
* Relocation types.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Apr 30, 7:36 AM (1 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32471927
Default Alt Text
D12699.id34111.diff (8 KB)
Attached To
Mode
D12699: Add AT_HWCAP2 ELF auxiliary vector.
Attached
Detach File
Event Timeline
Log In to Comment