libsyms.h (2479B)
1 /* $Id: //depot/blt/include/blt/libsyms.h#1 $ 2 ** 3 ** Copyright 1999 Sidney Cammeresi 4 ** All rights reserved. 5 ** 6 ** Redistribution and use in source and binary forms, with or without 7 ** modification, are permitted provided that the following conditions 8 ** are met: 9 ** 1. Redistributions of source code must retain the above copyright 10 ** notice, this list of conditions, and the following disclaimer. 11 ** 2. Redistributions in binary form must reproduce the above copyright 12 ** notice, this list of conditions, and the following disclaimer in the 13 ** documentation and/or other materials provided with the distribution. 14 ** 3. The name of the author may not be used to endorse or promote products 15 ** derived from this software without specific prior written permission. 16 ** 17 ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef __BLT_LIBSYMS_H__ 30 #define __BLT_LIBSYMS_H__ 31 32 /* 33 * this creates a weak alias from the symbol original to the symbol alias. 34 * functions like printf should actually be defined as _printf in libc, 35 * with weak aliases linking printf to _printf. by doing this, a user can 36 * put a wrapper around the actual libc functions without rebuilding 37 * libc (for profiling, say). i.e., 38 * 39 * weak_alias (_printf, printf) 40 * int _printf (char *fmt, ...); 41 * 42 * printf ("foo"); 43 * 44 * results in a call to _printf. 45 */ 46 #define weak_alias(original, alias) \ 47 asm (".weak " #alias " ; " #alias " = " #original); 48 49 /* 50 * this causes the GNU linker to emit a warning when this symbol is 51 * referenced during a linking stage. 52 * 53 * only the name of the section matters. this must be char[], not char * 54 */ 55 #define link_warning(symbol, text) \ 56 static const char ___link_warning_##symbol[] \ 57 __attribute__ ((section (".gnu.warning." #symbol))) = text; 58 59 #endif 60