52#include "apr_arch_dso.h"
66#define BEGINNING SEEK_SET
69#define FSEEK(ldptr,o,p) fseek(IOPTR(ldptr),(p==BEGINNING)?(OFFSET(ldptr) +o):o,p)
72#define FREAD(p,s,n,ldptr) fread(p,s,n,IOPTR(ldptr))
83#define RTLD_GLOBAL 0x100
105 (*aprdso)->handle =
osdso;
106 (*aprdso)->pool =
pool;
136 (*res_handle)->errormsg =
dlerror();
140 (*res_handle)->handle = (
void*)
os_handle;
141 (*res_handle)->pool =
ctx;
142 (*res_handle)->errormsg =
NULL;
173 return dso->errormsg;
236extern char *
strdup(
const char *);
237static void caterr(
char *);
295 char *tmp[
BUFSIZ /
sizeof(
char *)];
300 for (
p = tmp; *
p;
p++)
342 (*
mp->info->init) ();
352 while (cp->init || cp->term) {
353 if (cp->init && cp->init != (void (*)(
void)) 0xffffffff)
379 register char *
p =
s;
381 while (*
p >=
'0' && *
p <=
'9')
422 for (
ep =
mp->exports,
i =
mp->nExports;
i;
i--,
ep++)
446 if (--
mp->refCnt > 0)
448 if (
mp->info &&
mp->info->fini)
449 (*
mp->info->fini) ();
452 while (cp->init || cp->term) {
453 if (cp->term && cp->init != (void (*)(void)) 0xffffffff)
462 else if (
mp->gcc_dtor) {
473 for (
ep =
mp->exports,
i =
mp->nExports;
i;
i--,
ep++)
482 if (
mp1->next ==
mp) {
483 mp1->next =
mp->next;
550 if ((
unsigned long)
mp->entry >= (
unsigned long)
lp->ldinfo_dataorg &&
551 (
unsigned long)
mp->entry < (
unsigned long)
lp->ldinfo_dataorg +
552 lp->ldinfo_datasize) {
557 if (
lp->ldinfo_next == 0)
582 strcpy(
errbuf,
"readExports: cannot read data section header");
588 strcpy(
errbuf,
"readExports: cannot read loader section header");
605 strcpy(
errbuf,
"readExports: cannot seek to loader section");
612 strcpy(
errbuf,
"readExports: cannot read loader section");
622 for (
i =
lhp->l_nsyms;
i;
i--,
ls++) {
641 for (
i =
lhp->l_nsyms;
i;
i--,
ls++) {
646 if (
ls->l_zeroes == 0)
659 ep->addr = (
void *) ((
unsigned long)
dataorg +
709 ret =
lp->ldinfo_dataorg;
const ap_regex_t char * errbuf
char * strdup(const char *str)
APR Portability Routines.
request_rec int int apr_table_t const char * path
const unsigned char * buf
apr_brigade_flush void * ctx
apr_dbd_transaction_t int mode
apr_pool_t const char apr_dbd_t ** handle
const void apr_status_t(*) apr_status_t(* APR_DECLARE)(void) apr_pool_pre_cleanup_register(apr_pool_t *p
const char int apr_pool_t * pool
apr_array_header_t ** result
#define apr_pcalloc(p, size)
void * apr_os_dso_handle_t
static apr_status_t dso_cleanup(void *thedso)