Home | History | Annotate | Download | only in inc
      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