]>
git.saurik.com Git - apple/xnu.git/blob - bsd/sys/linker_set.h
   2  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. 
   4  * @APPLE_LICENSE_HEADER_START@ 
   6  * The contents of this file constitute Original Code as defined in and 
   7  * are subject to the Apple Public Source License Version 1.1 (the 
   8  * "License").  You may not use this file except in compliance with the 
   9  * License.  Please obtain a copy of the License at 
  10  * http://www.apple.com/publicsource and read it before using this file. 
  12  * This Original Code and all software distributed under the License are 
  13  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  14  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  15  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  16  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the 
  17  * License for the specific language governing rights and limitations 
  20  * @APPLE_LICENSE_HEADER_END@ 
  23  * Copyright (c) 1999 John D. Polstra 
  24  * All rights reserved. 
  26  * Redistribution and use in source and binary forms, with or without 
  27  * modification, are permitted provided that the following conditions 
  29  * 1. Redistributions of source code must retain the above copyright 
  30  *    notice, this list of conditions and the following disclaimer. 
  31  * 2. Redistributions in binary form must reproduce the above copyright 
  32  *    notice, this list of conditions and the following disclaimer in the 
  33  *    documentation and/or other materials provided with the distribution. 
  35  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 
  36  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  37  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  38  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 
  39  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
  40  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
  41  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  42  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  43  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
  44  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  49 #ifndef _SYS_LINKER_SET_H_ 
  50 #define _SYS_LINKER_SET_H_ 
  52 #include <sys/appleapiopts.h> 
  54 #if !defined(KERNEL) || defined(__APPLE_API_PRIVATE) 
  56  * The following macros are used to declare global sets of objects, which 
  57  * are collected by the linker into a `struct linker_set' as defined below. 
  58  * For ELF, this is done by constructing a separate segment for each set. 
  59  * For a.out, it is done automatically by the linker. 
  65 #define MAKE_SET(seg, set, sym)                                         \ 
  66         static void const * const __set_##set##_sym_##sym = &sym;       \ 
  67         __asm(".section  seg, " #set "");       \ 
  70 /*      __asm(".previous") */ 
  73 #define TEXT_SET(set, sym) MAKE_SET(__TEXT, set, sym) 
  74 #define DATA_SET(set, sym) MAKE_SET(__DATA, set, sym) 
  75 #define BSS_SET(set, sym)  MAKE_SET(__BSS,  set, sym) 
  76 #define ABS_SET(set, sym)  MAKE_SET(__ABS,  set, sym) 
  81  * NB: the constants defined below must match those defined in 
  82  * nlist.h.  Since their calculation requires arithmetic, we 
  83  * can't name them symbolically (e.g., 7 is N_DATA | N_EXT). 
  85 #define MAKE_SET(set, sym, type) \ 
  86         static void const * const __set_##set##_sym_##sym = &sym; \ 
  87         __asm(".stabs \"_" #set "\", " #type ", 0, 0, _" #sym) 
  89 #define TEXT_SET(set, sym) MAKE_SET(set, sym, 5) 
  90 #define DATA_SET(set, sym) MAKE_SET(set, sym, 7) 
  91 #define BSS_SET(set, sym)  MAKE_SET(set, sym, 9) 
  92 #define ABS_SET(set, sym)  MAKE_SET(set, sym, 3) 
  98         const void      *ls_items
[1];           /* really ls_length of them, 
 101 #endif /* !KERNEL || __APPLE_API_PRIVATE */ 
 103 #endif /* _SYS_LINKER_SET_H_ */