mirror of
https://github.com/apache/nuttx.git
synced 2026-05-24 16:11:56 +08:00
Fix loading of ET_DYN type of shared objects
* build-globals.sh
- Only look in the nuttx for external symbols used when loading
dynamic shared objects
* include/elf64.h
- Correct the type of fields in the Elf64_Phdr structure
* libs/libc/dlfcn/lib_dlclose.c
- Distinguish between ET_DYN and other objects as the former
has both text and data in a single allocation to reserve
GOT offsets
* libs/libc/dlfcn/lib_dlopen.c
- Code formatting
* libs/libc/modlib/modlib_bind.c
- Distinguish between relocation entry sizes by section type
- Handle RELA style relocations
* libs/libc/modlib/modlib_globals.S
- Formatting fixes
- Symbols should not be weak - they exist or they don't
* include/nuttx/lib/modlib.h
- Add an inidcator to module_s to distinguish between ET_DYN and other
* libs/libc/modlib/modlib_load.c
- ET_DYN objects need to keep the relative displacement between the text
and data sections due to GOT references from the former to the latter.
This also implies that linking may require modification from the default
for the shared objects being produced. For example, default alignment may
mean nearly 64K of wasted space.
* libs/libc/modlib/modlib_unload.c
sched/module/mod_rmmod.c
- Distingusih between freeing of ET_DYN storage and other as the former
is a single allocation.
* libs/libc/modlib/mod_insmod.c
- Cater for ET_DYN objects having init and preinit sections
This commit is contained in:
committed by
Alan Carvalho de Assis
parent
f47991e34d
commit
5d7f2fdf16
+3
-3
@@ -142,9 +142,9 @@ typedef struct
|
||||
Elf64_Off p_offset; /* Offset in file */
|
||||
Elf64_Addr p_vaddr; /* Virtual address in memory */
|
||||
Elf64_Addr p_paddr; /* Reserved */
|
||||
Elf64_Word p_filesz; /* Size of segment in file */
|
||||
Elf64_Word p_memsz; /* Size of segment in memory */
|
||||
Elf64_Word p_align; /* Alignment of segment */
|
||||
Elf64_Xword p_filesz; /* Size of segment in file */
|
||||
Elf64_Xword p_memsz; /* Size of segment in memory */
|
||||
Elf64_Xword p_align; /* Alignment of segment */
|
||||
} Elf64_Phdr;
|
||||
|
||||
/* Figure 7. Format of a Note Section */
|
||||
|
||||
@@ -159,6 +159,7 @@ struct module_s
|
||||
struct mod_info_s modinfo; /* Module information */
|
||||
FAR void *textalloc; /* Allocated kernel text memory */
|
||||
FAR void *dataalloc; /* Allocated kernel memory */
|
||||
int dynamic; /* Module is a dynamic shared object */
|
||||
#if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_FS_PROCFS_EXCLUDE_MODULE)
|
||||
size_t textsize; /* Size of the kernel .text memory allocation */
|
||||
size_t datasize; /* Size of the kernel .bss/.data memory allocation */
|
||||
|
||||
Reference in New Issue
Block a user