mirror of
https://github.com/apache/nuttx.git
synced 2026-06-08 10:32:47 +08:00
Fix and improve dynamic loader
This patch fixes some issues found by Mark Stevens and improve the dynamic loader.
This commit is contained in:
committed by
Xiang Xiao
parent
4d285cb14d
commit
878384fef0
@@ -175,6 +175,9 @@
|
||||
#define SHT_REL 9
|
||||
#define SHT_SHLIB 10
|
||||
#define SHT_DYNSYM 11
|
||||
#define SHT_INIT_ARRAY 14
|
||||
#define SHT_FINI_ARRAY 15
|
||||
#define SHT_PREINIT_ARRAY 16
|
||||
#define SHT_LOPROC 0x70000000
|
||||
#define SHT_HIPROC 0x7fffffff
|
||||
#define SHT_LOUSER 0x80000000
|
||||
|
||||
@@ -40,6 +40,11 @@
|
||||
#define ELF32_ST_TYPE(i) ((i) & 0xf)
|
||||
#define ELF32_ST_INFO(b,t) (((b) << 4) | ((t) & 0xf))
|
||||
|
||||
/* Generic macro to abstract ELF32/ELF64 type/bind */
|
||||
|
||||
#define ELF_ST_TYPE(a) ELF32_ST_TYPE(a)
|
||||
#define ELF_ST_BIND(a) ELF32_ST_BIND(a)
|
||||
|
||||
/* Definitions for Elf32_Rel*::r_info */
|
||||
|
||||
#define ELF32_R_SYM(i) ((i) >> 8)
|
||||
|
||||
+14
-5
@@ -38,14 +38,23 @@
|
||||
|
||||
/* See ELF-64 Object File Format: Version 1.5 Draft 2 */
|
||||
|
||||
#define ELF64_ST_BIND(i) ((i) >> 4)
|
||||
#define ELF64_ST_TYPE(i) ((i) & 0xf)
|
||||
#define ELF64_ST_INFO(b,t) (((b) << 4) | ((t) & 0xf))
|
||||
|
||||
/* Generic macro to abstract ELF32/ELF64 type/bind */
|
||||
|
||||
#define ELF_ST_TYPE(a) ELF64_ST_TYPE(a)
|
||||
#define ELF_ST_BIND(a) ELF64_ST_BIND(a)
|
||||
|
||||
/* Definitions for Elf64_Rel*::r_info */
|
||||
|
||||
#define ELF64_R_SYM(i) ((i) >> 32)
|
||||
#define ELF64_R_TYPE(i) ((i) & 0xffffffffL)
|
||||
#define ELF64_R_INFO(s,t) (((s)<< 32) + ((t) & 0xffffffffL))
|
||||
#define ELF64_R_SYM(i) ((i) >> 32)
|
||||
#define ELF64_R_TYPE(i) ((i) & 0xffffffffL)
|
||||
#define ELF64_R_INFO(s,t) (((s)<< 32) + ((t) & 0xffffffffL))
|
||||
|
||||
#define ELF_R_SYM(i) ELF64_R_SYM(i)
|
||||
#define ELF_R_TYPE(i) ELF64_R_TYPE(i)
|
||||
#define ELF_R_SYM(i) ELF64_R_SYM(i)
|
||||
#define ELF_R_TYPE(i) ELF64_R_TYPE(i)
|
||||
|
||||
/****************************************************************************
|
||||
* Public Type Definitions
|
||||
|
||||
@@ -173,6 +173,8 @@ struct module_s
|
||||
|
||||
FAR struct module_s *dependencies[CONFIG_MODLIB_MAXDEPEND];
|
||||
#endif
|
||||
uintptr_t finiarr; /* .fini_array */
|
||||
uint16_t nfini; /* Number of entries in .fini_array */
|
||||
};
|
||||
|
||||
/* This struct provides a description of the currently loaded instantiation
|
||||
@@ -202,6 +204,12 @@ struct mod_loadinfo_s
|
||||
uint8_t *iobuffer; /* File I/O buffer */
|
||||
uintptr_t datasec; /* ET_DYN - data area start from Phdr */
|
||||
uintptr_t segpad; /* Padding between text and data */
|
||||
uintptr_t initarr; /* .init_array */
|
||||
uintptr_t finiarr; /* .fini_array */
|
||||
uintptr_t preiarr; /* .preinit_array */
|
||||
uint16_t ninit; /* Number of .init_array entries */
|
||||
uint16_t nfini; /* Number of .fini_array entries */
|
||||
uint16_t nprei; /* Number of .preinit_array entries */
|
||||
uint16_t symtabidx; /* Symbol table section index */
|
||||
uint16_t strtabidx; /* String table section index */
|
||||
uint16_t dsymtabidx; /* Dynamic symbol table section index */
|
||||
|
||||
Reference in New Issue
Block a user