1*05b00f60SXin Li /*
2*05b00f60SXin Li * Copyright (c) 1996, 1997
3*05b00f60SXin Li * The Regents of the University of California. All rights reserved.
4*05b00f60SXin Li *
5*05b00f60SXin Li * Redistribution and use in source and binary forms, with or without
6*05b00f60SXin Li * modification, are permitted provided that: (1) source code distributions
7*05b00f60SXin Li * retain the above copyright notice and this paragraph in its entirety, (2)
8*05b00f60SXin Li * distributions including binary code include the above copyright notice and
9*05b00f60SXin Li * this paragraph in its entirety in the documentation or other materials
10*05b00f60SXin Li * provided with the distribution, and (3) all advertising materials mentioning
11*05b00f60SXin Li * features or use of this software display the following acknowledgement:
12*05b00f60SXin Li * ``This product includes software developed by the University of California,
13*05b00f60SXin Li * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
14*05b00f60SXin Li * the University nor the names of its contributors may be used to endorse
15*05b00f60SXin Li * or promote products derived from this software without specific prior
16*05b00f60SXin Li * written permission.
17*05b00f60SXin Li * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
18*05b00f60SXin Li * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
19*05b00f60SXin Li * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20*05b00f60SXin Li */
21*05b00f60SXin Li
22*05b00f60SXin Li #ifdef HAVE_CONFIG_H
23*05b00f60SXin Li #include <config.h>
24*05b00f60SXin Li #endif
25*05b00f60SXin Li
26*05b00f60SXin Li #include <stddef.h>
27*05b00f60SXin Li
28*05b00f60SXin Li #ifdef __osf__
29*05b00f60SXin Li #include <stdio.h>
30*05b00f60SXin Li #include <sys/sysinfo.h>
31*05b00f60SXin Li #include <sys/proc.h>
32*05b00f60SXin Li #endif /* __osf__ */
33*05b00f60SXin Li
34*05b00f60SXin Li #include "varattrs.h"
35*05b00f60SXin Li #include "machdep.h"
36*05b00f60SXin Li
37*05b00f60SXin Li /*
38*05b00f60SXin Li * On platforms where the CPU doesn't support unaligned loads, force
39*05b00f60SXin Li * unaligned accesses to abort with SIGBUS, rather than being fixed
40*05b00f60SXin Li * up (slowly) by the OS kernel; on those platforms, misaligned accesses
41*05b00f60SXin Li * are bugs, and we want tcpdump to crash so that the bugs are reported.
42*05b00f60SXin Li *
43*05b00f60SXin Li * The only OS on which this is necessary is DEC OSF/1^W^WDigital
44*05b00f60SXin Li * UNIX^W^WTru64 UNIX.
45*05b00f60SXin Li */
46*05b00f60SXin Li int
abort_on_misalignment(char * ebuf _U_,size_t ebufsiz _U_)47*05b00f60SXin Li abort_on_misalignment(char *ebuf _U_, size_t ebufsiz _U_)
48*05b00f60SXin Li {
49*05b00f60SXin Li #ifdef __osf__
50*05b00f60SXin Li static int buf[2] = { SSIN_UACPROC, UAC_SIGBUS };
51*05b00f60SXin Li
52*05b00f60SXin Li if (setsysinfo(SSI_NVPAIRS, (caddr_t)buf, 1, 0, 0) < 0) {
53*05b00f60SXin Li (void)snprintf(ebuf, ebufsiz, "setsysinfo: errno %d", errno);
54*05b00f60SXin Li return (-1);
55*05b00f60SXin Li }
56*05b00f60SXin Li #endif
57*05b00f60SXin Li return (0);
58*05b00f60SXin Li }
59