aboutsummaryrefslogtreecommitdiff
path: root/libexec
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2021-04-11 08:12:48 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2021-04-11 08:16:13 +0000
commit9b33518ada2ebda727ca3c7979cdcdb30716f737 (patch)
treeec0902088a7afe6ea2ead0efb7bf648ffb077d1b /libexec
parent1a4e959eb34ae03a96f6d0dea68b6a6a88ac4462 (diff)
downloadsrc-9b33518ada2ebda727ca3c7979cdcdb30716f737.tar.gz
src-9b33518ada2ebda727ca3c7979cdcdb30716f737.zip
Diffstat (limited to 'libexec')
-rw-r--r--libexec/rtld-elf/rtld_lock.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/libexec/rtld-elf/rtld_lock.h b/libexec/rtld-elf/rtld_lock.h
index fdbdc9917075..c88b558b72b8 100644
--- a/libexec/rtld-elf/rtld_lock.h
+++ b/libexec/rtld-elf/rtld_lock.h
@@ -35,9 +35,20 @@
#define MAX_RTLD_LOCKS 8
+/*
+ * This structure is part of the ABI between rtld and threading
+ * libraries, like libthr and even libc_r. Its layout is fixed and
+ * can be changed only by appending new fields at the end, with the
+ * bump of RTLI_VERSION.
+ */
struct RtldLockInfo
{
+ /*
+ * Valid if the object calling _rtld_thread_init() exported
+ * symbol _pli_rtli_version. Otherwise assume RTLI_VERSION_ONE.
+ */
unsigned int rtli_version;
+
void *(*lock_create)(void);
void (*lock_destroy)(void *);
void (*rlock_acquire)(void *);
@@ -46,6 +57,8 @@ struct RtldLockInfo
int (*thread_set_flag)(int);
int (*thread_clr_flag)(int);
void (*at_fork)(void);
+
+ /* Version 2 fields */
char *(*dlerror_loc)(void);
int *(*dlerror_seen)(void);
int dlerror_loc_sz;