1/* This testcase originally provoked an unaligned access fault on Alpha. 2 3 Since Digital Unix and Linux (and probably others) by default fix 4 these up in the kernel, the failure was not visible unless one 5 is sitting at the console examining logs. 6 7 So: If we know how, ask the kernel to deliver SIGBUS instead so 8 that the test case visibly fails. */ 9 10#if defined(__alpha__) && (defined(__linux__) || defined(__osf__)) 11#ifdef __linux__ 12#include <asm/sysinfo.h> 13#include <asm/unistd.h> 14 15static inline int 16setsysinfo(unsigned long op, void *buffer, unsigned long size, 17 int *start, void *arg, unsigned long flag) 18{ 19 syscall(__NR_osf_setsysinfo, op, buffer, size, start, arg, flag); 20} 21 22#else 23#include <sys/sysinfo.h> 24#include <sys/proc.h> 25#endif 26 27static void __attribute__((constructor)) 28trap_unaligned(void) 29{ 30 unsigned int buf[2]; 31 buf[0] = SSIN_UACPROC; 32 buf[1] = UAC_SIGBUS | UAC_NOPRINT; 33 setsysinfo(SSI_NVPAIRS, buf, 1, 0, 0, 0); 34} 35#endif /* alpha */ 36 37void foo(char *a, char *b) { } 38 39void showinfo() 40{ 41 char uname[33] = "", tty[38] = "/dev/"; 42 foo(uname, tty); 43} 44 45int main() 46{ 47 showinfo (); 48 exit (0); 49} 50