Wolfgang Thallergcc16 merge934c3885 months agoHistory
204 lines · 5.3 KB · D
RawDownload
/** * D header file for GNU/Linux * * $(LINK2 http://sourceware.org/git/?p=glibc.git;a=blob;f=elf/link.h, glibc elf/link.h) */module core.sys.linux.link; version (linux):extern (C):nothrow: 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; import core.stdc.stdint : uintptr_t, uint32_t, uint64_t;import core.sys.linux.config : __WORDSIZE;import core.sys.linux.dlfcn : Lmid_t;import core.sys.linux.elf; // <bits/elfclass.h>version (Android){    alias __ELF_NATIVE_CLASS = __WORDSIZE;    version (D_LP64)        alias Elf_Symndx = uint64_t;    else        alias Elf_Symndx = uint32_t;}else version (X86_Any){    // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h    alias __ELF_NATIVE_CLASS = __WORDSIZE;    alias Elf_Symndx = uint32_t;}else version (HPPA_Any){    // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h    alias __ELF_NATIVE_CLASS = __WORDSIZE;    alias Elf_Symndx = uint32_t;}else version (MIPS_Any){    // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h    alias __ELF_NATIVE_CLASS = __WORDSIZE;    alias Elf_Symndx = uint32_t;}else version (PPC_Any){    // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h    alias __ELF_NATIVE_CLASS = __WORDSIZE;    alias Elf_Symndx = uint32_t;}else version (ARM_Any){    // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h    alias __ELF_NATIVE_CLASS = __WORDSIZE;    alias Elf_Symndx = uint32_t;}else version (RISCV_Any){    // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h    alias __ELF_NATIVE_CLASS = __WORDSIZE;    alias Elf_Symndx = uint32_t;}else version (SPARC_Any){    // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h    alias __ELF_NATIVE_CLASS = __WORDSIZE;    alias Elf_Symndx = uint32_t;}else version (IBMZ_Any){    // http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/s390/bits/elfclass.h    alias __ELF_NATIVE_CLASS = __WORDSIZE;    static if (__WORDSIZE == 64)        alias Elf_Symndx = uint64_t;    else        alias Elf_Symndx = uint32_t;}else version (LoongArch64){    // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h    alias __ELF_NATIVE_CLASS = __WORDSIZE;    alias Elf_Symndx = uint32_t;}else    static assert(0, "unimplemented");// <bits/elfclass.h> template ElfW(string type){    mixin("alias ElfW = Elf"~__ELF_NATIVE_CLASS.stringof~"_"~type~";");} enum{    RT_CONSISTENT,    RT_ADD,    RT_DELETE,} struct r_debug{    int r_version;    link_map* r_map;    ElfW!"Addr" r_brk;    typeof(RT_CONSISTENT) r_state;    ElfW!"Addr" r_ldbase;} extern r_debug _r_debug;extern ElfW!"Dyn"* _DYNAMIC; struct link_map{    ElfW!"Addr" l_addr;    char* l_name;    ElfW!"Dyn"* l_ld;    link_map* l_next, l_prev;} enum{    LA_ACT_CONSISTENT,    LA_ACT_ADD,    LA_ACT_DELETE,} enum{    LA_SER_ORIG = 0x01,    LA_SER_LIBPATH = 0x02,    LA_SER_RUNPATH = 0x04,    LA_SER_CONFIG = 0x08,    LA_SER_DEFAULT = 0x40,    LA_SER_SECURE = 0x80,}  enum{    LA_FLG_BINDTO = 0x01,    LA_FLG_BINDFROM = 0x02,}  enum{    LA_SYMB_NOPLTENTER = 0x01,    LA_SYMB_NOPLTEXIT = 0x02,    LA_SYMB_STRUCTCALL = 0x04,    LA_SYMB_DLSYM = 0x08,    LA_SYMB_ALTVALUE = 0x10,} struct dl_phdr_info{    ElfW!"Addr" dlpi_addr;    const(char)* dlpi_name;    const(ElfW!"Phdr")* dlpi_phdr;    ElfW!"Half" dlpi_phnum;     // check the SIZE argument of the dl_iterate_phdr callback whether    // the following members are available    ulong dlpi_adds;    ulong dlpi_subs;     size_t dlpi_tls_modid;    void *dlpi_tls_data;} private alias dl_iterate_phdr_cb = extern(C) int function(dl_phdr_info*, size_t, void *);private alias dl_iterate_phdr_cb_ngc = extern(C) int function(dl_phdr_info*, size_t, void *) @nogc;extern int dl_iterate_phdr(dl_iterate_phdr_cb __callback, void*__data);extern int dl_iterate_phdr(dl_iterate_phdr_cb_ngc __callback, void*__data) @nogc; // ld.so auditing interfaces prototypes have to be defined by the auditing DSO.extern uint la_version(uint __version);extern void la_activity(uintptr_t *__cookie, uint __flag);extern char* la_objsearch(const(char)* __name, uintptr_t* __cookie,                          uint __flag);extern uint la_objopen(link_map* __map, Lmid_t __lmid,                       uintptr_t* __cookie);extern void la_preinit(uintptr_t* __cookie);extern uintptr_t la_symbind32(Elf32_Sym* __sym, uint __ndx,                              uintptr_t* __refcook, uintptr_t* __defcook,                              uint *__flags, const(char)* __symname);extern uintptr_t la_symbind64(Elf64_Sym* __sym, uint __ndx,                              uintptr_t* __refcook, uintptr_t* __defcook,                              uint* __flags, const(char)* __symname);extern uint la_objclose(uintptr_t *__cookie);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t