openblt

a hobby OS from the late 90s
git clone http://frotz.net/git/openblt.git
Log | Files | Refs | LICENSE

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