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 81ed62d99a18..6852daf13d68 100644 --- a/libexec/rtld-elf/map_object.c +++ b/libexec/rtld-elf/map_object.c @@ -482,6 +482,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); } @@ -494,6 +495,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. */