summaryrefslogtreecommitdiff
path: root/tests/testsig.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/testsig.c')
-rw-r--r--tests/testsig.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/tests/testsig.c b/tests/testsig.c
index 5f6d3705e5..2eb2bfc4ac 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;