This file is indexed.

/usr/lib/gcc/x86_64-linux-gnu/6/include/d/core/sys/freebsd/dlfcn.d is in libgphobos-6-dev 6.4.0-17ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/**
 * D header file for FreeBSD.
 *
 * Copyright: Copyright Martin Nowak 2012.
 * License:   $(WEB www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
 * Authors:   Martin Nowak
 */
module core.sys.freebsd.dlfcn;

public import core.sys.posix.dlfcn;

version (FreeBSD):
extern (C):
nothrow:

enum __BSD_VISIBLE = true;

/*
 * Modes and flags for dlopen().
 */
static assert(RTLD_LAZY   == 1);
static assert(RTLD_NOW    == 2);
enum RTLD_MODEMASK        =  0x3;
static assert(RTLD_GLOBAL == 0x100);
static assert(RTLD_LOCAL  == 0);
enum RTLD_TRACE           =  0x200;
enum RTLD_NODELETE        =  0x01000;
enum RTLD_NOLOAD          =  0x02000;

/*
 * Request arguments for dlinfo().
 */
enum RTLD_DI_LINKMAP     = 2;    /* Obtain link map. */
enum RTLD_DI_SERINFO     = 4;    /* Obtain search path info. */
enum RTLD_DI_SERINFOSIZE = 5;    /*  ... query for required space. */
enum RTLD_DI_ORIGIN      = 6;    /* Obtain object origin */
enum RTLD_DI_MAX         = RTLD_DI_ORIGIN;

/*
 * Special handle arguments for dlsym()/dlinfo().
 */
enum RTLD_NEXT    = cast(void *)-1;    /* Search subsequent objects. */
enum RTLD_DEFAULT = cast(void *)-2;    /* Use default search algorithm. */
enum RTLD_SELF    = cast(void *)-3;    /* Search the caller itself. */

static if (__BSD_VISIBLE)
{
    /*
     * Structure filled in by dladdr().
     */
    struct Dl_info {
        const(char)     *dli_fname;     /* Pathname of shared object. */
        void            *dli_fbase;     /* Base address of shared object. */
        const(char)     *dli_sname;     /* Name of nearest symbol. */
        void            *dli_saddr;     /* Address of nearest symbol. */
    };

    /*-
     * The actual type declared by this typedef is immaterial, provided that
     * it is a function pointer.  Its purpose is to provide a return type for
     * dlfunc() which can be cast to a function pointer type without depending
     * on behavior undefined by the C standard, which might trigger a compiler
     * diagnostic.  We intentionally declare a unique type signature to force
     * a diagnostic should the application not cast the return value of dlfunc()
     * appropriately.
     */
    struct __dlfunc_arg {
        int     __dlfunc_dummy;
    };

    alias void function(__dlfunc_arg) dlfunc_t;

    /*
     * Structures, returned by the RTLD_DI_SERINFO dlinfo() request.
     */
    struct Dl_serpath {
        char *          dls_name;       /* single search path entry */
        uint            dls_flags;      /* path information */
    };

    struct Dl_serinfo {
        size_t          dls_size;       /* total buffer size */
        uint            dls_cnt;        /* number of path entries */
        Dl_serpath[1]   dls_serpath;    /* there may be more than one */
    };
}

private template __externC(RT, P...)
{
    alias extern(C) RT function(P) nothrow @nogc __externC;
}

/* XSI functions first. */
static assert(is(typeof(&dlclose) == __externC!(int, void*)));
static assert(is(typeof(&dlerror) == __externC!(char*)));
static assert(is(typeof(&dlopen)  == __externC!(void*, const char*, int)));
static assert(is(typeof(&dlsym)   == __externC!(void*, void*, const char*)));

static if (__BSD_VISIBLE)
{
    void*    fdlopen(int, int);
    int      dladdr(const(void)*, Dl_info*);
    dlfunc_t dlfunc(void*, const(char)*);
    int      dlinfo(void*, int, void*);
    void     dllockinit(void* _context,
        void* function(void* _context) _lock_create,
        void  function(void* _lock)    _rlock_acquire,
        void  function(void* _lock)    _wlock_acquire,
        void  function(void* _lock)    _lock_release,
        void  function(void* _lock)    _lock_destroy,
        void  function(void* _context) _context_destroy);
    void*    dlvsym(void*, const(char)*, const(char)*);
}