rtld: allow arches to initialize/finalize objects

Discussed with:	jrtc27
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D59269
This commit is contained in:
Konstantin Belousov committed 2026-09-06 01:00:09 +03:00
1 parent 7c73fdb618
commit 6a69d28ee0
8 files changed
+23

No files matched your search

+3
View File
@@ -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) \
({ \
+3
View File
@@ -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()
+3
View File
@@ -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)
+3
View File
@@ -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))
+2
View File
@@ -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);
}
+3
View File
@@ -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)
@@ -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)
+3
View File
@@ -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. */