DTrace: create an amd64 test suit
Create two tests checking if we can read urgs registers and if the rax register returns a correct number. Reviewed by: markj Discussed with: lwhsu MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D20364
This commit is contained in:
parent
8da024d941
commit
75ed05ef7d
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License (the "License").
|
||||
* You may not use this file except in compliance with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019 Mariusz Zaborski <oshogbo@FreeBSD.org>
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
__attribute__((optnone)) void
|
||||
frax(void)
|
||||
{
|
||||
asm volatile("mov $0x41414141, %%rax"
|
||||
: : : "rax"
|
||||
);
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
|
||||
while (1) {
|
||||
frax();
|
||||
}
|
||||
return (0);
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License (the "License").
|
||||
* You may not use this file except in compliance with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019 Mariusz Zaborski <oshogbo@FreeBSD.org>
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
#pragma D option quiet
|
||||
|
||||
pid$1::frax:return / uregs[R_RAX] == 0x41414141 / {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
pid$1::frax:return / uregs[R_RAX] != 0x41414141 / {
|
||||
printf("wrong rax value: %d\n", uregs[R_RAX]);
|
||||
exit(1);
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License (the "License").
|
||||
* You may not use this file except in compliance with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019 Mariusz Zaborski <oshogbo@FreeBSD.org>
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
/*
|
||||
* ASSERTION:
|
||||
* Positive test to make sure that we can invoke amd64
|
||||
* ureg[] aliases.
|
||||
*
|
||||
* SECTION: User Process Tracing/uregs Array
|
||||
*
|
||||
* NOTES: This test does no verification - the value of the output
|
||||
* is not deterministic.
|
||||
*/
|
||||
|
||||
#pragma D option quiet
|
||||
|
||||
BEGIN
|
||||
{
|
||||
printf("R_GS = 0x%x\n", uregs[R_GS]);
|
||||
printf("R_ES = 0x%x\n", uregs[R_ES]);
|
||||
printf("R_DS = 0x%x\n", uregs[R_DS]);
|
||||
printf("R_CS = 0x%x\n", uregs[R_CS]);
|
||||
printf("R_RFL = 0x%x\n", uregs[R_RFL]);
|
||||
printf("R_SS = 0x%x\n", uregs[R_SS]);
|
||||
printf("R_TRAPNO = 0x%x\n", uregs[R_TRAPNO]);
|
||||
|
||||
printf("R_URSP = 0x%x\n", uregs[R_RSP]);
|
||||
printf("R_RDI = 0x%x\n", uregs[R_RDI]);
|
||||
printf("R_RSI = 0x%x\n", uregs[R_RSI]);
|
||||
printf("R_RBP = 0x%x\n", uregs[R_RBP]);
|
||||
printf("R_RBX = 0x%x\n", uregs[R_RBX]);
|
||||
printf("R_RDX = 0x%x\n", uregs[R_RDX]);
|
||||
printf("R_RCX = 0x%x\n", uregs[R_RCX]);
|
||||
printf("R_RAX = 0x%x\n", uregs[R_RAX]);
|
||||
printf("R_RIP = 0x%x\n", uregs[R_RIP]);
|
||||
printf("R_RDI = 0x%x\n", uregs[R_RDI]);
|
||||
printf("R_R9 = 0x%x\n", uregs[R_R9]);
|
||||
printf("R_R10 = 0x%x\n", uregs[R_R10]);
|
||||
printf("R_R11 = 0x%x\n", uregs[R_R11]);
|
||||
printf("R_R12 = 0x%x\n", uregs[R_R12]);
|
||||
printf("R_R13 = 0x%x\n", uregs[R_R13]);
|
||||
printf("R_R14 = 0x%x\n", uregs[R_R14]);
|
||||
printf("R_R15 = 0x%x\n", uregs[R_R15]);
|
||||
|
||||
/* 32 bits */
|
||||
printf("R_EFL = 0x%x\n", uregs[R_EFL]);
|
||||
printf("R_UESP = 0x%x\n", uregs[R_UESP]);
|
||||
printf("R_ERR = 0x%x\n", uregs[R_ERR]);
|
||||
printf("R_EIP = 0x%x\n", uregs[R_EIP]);
|
||||
printf("R_EDI = 0x%x\n", uregs[R_EDI]);
|
||||
printf("R_ESI = 0x%x\n", uregs[R_ESI]);
|
||||
printf("R_EBP = 0x%x\n", uregs[R_EBP]);
|
||||
printf("R_EBX = 0x%x\n", uregs[R_EBX]);
|
||||
printf("R_EDX = 0x%x\n", uregs[R_EDX]);
|
||||
printf("R_ECX = 0x%x\n", uregs[R_ECX]);
|
||||
printf("R_EAX = 0x%x\n", uregs[R_EAX]);
|
||||
|
||||
exit(0);
|
||||
}
|
@ -8,6 +8,10 @@ TESTS_SUBDIRS+= common
|
||||
TESTS_SUBDIRS+= i386
|
||||
.endif
|
||||
|
||||
.if ${MACHINE_CPUARCH} == "amd64"
|
||||
TESTS_SUBDIRS+= amd64
|
||||
.endif
|
||||
|
||||
.PATH: ${SRCTOP}/tests
|
||||
KYUAFILE= yes
|
||||
|
||||
|
20
cddl/usr.sbin/dtrace/tests/amd64/arrays/Makefile
Normal file
20
cddl/usr.sbin/dtrace/tests/amd64/arrays/Makefile
Normal file
@ -0,0 +1,20 @@
|
||||
# $FreeBSD$
|
||||
|
||||
#
|
||||
# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
|
||||
#
|
||||
|
||||
PACKAGE= tests
|
||||
|
||||
${PACKAGE}FILES= \
|
||||
tst.rax.d \
|
||||
tst.uregsarray.d \
|
||||
|
||||
TESTEXES= \
|
||||
|
||||
|
||||
CFILES= \
|
||||
tst.rax.c \
|
||||
|
||||
|
||||
.include "../../dtrace.test.mk"
|
@ -96,7 +96,7 @@ readonly ORIGINDIR=$(realpath $(dirname $0))
|
||||
readonly TOPDIR=$(realpath ${ORIGINDIR}/../../../../..)
|
||||
readonly CONTRIB_TESTDIR=${TOPDIR}/cddl/contrib/opensolaris/cmd/dtrace/test/tst
|
||||
|
||||
for class in common i386; do
|
||||
for class in common i386 amd64; do
|
||||
for group in $(find ${CONTRIB_TESTDIR}/$class -mindepth 1 -maxdepth 1 -type d); do
|
||||
genmakefile $class $(basename $group)
|
||||
done
|
||||
|
@ -248,6 +248,10 @@
|
||||
ustack
|
||||
..
|
||||
..
|
||||
amd64
|
||||
arrays
|
||||
..
|
||||
..
|
||||
..
|
||||
zfsd
|
||||
..
|
||||
|
Loading…
Reference in New Issue
Block a user