12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx -O0 %s -o %t && %run %t 25d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// XFAIL: arm-linux-gnueabi 3341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov 4341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov#include <assert.h> 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <signal.h> 6341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov#include <stdio.h> 7341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov#include <sys/ptrace.h> 8341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov#include <sys/types.h> 9341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov#include <sys/user.h> 10341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov#include <sys/wait.h> 11341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov#include <unistd.h> 12341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov 13341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanovint main(void) { 14341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov pid_t pid; 15341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov pid = fork(); 16341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov if (pid == 0) { // child 17341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov ptrace(PTRACE_TRACEME, 0, NULL, NULL); 18341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov execl("/bin/true", "true", NULL); 19341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov } else { 20341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov wait(NULL); 21341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov user_regs_struct regs; 22341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov int res; 23341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov res = ptrace(PTRACE_GETREGS, pid, NULL, ®s); 24341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov assert(!res); 25341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov if (regs.rip) 26341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov printf("%zx\n", regs.rip); 27341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov 28341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov user_fpregs_struct fpregs; 29341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov res = ptrace(PTRACE_GETFPREGS, pid, NULL, &fpregs); 30341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov assert(!res); 31341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov if (fpregs.mxcsr) 32341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov printf("%x\n", fpregs.mxcsr); 33341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov 342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines siginfo_t siginfo; 352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines res = ptrace(PTRACE_GETSIGINFO, pid, NULL, &siginfo); 362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(!res); 372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(siginfo.si_pid == pid); 382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 39341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov ptrace(PTRACE_CONT, pid, NULL, NULL); 402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 41341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov wait(NULL); 42341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov } 43341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov return 0; 44341b9e63f63a8eacf1b699d4c79edee55241ebe6Evgeniy Stepanov} 45