xref: /illumos-gate/usr/src/lib/libc/inc/lint.h (revision 803376f0)
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 /*
232a8d6ebaSRod 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 
34*eda71b4aSGarrett D'Amore /* we need the following to pick up _LP64 */
35*eda71b4aSGarrett D'Amore #include <sys/feature_tests.h>
36*eda71b4aSGarrett D'Amore 
377c478bd9Sstevel@tonic-gate /*
387c478bd9Sstevel@tonic-gate  * We must include "lint.h" as the first #include in all libc source files
397c478bd9Sstevel@tonic-gate  * for the purpose of running lint over libc, else lint errors occur due to
407c478bd9Sstevel@tonic-gate  * lint not knowing the details of the implementation of locales and stdio.
417c478bd9Sstevel@tonic-gate  */
427c478bd9Sstevel@tonic-gate #if defined(__lint)
437257d1b4Sraf 
447c478bd9Sstevel@tonic-gate #include "mbstatet.h"
457c478bd9Sstevel@tonic-gate #include "file64.h"
467257d1b4Sraf 
477257d1b4Sraf #else
487257d1b4Sraf 
497257d1b4Sraf /*
507257d1b4Sraf  * Small optimization for callers of syscall() and __systemcall().
517257d1b4Sraf  * This could/should be defined elsewhere, but here is a particularly
527257d1b4Sraf  * attractive place since all source files in libc include "lint.h".
537257d1b4Sraf  */
547257d1b4Sraf #define	syscall		_syscall6
557257d1b4Sraf #define	__systemcall	__systemcall6
567257d1b4Sraf 
572a8d6ebaSRod Evans /*
582a8d6ebaSRod Evans  * Shades of the old and deprecated "synonyms.h" file.
592a8d6ebaSRod Evans  * Because of the awkward relationship between these functions:
602a8d6ebaSRod Evans  *	memcmp()
612a8d6ebaSRod Evans  *	memcpy()
622a8d6ebaSRod Evans  *	memmove()
632a8d6ebaSRod Evans  *	memset()
642a8d6ebaSRod Evans  * and the sparc auxiliary filters:
652a8d6ebaSRod Evans  *	/platform/.../lib/libc_psr.so.1
662a8d6ebaSRod Evans  * we must be careful always to call the leading-underscore
672a8d6ebaSRod Evans  * symbol names when calling from within libc itself.
682a8d6ebaSRod Evans  *
692a8d6ebaSRod Evans  * If an interposer interposes on these mem*() symbol names,
702a8d6ebaSRod Evans  * and we call one of them from within a critical region in libc,
712a8d6ebaSRod Evans  * we will end up in the interposer code while executing within
722a8d6ebaSRod Evans  * the critical region.  Chaos can ensue.
732a8d6ebaSRod Evans  *
742a8d6ebaSRod Evans  * We try to avoid this by calling only the leading-underscore names.
752a8d6ebaSRod Evans  * We hope that no interposer will interpose on the leading-underscore
762a8d6ebaSRod Evans  * versions of these functions, else all hope is lost.
772a8d6ebaSRod Evans  */
782a8d6ebaSRod Evans 
792a8d6ebaSRod Evans #pragma	redefine_extname	memcmp		_memcmp
802a8d6ebaSRod Evans #pragma	redefine_extname	memcpy		_memcpy
812a8d6ebaSRod Evans #pragma	redefine_extname	memmove		_memmove
822a8d6ebaSRod Evans #pragma	redefine_extname	memset		_memset
832a8d6ebaSRod Evans 
847c478bd9Sstevel@tonic-gate #endif
857c478bd9Sstevel@tonic-gate 
867c478bd9Sstevel@tonic-gate #ifdef __cplusplus
877c478bd9Sstevel@tonic-gate }
887c478bd9Sstevel@tonic-gate #endif
897c478bd9Sstevel@tonic-gate 
907c478bd9Sstevel@tonic-gate #endif /* _LIBC_LINT_H */
91