git: 6a4450470593 - stable/15 - rtld: allow arches to initialize/finalize objects
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 12 Sep 2026 00:28:04 UTC
The branch stable/15 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=6a4450470593578194a9c7ab5ab14b2b1df1f2e3
commit 6a4450470593578194a9c7ab5ab14b2b1df1f2e3
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-08-26 11:53:20 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-09-11 06:59:52 +0000
rtld: allow arches to initialize/finalize objects
(cherry picked from commit 6a69d28ee07534c8c0eac328dbbc2529dfceb7fd)
---
libexec/rtld-elf/aarch64/rtld_machdep.h | 3 +++
libexec/rtld-elf/amd64/rtld_machdep.h | 3 +++
libexec/rtld-elf/arm/rtld_machdep.h | 3 +++
libexec/rtld-elf/i386/rtld_machdep.h | 3 +++
libexec/rtld-elf/map_object.c | 2 ++
libexec/rtld-elf/powerpc/rtld_machdep.h | 3 +++
libexec/rtld-elf/powerpc64/rtld_machdep.h | 3 +++
libexec/rtld-elf/riscv/rtld_machdep.h | 3 +++
8 files changed, 23 insertions(+)
diff --git a/libexec/rtld-elf/aarch64/rtld_machdep.h b/libexec/rtld-elf/aarch64/rtld_machdep.h
index 4b5ad523ee87..4edf374617af 100644
--- a/libexec/rtld-elf/aarch64/rtld_machdep.h
+++ b/libexec/rtld-elf/aarch64/rtld_machdep.h
@@ -41,6 +41,9 @@ struct Struct_Obj_Entry;
#define MD_OBJ_ENTRY \
bool variant_pcs : 1; /* Object has a variant pcs function */
+#define MD_OBJ_ENTRY_INIT(obj)
+#define MD_OBJ_ENTRY_FINI(obj)
+
/* Return the address of the .dynamic section in the dynamic linker. */
#define rtld_dynamic(obj) \
({ \
diff --git a/libexec/rtld-elf/amd64/rtld_machdep.h b/libexec/rtld-elf/amd64/rtld_machdep.h
index 2ee63d566bed..53a3cd29f967 100644
--- a/libexec/rtld-elf/amd64/rtld_machdep.h
+++ b/libexec/rtld-elf/amd64/rtld_machdep.h
@@ -37,6 +37,9 @@ struct Struct_Obj_Entry;
#define MD_OBJ_ENTRY
+#define MD_OBJ_ENTRY_INIT(obj)
+#define MD_OBJ_ENTRY_FINI(obj)
+
/* Return the address of the .dynamic section in the dynamic linker. */
Elf_Dyn *rtld_dynamic_addr(void);
#define rtld_dynamic(obj) rtld_dynamic_addr()
diff --git a/libexec/rtld-elf/arm/rtld_machdep.h b/libexec/rtld-elf/arm/rtld_machdep.h
index 88fa18a0c07a..c46b75fca078 100644
--- a/libexec/rtld-elf/arm/rtld_machdep.h
+++ b/libexec/rtld-elf/arm/rtld_machdep.h
@@ -38,6 +38,9 @@ struct Struct_Obj_Entry;
#define MD_OBJ_ENTRY
+#define MD_OBJ_ENTRY_INIT(obj)
+#define MD_OBJ_ENTRY_FINI(obj)
+
/* Return the address of the .dynamic section in the dynamic linker. */
#define rtld_dynamic(obj) (&_DYNAMIC)
diff --git a/libexec/rtld-elf/i386/rtld_machdep.h b/libexec/rtld-elf/i386/rtld_machdep.h
index 079991f913d6..7eb7b1cdfb77 100644
--- a/libexec/rtld-elf/i386/rtld_machdep.h
+++ b/libexec/rtld-elf/i386/rtld_machdep.h
@@ -37,6 +37,9 @@ struct Struct_Obj_Entry;
#define MD_OBJ_ENTRY
+#define MD_OBJ_ENTRY_INIT(obj)
+#define MD_OBJ_ENTRY_FINI(obj)
+
/* Return the address of the .dynamic section in the dynamic linker. */
#define rtld_dynamic(obj) \
((const Elf_Dyn *)((obj)->relocbase + (Elf_Addr)&_DYNAMIC))
diff --git a/libexec/rtld-elf/map_object.c b/libexec/rtld-elf/map_object.c
index 0b4e847f407e..7135ba1843fc 100644
--- a/libexec/rtld-elf/map_object.c
+++ b/libexec/rtld-elf/map_object.c
@@ -477,6 +477,7 @@ obj_free(Obj_Entry *obj)
free(obj->path);
if (obj->phdr_alloc)
free(__DECONST(void *, obj->phdr));
+ MD_OBJ_ENTRY_FINI(obj);
free(obj);
}
@@ -489,6 +490,7 @@ obj_new(void)
STAILQ_INIT(&obj->dldags);
STAILQ_INIT(&obj->dagmembers);
STAILQ_INIT(&obj->names);
+ MD_OBJ_ENTRY_INIT(obj);
return (obj);
}
diff --git a/libexec/rtld-elf/powerpc/rtld_machdep.h b/libexec/rtld-elf/powerpc/rtld_machdep.h
index de6a894ac1f5..69a833575a7c 100644
--- a/libexec/rtld-elf/powerpc/rtld_machdep.h
+++ b/libexec/rtld-elf/powerpc/rtld_machdep.h
@@ -38,6 +38,9 @@ struct Struct_Obj_Entry;
#define MD_OBJ_ENTRY \
Elf_Addr *gotptr; /* GOT pointer (secure-plt only) */
+#define MD_OBJ_ENTRY_INIT(obj)
+#define MD_OBJ_ENTRY_FINI(obj)
+
/* Return the address of the .dynamic section in the dynamic linker. */
#define rtld_dynamic(obj) (&_DYNAMIC)
diff --git a/libexec/rtld-elf/powerpc64/rtld_machdep.h b/libexec/rtld-elf/powerpc64/rtld_machdep.h
index 06eb6d884101..76091895bb5d 100644
--- a/libexec/rtld-elf/powerpc64/rtld_machdep.h
+++ b/libexec/rtld-elf/powerpc64/rtld_machdep.h
@@ -38,6 +38,9 @@ struct Struct_Obj_Entry;
#define MD_OBJ_ENTRY \
Elf_Addr glink; /* GLINK PLT call stub section */
+#define MD_OBJ_ENTRY_INIT(obj)
+#define MD_OBJ_ENTRY_FINI(obj)
+
/* Return the address of the .dynamic section in the dynamic linker. */
#define rtld_dynamic(obj) (&_DYNAMIC)
diff --git a/libexec/rtld-elf/riscv/rtld_machdep.h b/libexec/rtld-elf/riscv/rtld_machdep.h
index 1f4fe2e928fe..acb6fa4835db 100644
--- a/libexec/rtld-elf/riscv/rtld_machdep.h
+++ b/libexec/rtld-elf/riscv/rtld_machdep.h
@@ -44,6 +44,9 @@ struct Struct_Obj_Entry;
#define MD_OBJ_ENTRY
+#define MD_OBJ_ENTRY_INIT(obj)
+#define MD_OBJ_ENTRY_FINI(obj)
+
uint64_t set_gp(struct Struct_Obj_Entry *obj);
/* Return the address of the .dynamic section in the dynamic linker. */