xref: /illumos-gate/usr/src/lib/libc/inc/lint.h (revision 803376f0)
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 /* we need the following to pick up _LP64 */
35 #include <sys/feature_tests.h>
36 
37 /*
38  * We must include "lint.h" as the first #include in all libc source files
39  * for the purpose of running lint over libc, else lint errors occur due to
40  * lint not knowing the details of the implementation of locales and stdio.
41  */
42 #if defined(__lint)
43 
44 #include "mbstatet.h"
45 #include "file64.h"
46 
47 #else
48 
49 /*
50  * Small optimization for callers of syscall() and __systemcall().
51  * This could/should be defined elsewhere, but here is a particularly
52  * attractive place since all source files in libc include "lint.h".
53  */
54 #define	syscall		_syscall6
55 #define	__systemcall	__systemcall6
56 
57 /*
58  * Shades of the old and deprecated "synonyms.h" file.
59  * Because of the awkward relationship between these functions:
60  *	memcmp()
61  *	memcpy()
62  *	memmove()
63  *	memset()
64  * and the sparc auxiliary filters:
65  *	/platform/.../lib/libc_psr.so.1
66  * we must be careful always to call the leading-underscore
67  * symbol names when calling from within libc itself.
68  *
69  * If an interposer interposes on these mem*() symbol names,
70  * and we call one of them from within a critical region in libc,
71  * we will end up in the interposer code while executing within
72  * the critical region.  Chaos can ensue.
73  *
74  * We try to avoid this by calling only the leading-underscore names.
75  * We hope that no interposer will interpose on the leading-underscore
76  * versions of these functions, else all hope is lost.
77  */
78 
79 #pragma	redefine_extname	memcmp		_memcmp
80 #pragma	redefine_extname	memcpy		_memcpy
81 #pragma	redefine_extname	memmove		_memmove
82 #pragma	redefine_extname	memset		_memset
83 
84 #endif
85 
86 #ifdef __cplusplus
87 }
88 #endif
89 
90 #endif /* _LIBC_LINT_H */
91