mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* System dependent definitions for run-time dynamic loading.
 | 
						|
   Copyright (C) 1996-2017 Free Software Foundation, Inc.
 | 
						|
   This file is part of the GNU C Library.
 | 
						|
 | 
						|
   The GNU C Library is free software; you can redistribute it and/or
 | 
						|
   modify it under the terms of the GNU Lesser General Public
 | 
						|
   License as published by the Free Software Foundation; either
 | 
						|
   version 2.1 of the License, or (at your option) any later version.
 | 
						|
 | 
						|
   The GNU C Library is distributed in the hope that it will be useful,
 | 
						|
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
   Lesser General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU Lesser General Public
 | 
						|
   License along with the GNU C Library.  If not, see
 | 
						|
   <http://www.gnu.org/licenses/>.  */
 | 
						|
 | 
						|
#ifndef _DLFCN_H
 | 
						|
# error "Never use <bits/dlfcn.h> directly; include <dlfcn.h> instead."
 | 
						|
#endif
 | 
						|
 | 
						|
/* The MODE argument to `dlopen' contains one of the following: */
 | 
						|
#define RTLD_LAZY	0x0001	/* Lazy function call binding.  */
 | 
						|
#define RTLD_NOW	0x0002	/* Immediate function call binding.  */
 | 
						|
#define RTLD_BINDING_MASK  0x3	/* Mask of binding time value.  */
 | 
						|
#define RTLD_NOLOAD	0x00008	/* Do not load the object.  */
 | 
						|
#define RTLD_DEEPBIND	0x00010	/* Use deep binding.  */
 | 
						|
 | 
						|
/* If the following bit is set in the MODE argument to `dlopen',
 | 
						|
   the symbols of the loaded object and its dependencies are made
 | 
						|
   visible as if the object were linked directly into the program.  */
 | 
						|
#define RTLD_GLOBAL	0x0004
 | 
						|
 | 
						|
/* Unix98 demands the following flag which is the inverse to RTLD_GLOBAL.
 | 
						|
   The implementation does this by default and so we can define the
 | 
						|
   value to zero.  */
 | 
						|
#define RTLD_LOCAL      0
 | 
						|
 | 
						|
/* Do not delete object when closed.  */
 | 
						|
#define RTLD_NODELETE	0x01000
 | 
						|
 | 
						|
#ifdef __USE_GNU
 | 
						|
/* To support profiling of shared objects it is a good idea to call
 | 
						|
   the function found using `dlsym' using the following macro since
 | 
						|
   these calls do not use the PLT.  But this would mean the dynamic
 | 
						|
   loader has no chance to find out when the function is called.  The
 | 
						|
   macro applies the necessary magic so that profiling is possible.
 | 
						|
   Rewrite
 | 
						|
	foo = (*fctp) (arg1, arg2);
 | 
						|
   into
 | 
						|
        foo = DL_CALL_FCT (fctp, (arg1, arg2));
 | 
						|
*/
 | 
						|
# define DL_CALL_FCT(fctp, args) \
 | 
						|
  (_dl_mcount_wrapper_check ((void *) (fctp)), (*(fctp)) args)
 | 
						|
 | 
						|
__BEGIN_DECLS
 | 
						|
 | 
						|
/* This function calls the profiling functions.  */
 | 
						|
extern void _dl_mcount_wrapper_check (void *__selfpc) __THROW;
 | 
						|
 | 
						|
__END_DECLS
 | 
						|
 | 
						|
#endif
 |