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:
Mariusz Zaborski 2019-06-05 22:32:26 +00:00
parent 8da024d941
commit 75ed05ef7d
7 changed files with 190 additions and 1 deletions

View File

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

View File

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

View File

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

View File

@ -8,6 +8,10 @@ TESTS_SUBDIRS+= common
TESTS_SUBDIRS+= i386
.endif
.if ${MACHINE_CPUARCH} == "amd64"
TESTS_SUBDIRS+= amd64
.endif
.PATH: ${SRCTOP}/tests
KYUAFILE= yes

View 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"

View File

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

View File

@ -248,6 +248,10 @@
ustack
..
..
amd64
arrays
..
..
..
zfsd
..