1 /*!************************************************************************** 2 *! 3 *! FILE NAME : eshlibld.h 4 *! 5 *! DESCRIPTION: Prototypes for exported shared library functions 6 *! 7 *! FUNCTIONS : perform_cris_aout_relocations, shlibmod_fork, shlibmod_exit 8 *! (EXPORTED) 9 *! 10 *!--------------------------------------------------------------------------- 11 *! 12 *! (C) Copyright 1998, 1999 Axis Communications AB, LUND, SWEDEN 13 *! 14 *!**************************************************************************/ 15 /* $Id: eshlibld.h,v 1.2 2001/02/23 13:47:33 bjornw Exp $ */ 16 17 #ifndef _cris_relocate_h 18 #define _cris_relocate_h 19 20 /* Please note that this file is also compiled into the xsim simulator. 21 Try to avoid breaking its double use (only works on a little-endian 22 32-bit machine such as the i386 anyway). 23 24 Use __KERNEL__ when you're about to use kernel functions, 25 (which you should not do here anyway, since this file is 26 used by glibc). 27 Use defined(__KERNEL__) || defined(__elinux__) when doing 28 things that only makes sense on an elinux system. 29 Use __CRIS__ when you're about to do (really) CRIS-specific code. 30 */ 31 32 /* We have dependencies all over the place for the host system 33 for xsim being a linux system, so let's not pretend anything 34 else with #ifdef:s here until fixed. */ 35 #include <linux/limits.h> 36 37 /* Maybe do sanity checking if file input. */ 38 #undef SANITYCHECK_RELOC 39 40 /* Maybe output debug messages. */ 41 #undef RELOC_DEBUG 42 43 /* Maybe we want to share core as well as disk space. 44 Mainly depends on the config macro CONFIG_SHARE_SHLIB_CORE, but it is 45 assumed that we want to share code when debugging (exposes more 46 trouble). */ 47 #ifndef SHARE_LIB_CORE 48 # if (defined(__KERNEL__) || !defined(RELOC_DEBUG)) 49 # define SHARE_LIB_CORE 0 50 # else 51 # define SHARE_LIB_CORE 1 52 # endif /* __KERNEL__ etc */ 53 #endif /* SHARE_LIB_CORE */ 54 55 56 /* Main exported function; supposed to be called when the program a.out 57 has been read in. */ 58 extern int 59 perform_cris_aout_relocations(unsigned long text, unsigned long tlength, 60 unsigned long data, unsigned long dlength, 61 unsigned long baddr, unsigned long blength, 62 63 /* These may be zero when there's "perfect" 64 position-independent code. */ 65 unsigned char *trel, unsigned long tsrel, 66 unsigned long dsrel, 67 68 /* These will be zero at a first try, to see 69 if code is statically linked. Else a 70 second try, with the symbol table and 71 string table nonzero should be done. */ 72 unsigned char *symbols, unsigned long symlength, 73 unsigned char *strings, unsigned long stringlength, 74 75 /* These will only be used when symbol table 76 information is present. */ 77 char **env, int envc, 78 int euid, int is_suid); 79 80 81 #ifdef RELOC_DEBUG 82 /* Task-specific debug stuff. */ 83 struct task_reloc_debug { 84 struct memdebug *alloclast; 85 unsigned long alloc_total; 86 unsigned long export_total; 87 }; 88 #endif /* RELOC_DEBUG */ 89 90 #if SHARE_LIB_CORE 91 92 /* When code (and some very specific data) is shared and not just 93 dynamically linked, we need to export hooks for exec beginning and 94 end. */ 95 96 struct shlibdep; 97 98 extern void 99 shlibmod_exit(struct shlibdep **deps); 100 101 /* Returns 0 if failure, nonzero for ok. */ 102 extern int 103 shlibmod_fork(struct shlibdep **deps); 104 105 #else /* ! SHARE_LIB_CORE */ 106 # define shlibmod_exit(x) 107 # define shlibmod_fork(x) 1 108 #endif /* ! SHARE_LIB_CORE */ 109 110 #endif _cris_relocate_h 111 /********************** END OF FILE eshlibld.h *****************************/ 112 113