Linux: dev: glibc: GL 定义

今天找到了这个GL的定义,记录一下,费了一些劲才找到的。(没有想到的是#和define之间还有空格,导致一直搜不到想要的结果。)是在sysdeps/generic/ldsodefs.h文件中。依赖于SHARED和rtld的定义。

#ifndef SHARED
# define EXTERN extern
# define GL(name) _##name
#else
# define EXTERN
# if IS_IN (rtld)
#  define GL(name) _rtld_local._##name
# else
#  define GL(name) _rtld_global._##name
# endif

从当前RHEL8上的dump,可用看到如下的定义:

(gdb) ptype _rtld_local
type = struct rtld_global {
    struct link_namespaces _dl_ns[16];
    size_t _dl_nns;
    __rtld_lock_recursive_t _dl_load_lock;
    __rtld_lock_recursive_t _dl_load_write_lock;
    __rtld_lock_recursive_t _dl_load_tls_lock;
    unsigned long long _dl_load_adds;
    struct link_map *_dl_initfirst;
    struct link_map *_dl_profile_map;
    unsigned long _dl_num_relocations;
    unsigned long _dl_num_cache_relocations;
    struct r_search_path_elem *_dl_all_dirs;
    struct link_map _dl_rtld_map;
    struct auditstate audit_data[16];
    void (*_dl_rtld_lock_recursive)(void *);
    void (*_dl_rtld_unlock_recursive)(void *);
    unsigned int _dl_x86_feature_1;
    struct dl_x86_feature_control _dl_x86_feature_control;
    int (*_dl_make_stack_executable_hook)(void **);
    Elf64_Word _dl_stack_flags;
    _Bool _dl_tls_dtv_gaps;
    size_t _dl_tls_max_dtv_idx;
    struct dtv_slotinfo_list *_dl_tls_dtv_slotinfo_list;
    size_t _dl_tls_static_nelem;
    size_t _dl_tls_static_size;
    size_t _dl_tls_static_used;
    size_t _dl_tls_static_align;
    size_t _dl_tls_static_optional;
    void *_dl_initial_dtv;
    size_t _dl_tls_generation;
    void (*_dl_init_static_tls)(struct link_map *);
    void (*_dl_wait_lookup_done)(void);
    struct dl_scope_free_list *_dl_scope_free_list;
}

(gdb) ptyp _rtld_local._dl_rtld_map.l_info
type = struct {
    Elf64_Sxword d_tag;
    union {
        Elf64_Xword d_val;
        Elf64_Addr d_ptr;
    } d_un;
} *[77]
(gdb) p _rtld_local
$4 = {
  _dl_ns = {{
      _ns_loaded = 0x0,
      _ns_nloaded = 0,
      _ns_main_searchlist = 0x0,

GL(dl_load_lock);所以这个的定义就是一个全局结构体里的一个成员。

你可能感兴趣的:(glibc,linux,glibc,GL)