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]

Reply via email to