xref: /illumos-gate/usr/src/lib/libc/inc/lint.h (revision 2a8d6eba033e4713ab12b61178f0513f1f075482)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _LIBC_LINT_H
28 #define	_LIBC_LINT_H
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 /*
35  * We must include "lint.h" as the first #include in all libc source files
36  * for the purpose of running lint over libc, else lint errors occur due to
37  * lint not knowing the details of the implementation of locales and stdio.
38  */
39 #if defined(__lint)
40 
41 #include "mbstatet.h"
42 #include "file64.h"
43 
44 #else
45 
46 /*
47  * Small optimization for callers of syscall() and __systemcall().
48  * This could/should be defined elsewhere, but here is a particularly
49  * attractive place since all source files in libc include "lint.h".
50  */
51 #define	syscall		_syscall6
52 #define	__systemcall	__systemcall6
53 
54 /*
55  * Shades of the old and deprecated "synonyms.h" file.
56  * Because of the awkward relationship between these functions:
57  *	memcmp()
58  *	memcpy()
59  *	memmove()
60  *	memset()
61  * and the sparc auxiliary filters:
62  *	/platform/.../lib/libc_psr.so.1
63  * we must be careful always to call the leading-underscore
64  * symbol names when calling from within libc itself.
65  *
66  * If an interposer interposes on these mem*() symbol names,
67  * and we call one of them from within a critical region in libc,
68  * we will end up in the interposer code while executing within
69  * the critical region.  Chaos can ensue.
70  *
71  * We try to avoid this by calling only the leading-underscore names.
72  * We hope that no interposer will interpose on the leading-underscore
73  * versions of these functions, else all hope is lost.
74  */
75 
76 #pragma	redefine_extname	memcmp		_memcmp
77 #pragma	redefine_extname	memcpy		_memcpy
78 #pragma	redefine_extname	memmove		_memmove
79 #pragma	redefine_extname	memset		_memset
80 
81 #endif
82 
83 #ifdef __cplusplus
84 }
85 #endif
86 
87 #endif /* _LIBC_LINT_H */
88