2005-11-17 Jeff Johnston <jjohnstn@redhat.com>
* libc/sys/linux/dl/dl-local.h: New file based on old dlfcn.h in libc/sys/linux/include. * libc/sys/linux/dl/dlfcn.h: Moved to libc/sys/linux/include. * libc/sys/linux/dl/ldsodefs.h: Include dl-local.h instead of dlfcn.h. * libc/sys/linux/include/dlfcn.h: Replaced with dlfcn.h formerly in libc/sys/linux/dl.
This commit is contained in:
parent
b92f9343b3
commit
1396951b20
@ -1,3 +1,12 @@
|
|||||||
|
2005-11-17 Jeff Johnston <jjohnstn@redhat.com>
|
||||||
|
|
||||||
|
* libc/sys/linux/dl/dl-local.h: New file based on old dlfcn.h
|
||||||
|
in libc/sys/linux/include.
|
||||||
|
* libc/sys/linux/dl/dlfcn.h: Moved to libc/sys/linux/include.
|
||||||
|
* libc/sys/linux/dl/ldsodefs.h: Include dl-local.h instead of dlfcn.h.
|
||||||
|
* libc/sys/linux/include/dlfcn.h: Replaced with dlfcn.h formerly
|
||||||
|
in libc/sys/linux/dl.
|
||||||
|
|
||||||
2005-11-11 Christopher Faylor <cgf@timesys.com>
|
2005-11-11 Christopher Faylor <cgf@timesys.com>
|
||||||
|
|
||||||
* libc/include/sys/time.h: For cygwin, use general header rather than
|
* libc/include/sys/time.h: For cygwin, use general header rather than
|
||||||
|
65
newlib/libc/sys/linux/dl/dl-local.h
Normal file
65
newlib/libc/sys/linux/dl/dl-local.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#ifndef _LOCAL_H
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
#define internal_function
|
||||||
|
|
||||||
|
/* Internally used flag. */
|
||||||
|
#define __RTLD_DLOPEN 0x80000000
|
||||||
|
#define __RTLD_SPROF 0x40000000
|
||||||
|
|
||||||
|
/* Now define the internal interfaces. */
|
||||||
|
extern void *__dlvsym (void *__handle, __const char *__name,
|
||||||
|
__const char *__version);
|
||||||
|
|
||||||
|
extern void *__libc_dlopen (__const char *__name);
|
||||||
|
extern void *__libc_dlsym (void *__map, __const char *__name);
|
||||||
|
extern int __libc_dlclose (void *__map);
|
||||||
|
|
||||||
|
/* Locate shared object containing the given address. */
|
||||||
|
extern int _dl_addr (const void *address, Dl_info *info)
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
/* Open the shared object NAME, relocate it, and run its initializer if it
|
||||||
|
hasn't already been run. MODE is as for `dlopen' (see <dlfcn.h>). If
|
||||||
|
the object is already opened, returns its existing map. */
|
||||||
|
extern void *_dl_open (const char *name, int mode, const void *caller)
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
/* Close an object previously opened by _dl_open. */
|
||||||
|
extern void _dl_close (void *map)
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
/* Look up NAME in shared object HANDLE (which may be RTLD_DEFAULT or
|
||||||
|
RTLD_NEXT). WHO is the calling function, for RTLD_NEXT. Returns
|
||||||
|
the symbol value, which may be NULL. */
|
||||||
|
extern void *_dl_sym (void *handle, const char *name, void *who)
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
/* Look up version VERSION of symbol NAME in shared object HANDLE
|
||||||
|
(which may be RTLD_DEFAULT or RTLD_NEXT). WHO is the calling
|
||||||
|
function, for RTLD_NEXT. Returns the symbol value, which may be
|
||||||
|
NULL. */
|
||||||
|
extern void *_dl_vsym (void *handle, const char *name, const char *version,
|
||||||
|
void *who)
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
/* Call OPERATE, catching errors from `dl_signal_error'. If there is no
|
||||||
|
error, *ERRSTRING is set to null. If there is an error, *ERRSTRING is
|
||||||
|
set to a string constructed from the strings passed to _dl_signal_error,
|
||||||
|
and the error code passed is the return value and *OBJNAME is set to
|
||||||
|
the object name which experienced the problems. ERRSTRING if nonzero
|
||||||
|
points to a malloc'ed string which the caller has to free after use.
|
||||||
|
ARGS is passed as argument to OPERATE. */
|
||||||
|
extern int _dl_catch_error (const char **objname, const char **errstring,
|
||||||
|
void (*operate) (void *),
|
||||||
|
void *args)
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
/* Helper function for <dlfcn.h> functions. Runs the OPERATE function via
|
||||||
|
_dl_catch_error. Returns zero for success, nonzero for failure; and
|
||||||
|
arranges for `dlerror' to return the error details.
|
||||||
|
ARGS is passed as argument to OPERATE. */
|
||||||
|
extern int _dlerror_run (void (*operate) (void *), void *args)
|
||||||
|
internal_function;
|
||||||
|
|
||||||
|
#endif
|
@ -1,84 +0,0 @@
|
|||||||
/* User functions for run-time dynamic loading.
|
|
||||||
Copyright (C) 1995-1999, 2000, 2001 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, write to the Free
|
|
||||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
02111-1307 USA. */
|
|
||||||
|
|
||||||
#ifndef _DLFCN_H
|
|
||||||
#define _DLFCN_H 1
|
|
||||||
|
|
||||||
#include <features.h>
|
|
||||||
|
|
||||||
/* Collect various system dependent definitions and declarations. */
|
|
||||||
#include <sys/dlfcn.h>
|
|
||||||
|
|
||||||
|
|
||||||
/* If the first argument of `dlsym' or `dlvsym' is set to RTLD_NEXT
|
|
||||||
the run-time address of the symbol called NAME in the next shared
|
|
||||||
object is returned. The "next" relation is defined by the order
|
|
||||||
the shared objects were loaded. */
|
|
||||||
# define RTLD_NEXT ((void *) -1l)
|
|
||||||
|
|
||||||
/* If the first argument to `dlsym' or `dlvsym' is set to RTLD_DEFAULT
|
|
||||||
the run-time address of the symbol called NAME in the global scope
|
|
||||||
is returned. */
|
|
||||||
# define RTLD_DEFAULT ((void *) 0)
|
|
||||||
|
|
||||||
|
|
||||||
__BEGIN_DECLS
|
|
||||||
|
|
||||||
/* Open the shared object FILE and map it in; return a handle that can be
|
|
||||||
passed to `dlsym' to get symbol values from it. */
|
|
||||||
extern void *dlopen (__const char *__file, int __mode) __THROW;
|
|
||||||
|
|
||||||
/* Unmap and close a shared object opened by `dlopen'.
|
|
||||||
The handle cannot be used again after calling `dlclose'. */
|
|
||||||
extern int dlclose (void *__handle) __THROW;
|
|
||||||
|
|
||||||
/* Find the run-time address in the shared object HANDLE refers to
|
|
||||||
of the symbol called NAME. */
|
|
||||||
extern void *dlsym (void *__restrict __handle,
|
|
||||||
__const char *__restrict __name) __THROW;
|
|
||||||
|
|
||||||
/* Find the run-time address in the shared object HANDLE refers to
|
|
||||||
of the symbol called NAME with VERSION. */
|
|
||||||
extern void *dlvsym (void *__restrict __handle,
|
|
||||||
__const char *__restrict __name,
|
|
||||||
__const char *__restrict __version) __THROW;
|
|
||||||
|
|
||||||
/* When any of the above functions fails, call this function
|
|
||||||
to return a string describing the error. Each call resets
|
|
||||||
the error string so that a following call returns null. */
|
|
||||||
extern char *dlerror (void) __THROW;
|
|
||||||
|
|
||||||
|
|
||||||
/* Structure containing information about object searched using
|
|
||||||
`dladdr'. */
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
__const char *dli_fname; /* File name of defining object. */
|
|
||||||
void *dli_fbase; /* Load address of that object. */
|
|
||||||
__const char *dli_sname; /* Name of nearest symbol. */
|
|
||||||
void *dli_saddr; /* Exact value of nearest symbol. */
|
|
||||||
} Dl_info;
|
|
||||||
|
|
||||||
/* Fill in *INFO with the following information about ADDRESS.
|
|
||||||
Returns 0 iff no shared object's segments contain that address. */
|
|
||||||
extern int dladdr (__const void *__address, Dl_info *__info) __THROW;
|
|
||||||
|
|
||||||
__END_DECLS
|
|
||||||
|
|
||||||
#endif /* dlfcn.h */
|
|
@ -28,11 +28,12 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <elf.h>
|
#include <elf.h>
|
||||||
#include <dlfcn.h>
|
|
||||||
#include <link.h>
|
#include <link.h>
|
||||||
#include <dl-lookupcfg.h>
|
#include <dl-lookupcfg.h>
|
||||||
#include <bits/libc-lock.h>
|
#include <bits/libc-lock.h>
|
||||||
|
|
||||||
|
#include "dl-local.h"
|
||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
/* We use this macro to refer to ELF types independent of the native wordsize.
|
/* We use this macro to refer to ELF types independent of the native wordsize.
|
||||||
|
@ -1,65 +1,84 @@
|
|||||||
#ifndef _DLFCN_H
|
/* User functions for run-time dynamic loading.
|
||||||
#include <dl/dlfcn.h>
|
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
#define internal_function
|
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.
|
||||||
|
|
||||||
/* Internally used flag. */
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
#define __RTLD_DLOPEN 0x80000000
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
#define __RTLD_SPROF 0x40000000
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
/* Now define the internal interfaces. */
|
You should have received a copy of the GNU Lesser General Public
|
||||||
extern void *__dlvsym (void *__handle, __const char *__name,
|
License along with the GNU C Library; if not, write to the Free
|
||||||
__const char *__version);
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA. */
|
||||||
|
|
||||||
extern void *__libc_dlopen (__const char *__name);
|
#ifndef _DLFCN_H
|
||||||
extern void *__libc_dlsym (void *__map, __const char *__name);
|
#define _DLFCN_H 1
|
||||||
extern int __libc_dlclose (void *__map);
|
|
||||||
|
|
||||||
/* Locate shared object containing the given address. */
|
#include <features.h>
|
||||||
extern int _dl_addr (const void *address, Dl_info *info)
|
|
||||||
internal_function;
|
|
||||||
|
|
||||||
/* Open the shared object NAME, relocate it, and run its initializer if it
|
/* Collect various system dependent definitions and declarations. */
|
||||||
hasn't already been run. MODE is as for `dlopen' (see <dlfcn.h>). If
|
#include <sys/dlfcn.h>
|
||||||
the object is already opened, returns its existing map. */
|
|
||||||
extern void *_dl_open (const char *name, int mode, const void *caller)
|
|
||||||
internal_function;
|
|
||||||
|
|
||||||
/* Close an object previously opened by _dl_open. */
|
|
||||||
extern void _dl_close (void *map)
|
|
||||||
internal_function;
|
|
||||||
|
|
||||||
/* Look up NAME in shared object HANDLE (which may be RTLD_DEFAULT or
|
/* If the first argument of `dlsym' or `dlvsym' is set to RTLD_NEXT
|
||||||
RTLD_NEXT). WHO is the calling function, for RTLD_NEXT. Returns
|
the run-time address of the symbol called NAME in the next shared
|
||||||
the symbol value, which may be NULL. */
|
object is returned. The "next" relation is defined by the order
|
||||||
extern void *_dl_sym (void *handle, const char *name, void *who)
|
the shared objects were loaded. */
|
||||||
internal_function;
|
# define RTLD_NEXT ((void *) -1l)
|
||||||
|
|
||||||
/* Look up version VERSION of symbol NAME in shared object HANDLE
|
/* If the first argument to `dlsym' or `dlvsym' is set to RTLD_DEFAULT
|
||||||
(which may be RTLD_DEFAULT or RTLD_NEXT). WHO is the calling
|
the run-time address of the symbol called NAME in the global scope
|
||||||
function, for RTLD_NEXT. Returns the symbol value, which may be
|
is returned. */
|
||||||
NULL. */
|
# define RTLD_DEFAULT ((void *) 0)
|
||||||
extern void *_dl_vsym (void *handle, const char *name, const char *version,
|
|
||||||
void *who)
|
|
||||||
internal_function;
|
|
||||||
|
|
||||||
/* Call OPERATE, catching errors from `dl_signal_error'. If there is no
|
|
||||||
error, *ERRSTRING is set to null. If there is an error, *ERRSTRING is
|
|
||||||
set to a string constructed from the strings passed to _dl_signal_error,
|
|
||||||
and the error code passed is the return value and *OBJNAME is set to
|
|
||||||
the object name which experienced the problems. ERRSTRING if nonzero
|
|
||||||
points to a malloc'ed string which the caller has to free after use.
|
|
||||||
ARGS is passed as argument to OPERATE. */
|
|
||||||
extern int _dl_catch_error (const char **objname, const char **errstring,
|
|
||||||
void (*operate) (void *),
|
|
||||||
void *args)
|
|
||||||
internal_function;
|
|
||||||
|
|
||||||
/* Helper function for <dlfcn.h> functions. Runs the OPERATE function via
|
__BEGIN_DECLS
|
||||||
_dl_catch_error. Returns zero for success, nonzero for failure; and
|
|
||||||
arranges for `dlerror' to return the error details.
|
|
||||||
ARGS is passed as argument to OPERATE. */
|
|
||||||
extern int _dlerror_run (void (*operate) (void *), void *args)
|
|
||||||
internal_function;
|
|
||||||
|
|
||||||
#endif
|
/* Open the shared object FILE and map it in; return a handle that can be
|
||||||
|
passed to `dlsym' to get symbol values from it. */
|
||||||
|
extern void *dlopen (__const char *__file, int __mode) __THROW;
|
||||||
|
|
||||||
|
/* Unmap and close a shared object opened by `dlopen'.
|
||||||
|
The handle cannot be used again after calling `dlclose'. */
|
||||||
|
extern int dlclose (void *__handle) __THROW;
|
||||||
|
|
||||||
|
/* Find the run-time address in the shared object HANDLE refers to
|
||||||
|
of the symbol called NAME. */
|
||||||
|
extern void *dlsym (void *__restrict __handle,
|
||||||
|
__const char *__restrict __name) __THROW;
|
||||||
|
|
||||||
|
/* Find the run-time address in the shared object HANDLE refers to
|
||||||
|
of the symbol called NAME with VERSION. */
|
||||||
|
extern void *dlvsym (void *__restrict __handle,
|
||||||
|
__const char *__restrict __name,
|
||||||
|
__const char *__restrict __version) __THROW;
|
||||||
|
|
||||||
|
/* When any of the above functions fails, call this function
|
||||||
|
to return a string describing the error. Each call resets
|
||||||
|
the error string so that a following call returns null. */
|
||||||
|
extern char *dlerror (void) __THROW;
|
||||||
|
|
||||||
|
|
||||||
|
/* Structure containing information about object searched using
|
||||||
|
`dladdr'. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
__const char *dli_fname; /* File name of defining object. */
|
||||||
|
void *dli_fbase; /* Load address of that object. */
|
||||||
|
__const char *dli_sname; /* Name of nearest symbol. */
|
||||||
|
void *dli_saddr; /* Exact value of nearest symbol. */
|
||||||
|
} Dl_info;
|
||||||
|
|
||||||
|
/* Fill in *INFO with the following information about ADDRESS.
|
||||||
|
Returns 0 iff no shared object's segments contain that address. */
|
||||||
|
extern int dladdr (__const void *__address, Dl_info *__info) __THROW;
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif /* dlfcn.h */
|
||||||
|
Loading…
Reference in New Issue
Block a user