Back to index

glibc  2.9
dlfcn.h
Go to the documentation of this file.
00001 /* System dependent definitions for run-time dynamic loading.
00002    Copyright (C) 1996-2001, 2004 Free Software Foundation, Inc.
00003    This file is part of the GNU C Library.
00004 
00005    The GNU C Library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009 
00010    The GNU C Library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014 
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with the GNU C Library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA.  */
00019 
00020 #ifndef _DLFCN_H
00021 # error "Never use <bits/dlfcn.h> directly; include <dlfcn.h> instead."
00022 #endif
00023 
00024 /* The MODE argument to `dlopen' contains one of the following: */
00025 #define RTLD_LAZY    0x00001       /* Lazy function call binding.  */
00026 #define RTLD_NOW     0x00002       /* Immediate function call binding.  */
00027 #define       RTLD_BINDING_MASK   0x3     /* Mask of binding time value.  */
00028 #define RTLD_NOLOAD  0x00004       /* Do not load the object.  */
00029 #define RTLD_DEEPBIND       0x00008       /* Use deep binding.  */
00030 
00031 /* If the following bit is set in the MODE argument to `dlopen',
00032    the symbols of the loaded object and its dependencies are made
00033    visible as if the object were linked directly into the program.  */
00034 #define RTLD_GLOBAL  0x00100
00035 
00036 /* Unix98 demands the following flag which is the inverse to RTLD_GLOBAL.
00037    The implementation does this by default and so we can define the
00038    value to zero.  */
00039 #define RTLD_LOCAL   0
00040 
00041 /* Do not delete object when closed.  */
00042 #define RTLD_NODELETE       0x01000
00043 
00044 #ifdef __USE_GNU
00045 /* To support profiling of shared objects it is a good idea to call
00046    the function found using `dlsym' using the following macro since
00047    these calls do not use the PLT.  But this would mean the dynamic
00048    loader has no chance to find out when the function is called.  The
00049    macro applies the necessary magic so that profiling is possible.
00050    Rewrite
00051        foo = (*fctp) (arg1, arg2);
00052    into
00053         foo = DL_CALL_FCT (fctp, (arg1, arg2));
00054 */
00055 # define DL_CALL_FCT(fctp, args) \
00056   (_dl_mcount_wrapper_check ((void *) (fctp)), (*(fctp)) args)
00057 
00058 __BEGIN_DECLS
00059 
00060 /* This function calls the profiling functions.  */
00061 extern void _dl_mcount_wrapper_check (void *__selfpc) __THROW;
00062 
00063 __END_DECLS
00064 
00065 #endif