nealef opened a new pull request, #10470:
URL: https://github.com/apache/nuttx/pull/10470
* 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 pre-init sections
## Summary
An ET_DYN type of shared objects relies on its text section and data
sections remaining in relative position as there are references from the text
section to GOT offsets in the data section. Therefore you cannot just
arbitrarily load text and data separately and hope the offsets are not changed.
## Impact
ET_DYN objects will load, execute, and unload correctly.
## Testing
Added test to [sotest](nuttx-apps/examples/sotest)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]