198d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam/* Ltrace Test : signals.c.
298d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam   Objectives  : Verify that ltrace can trace user defined signal.
398d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam   This file was written by Yao Qi <qiyao@cn.ibm.com>. */
498d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
598d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam#include<stdio.h>
698d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam#include<signal.h>
798d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam#include <sys/types.h>
898d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
998d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam#define LOOP	20
1098d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
1198d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamvoid
1298d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamhandler(int signum,siginfo_t *info,void *act)
1398d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam{
1498d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam}
1598d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
1698d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamint
1798d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliammain ()
1898d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam{
1998d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  struct sigaction act;
2098d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  union sigval mysigval;
2198d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  int i;
2298d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  int sig;
2398d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  pid_t pid;
2498d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
2598d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  mysigval.sival_int=0;
26105adb6627b19be7208fe55c226cbcfbbeb2f00cArnaud Patard  sig = SIGUSR1;
2798d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  pid=getpid();
2898d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
2998d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  sigemptyset(&act.sa_mask);
3098d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  act.sa_sigaction=handler;
3198d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  act.sa_flags=SA_SIGINFO;
3298d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
3398d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  if(sigaction(sig,&act,NULL) < 0)
3498d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam    {
3598d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam      printf("install sigal error\n");
3698d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam    }
3798d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
3898d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  for(i=0; i< LOOP; i++)
3998d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam    {
4098d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam      usleep(100);
4198d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam      sigqueue(pid,sig,mysigval);
4298d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam    }
4398d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam  return 0;
4498d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam}
45