aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2003-05-13 00:29:04 +0000
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2003-05-13 00:29:04 +0000
commit2a29ca73c9101ae46e85077178d3fcd1b38cfa0c (patch)
tree6783f1d17657ea02c285f359b91dc433e7e871fc
parent54936004fddc52c321cb3f9a9a51140e782bed5d (diff)
downloadqemu-2a29ca73c9101ae46e85077178d3fcd1b38cfa0c.zip
qemu-2a29ca73c9101ae46e85077178d3fcd1b38cfa0c.tar.gz
qemu-2a29ca73c9101ae46e85077178d3fcd1b38cfa0c.tar.bz2
more exception tests
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@159 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r--tests/testsig.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/tests/testsig.c b/tests/testsig.c
index 5f6d370..2eb2bfc 100644
--- a/tests/testsig.c
+++ b/tests/testsig.c
@@ -67,7 +67,7 @@ int tab[2];
int main(int argc, char **argv)
{
struct sigaction act;
- int val;
+ volatile int val;
act.sa_sigaction = sig_handler;
sigemptyset(&act.sa_mask);
@@ -75,6 +75,7 @@ int main(int argc, char **argv)
sigaction(SIGFPE, &act, NULL);
sigaction(SIGILL, &act, NULL);
sigaction(SIGSEGV, &act, NULL);
+ sigaction(SIGTRAP, &act, NULL);
/* test division by zero reporting */
if (setjmp(jmp_env) == 0) {
@@ -112,6 +113,11 @@ int main(int argc, char **argv)
asm volatile ("int $0xfd");
}
+ printf("INT3 exception:\n");
+ if (setjmp(jmp_env) == 0) {
+ asm volatile ("int3");
+ }
+
printf("CLI exception:\n");
if (setjmp(jmp_env) == 0) {
asm volatile ("cli");
@@ -158,10 +164,20 @@ int main(int argc, char **argv)
printf("HLT exception:\n");
if (setjmp(jmp_env) == 0) {
- asm volatile ("hlt" : : "d" (0x4321), "D" (tab), "c" (1));
+ asm volatile ("hlt");
}
-#if 0
+ printf("single step exception:\n");
+ val = 0;
+ if (setjmp(jmp_env) == 0) {
+ asm volatile ("pushf\n"
+ "orl $0x00100, (%%esp)\n"
+ "popf\n"
+ "movl $0xabcd, %0\n" : "=m" (val) : : "cc", "memory");
+ }
+ printf("val=0x%x\n", val);
+
+#if 1
{
int i;
act.sa_handler = alarm_handler;