Blame dlfcn/dlfcn.h

Packit Service 82fcde
/* User functions for run-time dynamic loading.
Packit Service 82fcde
   Copyright (C) 1995-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 82fcde
   modify it under the terms of the GNU Lesser General Public
Packit Service 82fcde
   License as published by the Free Software Foundation; either
Packit Service 82fcde
   version 2.1 of the License, or (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 82fcde
   Lesser General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public
Packit Service 82fcde
   License along with the GNU C Library; if not, see
Packit Service 82fcde
   <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#ifndef	_DLFCN_H
Packit Service 82fcde
#define	_DLFCN_H 1
Packit Service 82fcde
Packit Service 82fcde
#include <features.h>
Packit Service 82fcde
#define __need_size_t
Packit Service 82fcde
#include <stddef.h>
Packit Service 82fcde
Packit Service 82fcde
/* Collect various system dependent definitions and declarations.  */
Packit Service 82fcde
#include <bits/dlfcn.h>
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_GNU
Packit Service 82fcde
/* If the first argument of `dlsym' or `dlvsym' is set to RTLD_NEXT
Packit Service 82fcde
   the run-time address of the symbol called NAME in the next shared
Packit Service 82fcde
   object is returned.  The "next" relation is defined by the order
Packit Service 82fcde
   the shared objects were loaded.  */
Packit Service 82fcde
# define RTLD_NEXT	((void *) -1l)
Packit Service 82fcde
Packit Service 82fcde
/* If the first argument to `dlsym' or `dlvsym' is set to RTLD_DEFAULT
Packit Service 82fcde
   the run-time address of the symbol called NAME in the global scope
Packit Service 82fcde
   is returned.  */
Packit Service 82fcde
# define RTLD_DEFAULT	((void *) 0)
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Type for namespace indeces.  */
Packit Service 82fcde
typedef long int Lmid_t;
Packit Service 82fcde
Packit Service 82fcde
/* Special namespace ID values.  */
Packit Service 82fcde
# define LM_ID_BASE	0	/* Initial namespace.  */
Packit Service 82fcde
# define LM_ID_NEWLM	-1	/* For dlmopen: request new namespace.  */
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
__BEGIN_DECLS
Packit Service 82fcde
Packit Service 82fcde
/* Open the shared object FILE and map it in; return a handle that can be
Packit Service 82fcde
   passed to `dlsym' to get symbol values from it.  */
Packit Service 82fcde
extern void *dlopen (const char *__file, int __mode) __THROWNL;
Packit Service 82fcde
Packit Service 82fcde
/* Unmap and close a shared object opened by `dlopen'.
Packit Service 82fcde
   The handle cannot be used again after calling `dlclose'.  */
Packit Service 82fcde
extern int dlclose (void *__handle) __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Find the run-time address in the shared object HANDLE refers to
Packit Service 82fcde
   of the symbol called NAME.  */
Packit Service 82fcde
extern void *dlsym (void *__restrict __handle,
Packit Service 82fcde
		    const char *__restrict __name) __THROW __nonnull ((2));
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_GNU
Packit Service 82fcde
/* Like `dlopen', but request object to be allocated in a new namespace.  */
Packit Service 82fcde
extern void *dlmopen (Lmid_t __nsid, const char *__file, int __mode) __THROWNL;
Packit Service 82fcde
Packit Service 82fcde
/* Find the run-time address in the shared object HANDLE refers to
Packit Service 82fcde
   of the symbol called NAME with VERSION.  */
Packit Service 82fcde
extern void *dlvsym (void *__restrict __handle,
Packit Service 82fcde
		     const char *__restrict __name,
Packit Service 82fcde
		     const char *__restrict __version)
Packit Service 82fcde
     __THROW __nonnull ((2, 3));
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* When any of the above functions fails, call this function
Packit Service 82fcde
   to return a string describing the error.  Each call resets
Packit Service 82fcde
   the error string so that a following call returns null.  */
Packit Service 82fcde
extern char *dlerror (void) __THROW;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_GNU
Packit Service 82fcde
/* Structure containing information about object searched using
Packit Service 82fcde
   `dladdr'.  */
Packit Service 82fcde
typedef struct
Packit Service 82fcde
{
Packit Service 82fcde
  const char *dli_fname;	/* File name of defining object.  */
Packit Service 82fcde
  void *dli_fbase;		/* Load address of that object.  */
Packit Service 82fcde
  const char *dli_sname;	/* Name of nearest symbol.  */
Packit Service 82fcde
  void *dli_saddr;		/* Exact value of nearest symbol.  */
Packit Service 82fcde
} Dl_info;
Packit Service 82fcde
Packit Service 82fcde
/* Fill in *INFO with the following information about ADDRESS.
Packit Service 82fcde
   Returns 0 iff no shared object's segments contain that address.  */
Packit Service 82fcde
extern int dladdr (const void *__address, Dl_info *__info)
Packit Service 82fcde
     __THROW __nonnull ((2));
Packit Service 82fcde
Packit Service 82fcde
/* Same as `dladdr', but additionally sets *EXTRA_INFO according to FLAGS.  */
Packit Service 82fcde
extern int dladdr1 (const void *__address, Dl_info *__info,
Packit Service 82fcde
		    void **__extra_info, int __flags) __THROW __nonnull ((2));
Packit Service 82fcde
Packit Service 82fcde
/* These are the possible values for the FLAGS argument to `dladdr1'.
Packit Service 82fcde
   This indicates what extra information is stored at *EXTRA_INFO.
Packit Service 82fcde
   It may also be zero, in which case the EXTRA_INFO argument is not used.  */
