xref: /titanic_41/usr/src/lib/libc/inc/lint.h (revision 2a8d6eba033e4713ab12b61178f0513f1f075482)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
57257d1b4Sraf  * Common Development and Distribution License (the "License").
67257d1b4Sraf  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217257d1b4Sraf 
227c478bd9Sstevel@tonic-gate /*
23*2a8d6ebaSRod Evans  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
247c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
257c478bd9Sstevel@tonic-gate  */
267c478bd9Sstevel@tonic-gate 
277c478bd9Sstevel@tonic-gate #ifndef _LIBC_LINT_H
287c478bd9Sstevel@tonic-gate #define	_LIBC_LINT_H
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate #ifdef __cplusplus
317c478bd9Sstevel@tonic-gate extern "C" {
327c478bd9Sstevel@tonic-gate #endif
337c478bd9Sstevel@tonic-gate 
347c478bd9Sstevel@tonic-gate /*
357c478bd9Sstevel@tonic-gate  * We must include "lint.h" as the first #include in all libc source files
367c478bd9Sstevel@tonic-gate  * for the purpose of running lint over libc, else lint errors occur due to
377c478bd9Sstevel@tonic-gate  * lint not knowing the details of the implementation of locales and stdio.
387c478bd9Sstevel@tonic-gate  */
397c478bd9Sstevel@tonic-gate #if defined(__lint)
407257d1b4Sraf 
417c478bd9Sstevel@tonic-gate #include "mbstatet.h"
427c478bd9Sstevel@tonic-gate #include "file64.h"
437257d1b4Sraf 
447257d1b4Sraf #else
457257d1b4Sraf 
467257d1b4Sraf /*
477257d1b4Sraf  * Small optimization for callers of syscall() and __systemcall().
487257d1b4Sraf  * This could/should be defined elsewhere, but here is a particularly
497257d1b4Sraf  * attractive place since all source files in libc include "lint.h".
507257d1b4Sraf  */
517257d1b4Sraf #define	syscall		_syscall6
527257d1b4Sraf #define	__systemcall	__systemcall6
537257d1b4Sraf 
54*2a8d6ebaSRod Evans /*
55*2a8d6ebaSRod Evans  * Shades of the old and deprecated "synonyms.h" file.
56*2a8d6ebaSRod Evans  * Because of the awkward relationship between these functions:
57*2a8d6ebaSRod Evans  *	memcmp()
58*2a8d6ebaSRod Evans  *	memcpy()
59*2a8d6ebaSRod Evans  *	memmove()
60*2a8d6ebaSRod Evans  *	memset()
61*2a8d6ebaSRod Evans  * and the sparc auxiliary filters:
62*2a8d6ebaSRod Evans  *	/platform/.../lib/libc_psr.so.1
63*2a8d6ebaSRod Evans  * we must be careful always to call the leading-underscore
64*2a8d6ebaSRod Evans  * symbol names when calling from within libc itself.
65*2a8d6ebaSRod Evans  *
66*2a8d6ebaSRod Evans  * If an interposer interposes on these mem*() symbol names,
67*2a8d6ebaSRod Evans  * and we call one of them from within a critical region in libc,
68*2a8d6ebaSRod Evans  * we will end up in the interposer code while executing within
69*2a8d6ebaSRod Evans  * the critical region.  Chaos can ensue.
70*2a8d6ebaSRod Evans  *
71*2a8d6ebaSRod Evans  * We try to avoid this by calling only the leading-underscore names.
72*2a8d6ebaSRod Evans  * We hope that no interposer will interpose on the leading-underscore
73*2a8d6ebaSRod Evans  * versions of these functions, else all hope is lost.
74*2a8d6ebaSRod Evans  */
75*2a8d6ebaSRod Evans 
76*2a8d6ebaSRod Evans #pragma	redefine_extname	memcmp		_memcmp
77*2a8d6ebaSRod Evans #pragma	redefine_extname	memcpy		_memcpy
78*2a8d6ebaSRod Evans #pragma	redefine_extname	memmove		_memmove
79*2a8d6ebaSRod Evans #pragma	redefine_extname	memset		_memset
80*2a8d6ebaSRod Evans 
817c478bd9Sstevel@tonic-gate #endif
827c478bd9Sstevel@tonic-gate 
837c478bd9Sstevel@tonic-gate #ifdef __cplusplus
847c478bd9Sstevel@tonic-gate }
857c478bd9Sstevel@tonic-gate #endif
867c478bd9Sstevel@tonic-gate 
877c478bd9Sstevel@tonic-gate #endif /* _LIBC_LINT_H */
88