libdl: Add support for large memory programs

- Add trampolines to support relocs that are out of range on
  support architectures.

- Support not loading separate text/data sections in an object
  file if the symbol provided in the section is a duplicate.
  A base image may have pulled in part of an object and another
  part needs to be dynamically loaded.

- Refactor the unresolved handling to scale to hundreds of
  unresolved symbols when loading large number of files.

Updates #3685
This commit is contained in:
Chris Johns
2019-01-22 08:48:19 +11:00
parent d8c70ba65b
commit 194eb403c3
16 changed files with 687 additions and 460 deletions

View File

@@ -144,7 +144,7 @@ rtems_rtl_data_init (void)
/*
* Open the archives.
*/
rtems_rtl_archives_open (&rtl->archives, "/etc/rtl-libs.conf");
rtems_rtl_archives_open (&rtl->archives, "/etc/libdl.conf");
/*
* Open the unresolved table.
@@ -265,6 +265,14 @@ rtems_rtl_global_symbols (void)
return &rtl->globals;
}
const char*
rtems_rtl_last_error_unprotected (void)
{
if (!rtl)
return NULL;
return rtl->last_error;
}
rtems_chain_control*
rtems_rtl_objects_unprotected (void)
{