Packit Service 82fcde
enum
Packit Service 82fcde
  {
Packit Service 82fcde
    /* Matching symbol table entry (const ElfNN_Sym *).  */
Packit Service 82fcde
    RTLD_DL_SYMENT = 1,
Packit Service 82fcde
Packit Service 82fcde
    /* The object containing the address (struct link_map *).  */
Packit Service 82fcde
    RTLD_DL_LINKMAP = 2
Packit Service 82fcde
  };
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Get information about the shared object HANDLE refers to.
Packit Service 82fcde
   REQUEST is from among the values below, and determines the use of ARG.
Packit Service 82fcde
Packit Service 82fcde
   On success, returns zero.  On failure, returns -1 and records an error
Packit Service 82fcde
   message to be fetched with `dlerror'.  */
Packit Service 82fcde
extern int dlinfo (void *__restrict __handle,
Packit Service 82fcde
		   int __request, void *__restrict __arg)
Packit Service 82fcde
     __THROW __nonnull ((1, 3));
Packit Service 82fcde
Packit Service 82fcde
/* These are the possible values for the REQUEST argument to `dlinfo'.  */
Packit Service 82fcde
enum
Packit Service 82fcde
  {
Packit Service 82fcde
    /* Treat ARG as `lmid_t *'; store namespace ID for HANDLE there.  */
Packit Service 82fcde
    RTLD_DI_LMID = 1,
Packit Service 82fcde
Packit Service 82fcde
    /* Treat ARG as `struct link_map **';
Packit Service 82fcde
       store the `struct link_map *' for HANDLE there.  */
Packit Service 82fcde
    RTLD_DI_LINKMAP = 2,
Packit Service 82fcde
Packit Service 82fcde
    RTLD_DI_CONFIGADDR = 3,	/* Unsupported, defined by Solaris.  */
Packit Service 82fcde
Packit Service 82fcde
    /* Treat ARG as `Dl_serinfo *' (see below), and fill in to describe the
Packit Service 82fcde
       directories that will be searched for dependencies of this object.
Packit Service 82fcde
       RTLD_DI_SERINFOSIZE fills in just the `dls_cnt' and `dls_size'
Packit Service 82fcde
       entries to indicate the size of the buffer that must be passed to
Packit Service 82fcde
       RTLD_DI_SERINFO to fill in the full information.  */
Packit Service 82fcde
    RTLD_DI_SERINFO = 4,
Packit Service 82fcde
    RTLD_DI_SERINFOSIZE = 5,
Packit Service 82fcde
Packit Service 82fcde
    /* Treat ARG as `char *', and store there the directory name used to
Packit Service 82fcde
       expand $ORIGIN in this shared object's dependency file names.  */
Packit Service 82fcde
    RTLD_DI_ORIGIN = 6,
Packit Service 82fcde
Packit Service 82fcde
    RTLD_DI_PROFILENAME = 7,	/* Unsupported, defined by Solaris.  */
Packit Service 82fcde
    RTLD_DI_PROFILEOUT = 8,	/* Unsupported, defined by Solaris.  */
Packit Service 82fcde
Packit Service 82fcde
    /* Treat ARG as `size_t *', and store there the TLS module ID
Packit Service 82fcde
       of this object's PT_TLS segment, as used in TLS relocations;
Packit Service 82fcde
       store zero if this object does not define a PT_TLS segment.  */
Packit Service 82fcde
    RTLD_DI_TLS_MODID = 9,
Packit Service 82fcde
Packit Service 82fcde
    /* Treat ARG as `void **', and store there a pointer to the calling
Packit Service 82fcde
       thread's TLS block corresponding to this object's PT_TLS segment.
Packit Service 82fcde
       Store a null pointer if this object does not define a PT_TLS
Packit Service 82fcde
       segment, or if the calling thread has not allocated a block for it.  */
Packit Service 82fcde
    RTLD_DI_TLS_DATA = 10,
Packit Service 82fcde
Packit Service 82fcde
    RTLD_DI_MAX = 10
Packit Service 82fcde
  };
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* This is the type of elements in `Dl_serinfo', below.
Packit Service 82fcde
   The `dls_name' member points to space in the buffer passed to `dlinfo'.  */
Packit Service 82fcde
typedef struct
Packit Service 82fcde
{
Packit Service 82fcde
  char *dls_name;		/* Name of library search path directory.  */
Packit Service 82fcde
  unsigned int dls_flags;	/* Indicates where this directory came from. */
Packit Service 82fcde
} Dl_serpath;
Packit Service 82fcde
Packit Service 82fcde
/* This is the structure that must be passed (by reference) to `dlinfo' for
Packit Service 82fcde
   the RTLD_DI_SERINFO and RTLD_DI_SERINFOSIZE requests.  */
Packit Service 82fcde
typedef struct
Packit Service 82fcde
{
Packit Service 82fcde
  size_t dls_size;		/* Size in bytes of the whole buffer.  */
Packit Service 82fcde
  unsigned int dls_cnt;		/* Number of elements in `dls_serpath'.  */
Packit Service 82fcde
  Dl_serpath dls_serpath[1];	/* Actually longer, dls_cnt elements.  */
Packit Service 82fcde
} Dl_serinfo;
Packit Service 82fcde
#endif /* __USE_GNU */
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
__END_DECLS
Packit Service 82fcde
Packit Service 82fcde
#endif	/* dlfcn.h */