xref: /aosp_15_r20/external/tcpdump/machdep.c (revision 05b00f6010a2396e3db2409989fc67270046269f)
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