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. */ 58extern int 59perform_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. */ 83struct 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 96struct shlibdep; 97 98extern void 99shlibmod_exit(struct shlibdep **deps); 100 101/* Returns 0 if failure, nonzero for ok. */ 102extern int 103shlibmod_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