Changeset b36c5209 in rtems for cpukit/libdl/rtl-elf.h


Ignore:
Timestamp:
May 3, 2019, 12:15:20 AM (6 months ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
8bd4f61c
Parents:
be50969
Message:

libdl: Do not access the ELF file while the allocator is locked.

  • Load symbols before allocation.
  • Parse reloc records and place any reloc recs in a cache to use while the allocator is locked.
  • Relocate symbols after section allocation.
  • Split section loading into allocation/locating and loading.
  • Update all arch back-ends with a new reloc interface to control tramp handling.
  • Add -a and -t to the object list shell command.

Closes #3741

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/libdl/rtl-elf.h

    rbe50969 rb36c5209  
    5151 ** Imported NetBSD ELF Specifics End.
    5252 **/
     53
     54/**
     55 * ELF Relocation status codes.
     56 */
     57typedef enum rtems_rtl_elf_rel_status
     58{
     59  rtems_rtl_elf_rel_no_error,    /**< There is no error processing the record. */
     60  rtems_rtl_elf_rel_failure,     /**< There was a failure processing the record. */
     61  rtems_rtl_elf_rel_tramp_cache, /**< The reloc record may need a trampoliine. */
     62  rtems_rtl_elf_rel_tramp_add    /**< Add a trampoliine. */
     63} rtems_rtl_elf_rel_status;
    5364
    5465/**
     
    144155 *
    145156 * @param obj The object file being relocated.
    146  * @param rel The ELF relocation record.
    147  * @param sect The section of the object file the relocation is for.
    148  * @param symname The symbol's name.
    149  * @param syminfo The ELF symbol info field.
    150  * @param symvalue If a symbol is referenced, this is the symbols value.
    151  * @retval bool The relocation is valid.
    152  * @retval bool The relocation is not valid.
    153  */
    154 bool rtems_rtl_elf_relocate_rel_tramp (rtems_rtl_obj*            obj,
    155                                        const Elf_Rel*            rel,
    156                                        const rtems_rtl_obj_sect* sect,
    157                                        const char*               symname,
    158                                        const Elf_Byte            syminfo,
    159                                        const Elf_Word            symvalue);
     157 * @param rela The ELF relocation record.
     158 * @param sect The section of the object file the relocation is for.
     159 * @param symname The symbol's name.
     160 * @param syminfo The ELF symbol info field.
     161 * @param symvalue If a symbol is referenced, this is the symbols value.
     162 * @retval rtems_rtl_elf_rel_status The result of the trampoline parsing.
     163 */
     164rtems_rtl_elf_rel_status rtems_rtl_elf_relocate_rel_tramp (rtems_rtl_obj*            obj,
     165                                                           const Elf_Rel*            rel,
     166                                                           const rtems_rtl_obj_sect* sect,
     167                                                           const char*               symname,
     168                                                           const Elf_Byte            syminfo,
     169                                                           const Elf_Word            symvalue);
    160170
    161171/**
     
    170180 * @param syminfo The ELF symbol info field.
    171181 * @param symvalue If a symbol is referenced, this is the symbols value.
    172  * @retval bool The relocation is valid.
    173  * @retval bool The relocation is not valid.
    174  */
    175 bool rtems_rtl_elf_relocate_rela_tramp (rtems_rtl_obj*            obj,
    176                                         const Elf_Rela*           rela,
    177                                         const rtems_rtl_obj_sect* sect,
    178                                         const char*               symname,
    179                                         const Elf_Byte            syminfo,
    180                                         const Elf_Word            symvalue);
     182 * @retval rtems_rtl_elf_rel_status The result of the trampoline parsing.
     183 */
     184rtems_rtl_elf_rel_status  rtems_rtl_elf_relocate_rela_tramp (rtems_rtl_obj*            obj,
     185                                                             const Elf_Rela*           rela,
     186                                                             const rtems_rtl_obj_sect* sect,
     187                                                             const char*               symname,
     188                                                             const Elf_Byte            syminfo,
     189                                                             const Elf_Word            symvalue);
    181190
    182191/**
     
    191200 * @param syminfo The ELF symbol info field.
    192201 * @param symvalue If a symbol is referenced, this is the symbols value.
    193  * @retval bool The relocation has been applied.
    194  * @retval bool The relocation could not be applied.
    195  */
    196 bool rtems_rtl_elf_relocate_rel (rtems_rtl_obj*            obj,
    197                                  const Elf_Rel*            rel,
    198                                  const rtems_rtl_obj_sect* sect,
    199                                  const char*               symname,
    200                                  const Elf_Byte            syminfo,
    201                                  const Elf_Word            symvalue);
     202 * @retval rtems_rtl_elf_rel_status The result of the trampoline parsing.
     203 */
     204rtems_rtl_elf_rel_status rtems_rtl_elf_relocate_rel (rtems_rtl_obj*            obj,
     205                                                     const Elf_Rel*            rel,
     206                                                     const rtems_rtl_obj_sect* sect,
     207                                                     const char*               symname,
     208                                                     const Elf_Byte            syminfo,
     209                                                     const Elf_Word            symvalue);
    202210
    203211/**
     
    212220 * @param syminfo The ELF symbol info field.
    213221 * @param symvalue If a symbol is referenced, this is the symbols value.
    214  * @retval bool The relocation has been applied.
    215  * @retval bool The relocation could not be applied.
    216  */
    217 bool rtems_rtl_elf_relocate_rela (rtems_rtl_obj*            obj,
    218                                   const Elf_Rela*           rela,
    219                                   const rtems_rtl_obj_sect* sect,
    220                                   const char*               symname,
    221                                   const Elf_Byte            syminfo,
    222                                   const Elf_Word            symvalue);
     222 * @retval rtems_rtl_elf_rel_status The result of the trampoline parsing.
     223 */
     224rtems_rtl_elf_rel_status rtems_rtl_elf_relocate_rela (rtems_rtl_obj*            obj,
     225                                                      const Elf_Rela*           rela,
     226                                                      const rtems_rtl_obj_sect* sect,
     227                                                      const char*               symname,
     228                                                      const Elf_Byte            syminfo,
     229                                                      const Elf_Word            symvalue);
    223230
    224231/**
Note: See TracChangeset for help on using the changeset viewer.