
D front-end changes: - Import latest fixes to mainline. D runtime changes: - Import latest fixes to mainline. Phobos changes: - Import latest fixes to mainline. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 4c18eed967. * d-diagnostic.cc (verrorReport): Update for new front-end interface. (verrorReportSupplemental): Likewise. * d-lang.cc (d_init_options): Likewise. (d_handle_option): Likewise. (d_post_options): Likewise. (d_parse_file): Likewise. * decl.cc (get_symbol_decl): Likewise. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime 4c18eed967. * src/MERGE: Merge upstream phobos d945686a4.
224 lines
5.6 KiB
D
224 lines
5.6 KiB
D
/**
|
|
* D header file for GNU/Linux
|
|
*
|
|
* $(LINK2 http://sourceware.org/git/?p=glibc.git;a=blob;f=dlfcn/dlfcn.h, glibc dlfcn/dlfcn.h)
|
|
*/
|
|
module core.sys.linux.dlfcn;
|
|
|
|
version (linux):
|
|
extern (C):
|
|
nothrow:
|
|
@nogc:
|
|
|
|
version (ARM) version = ARM_Any;
|
|
version (AArch64) version = ARM_Any;
|
|
version (HPPA) version = HPPA_Any;
|
|
version (MIPS32) version = MIPS_Any;
|
|
version (MIPS64) version = MIPS_Any;
|
|
version (PPC) version = PPC_Any;
|
|
version (PPC64) version = PPC_Any;
|
|
version (RISCV32) version = RISCV_Any;
|
|
version (RISCV64) version = RISCV_Any;
|
|
version (S390) version = IBMZ_Any;
|
|
version (SPARC) version = SPARC_Any;
|
|
version (SPARC64) version = SPARC_Any;
|
|
version (SystemZ) version = IBMZ_Any;
|
|
version (X86) version = X86_Any;
|
|
version (X86_64) version = X86_Any;
|
|
|
|
public import core.sys.posix.dlfcn;
|
|
import core.sys.linux.config;
|
|
|
|
// <bits/dlfcn.h>
|
|
version (X86_Any)
|
|
{
|
|
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
|
|
static if (_GNU_SOURCE)
|
|
{
|
|
RT DL_CALL_FCT(RT, Args...)(RT function(Args) fctp, auto ref Args args)
|
|
{
|
|
_dl_mcount_wrapper_check(cast(void*)fctp);
|
|
return fctp(args);
|
|
}
|
|
|
|
void _dl_mcount_wrapper_check(void* __selfpc);
|
|
}
|
|
}
|
|
else version (HPPA_Any)
|
|
{
|
|
// http://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/hppa/bits/dlfcn.h
|
|
static if (_GNU_SOURCE)
|
|
{
|
|
RT DL_CALL_FCT(RT, Args...)(RT function(Args) fctp, auto ref Args args)
|
|
{
|
|
_dl_mcount_wrapper_check(cast(void*)fctp);
|
|
return fctp(args);
|
|
}
|
|
|
|
void _dl_mcount_wrapper_check(void* __selfpc);
|
|
}
|
|
}
|
|
else version (MIPS_Any)
|
|
{
|
|
// http://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/mips/bits/dlfcn.h
|
|
static if (_GNU_SOURCE)
|
|
{
|
|
RT DL_CALL_FCT(RT, Args...)(RT function(Args) fctp, auto ref Args args)
|
|
{
|
|
_dl_mcount_wrapper_check(cast(void*)fctp);
|
|
return fctp(args);
|
|
}
|
|
|
|
void _dl_mcount_wrapper_check(void* __selfpc);
|
|
}
|
|
}
|
|
else version (PPC_Any)
|
|
{
|
|
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
|
|
static if (_GNU_SOURCE)
|
|
{
|
|
RT DL_CALL_FCT(RT, Args...)(RT function(Args) fctp, auto ref Args args)
|
|
{
|
|
_dl_mcount_wrapper_check(cast(void*)fctp);
|
|
return fctp(args);
|
|
}
|
|
|
|
void _dl_mcount_wrapper_check(void* __selfpc);
|
|
}
|
|
}
|
|
else version (ARM_Any)
|
|
{
|
|
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
|
|
static if (_GNU_SOURCE)
|
|
{
|
|
RT DL_CALL_FCT(RT, Args...)(RT function(Args) fctp, auto ref Args args)
|
|
{
|
|
_dl_mcount_wrapper_check(cast(void*)fctp);
|
|
return fctp(args);
|
|
}
|
|
|
|
void _dl_mcount_wrapper_check(void* __selfpc);
|
|
}
|
|
}
|
|
else version (RISCV_Any)
|
|
{
|
|
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
|
|
static if (_GNU_SOURCE)
|
|
{
|
|
RT DL_CALL_FCT(RT, Args...)(RT function(Args) fctp, auto ref Args args)
|
|
{
|
|
_dl_mcount_wrapper_check(cast(void*)fctp);
|
|
return fctp(args);
|
|
}
|
|
|
|
void _dl_mcount_wrapper_check(void* __selfpc);
|
|
}
|
|
}
|
|
else version (SPARC_Any)
|
|
{
|
|
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
|
|
static if (_GNU_SOURCE)
|
|
{
|
|
RT DL_CALL_FCT(RT, Args...)(RT function(Args) fctp, auto ref Args args)
|
|
{
|
|
_dl_mcount_wrapper_check(cast(void*)fctp);
|
|
return fctp(args);
|
|
}
|
|
|
|
void _dl_mcount_wrapper_check(void* __selfpc);
|
|
}
|
|
}
|
|
else version (IBMZ_Any)
|
|
{
|
|
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
|
|
static if (_GNU_SOURCE)
|
|
{
|
|
RT DL_CALL_FCT(RT, Args...)(RT function(Args) fctp, auto ref Args args)
|
|
{
|
|
_dl_mcount_wrapper_check(cast(void*)fctp);
|
|
return fctp(args);
|
|
}
|
|
|
|
void _dl_mcount_wrapper_check(void* __selfpc);
|
|
}
|
|
}
|
|
else version (LoongArch64)
|
|
{
|
|
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/dlfcn.h
|
|
static if (_GNU_SOURCE)
|
|
{
|
|
RT DL_CALL_FCT(RT, Args...)(RT function(Args) fctp, auto ref Args args)
|
|
{
|
|
_dl_mcount_wrapper_check(cast(void*)fctp);
|
|
return fctp(args);
|
|
}
|
|
|
|
void _dl_mcount_wrapper_check(void* __selfpc);
|
|
}
|
|
}
|
|
else
|
|
static assert(0, "unimplemented");
|
|
|
|
// <bits/dlfcn.h>
|
|
|
|
static if (_GNU_SOURCE)
|
|
{
|
|
enum RTLD_NEXT = cast(void *)-1L;
|
|
enum RTLD_DEFAULT = cast(void *)0;
|
|
alias c_long Lmid_t;
|
|
enum LM_ID_BASE = 0;
|
|
enum LM_ID_NEWLM = -1;
|
|
}
|
|
|
|
// void* dlopen(const scope char* __file, int __mode); // POSIX
|
|
// int dlclose(void* __handle); // POSIX
|
|
// void* dlsym(void* __handle, const scope char* __name); // POSIX
|
|
|
|
static if (_GNU_SOURCE)
|
|
{
|
|
void* dlmopen(Lmid_t __nsid, const scope char* __file, int __mode);
|
|
void* dlvsym(void* __handle, const scope char* __name, const scope char* __version);
|
|
}
|
|
|
|
// char* dlerror(); // POSIX
|
|
|
|
static if (_GNU_SOURCE)
|
|
{
|
|
int dladdr1(void* __address, Dl_info* __info, void** __extra_info, int __flags);
|
|
|
|
enum
|
|
{
|
|
RTLD_DL_SYMENT = 1,
|
|
RTLD_DL_LINKMAP = 2,
|
|
}
|
|
|
|
int dlinfo(void* __handle, int __request, void* __arg);
|
|
|
|
enum
|
|
{
|
|
RTLD_DI_LMID = 1,
|
|
RTLD_DI_LINKMAP = 2,
|
|
RTLD_DI_CONFIGADDR = 3,
|
|
RTLD_DI_SERINFO = 4,
|
|
RTLD_DI_SERINFOSIZE = 5,
|
|
RTLD_DI_ORIGIN = 6,
|
|
RTLD_DI_PROFILENAME = 7,
|
|
RTLD_DI_PROFILEOUT = 8,
|
|
RTLD_DI_TLS_MODID = 9,
|
|
RTLD_DI_TLS_DATA = 10,
|
|
RTLD_DI_MAX = 10,
|
|
}
|
|
|
|
struct Dl_serpath
|
|
{
|
|
char* dls_name;
|
|
uint dls_flags;
|
|
}
|
|
|
|
struct Dl_serinfo
|
|
{
|
|
size_t dls_size;
|
|
uint dls_cnt;
|
|
Dl_serpath[1] dls_serpath;
|
|
}
|
|
}
|