diff options
author | Chris Johns <chrisj@rtems.org> | 2012-07-16 15:07:54 +1000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2012-07-16 15:07:54 +1000 |
commit | 5d126da01db7c0e140ca35389dfe8f7227f10622 (patch) | |
tree | ec501af328f2fd23a4ae7cdd53991fb8743b831d /rtl-indirect-ptr.h | |
parent | 8f06d01b2c6e051d9b6f733f6673b796490983f9 (diff) |
Resolve unresolved externals when loading object files.
Object files that depend on each other will cause an unresolved
external. The change lets object files load with unresolved
externals and will resolve them when the object file with the
external is loaded.
A common table of symbol strings and relocation records is maintained.
The symbol string is shared by each object file that is unresolved.
Each relocation record that references the symbol is held. The table
is a series of small blocks that compact as symbols are resolved. The
number of symbols left unresolved is typically small this design avoids
fragmentation of the heap memory.
Diffstat (limited to 'rtl-indirect-ptr.h')
-rw-r--r-- | rtl-indirect-ptr.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/rtl-indirect-ptr.h b/rtl-indirect-ptr.h index 2c4843f..5a5b43b 100644 --- a/rtl-indirect-ptr.h +++ b/rtl-indirect-ptr.h @@ -44,6 +44,32 @@ struct rtems_rtl_sptr_s { typedef struct rtems_rtl_sptr_s rtems_rtl_sptr_t; /** + * A chain of indirect pointers for users to chain in applications. + * + * @note The chain the pointer is on is internal to the allocator and cannot be + * used by applications. + */ +struct rtems_rtl_ptr_chain_s { + rtems_chain_node node; /**< Chain of indirect pointers. */ + rtems_rtl_ptr_t ptr; /**< The indirect pointer. */ +}; + +typedef struct rtems_rtl_ptr_chain_s rtems_rtl_ptr_chain_t; + +/** + * A chain of indirect sized pointers for users to chain in applications. + * + * @note The chain the pointer is on is internal to the allocator and cannot be + * used by applications. + */ +struct rtems_rtl_sptr_chain_s { + rtems_chain_node node; /**< Chain of indirect pointers. */ + rtems_rtl_sptr_t ptr; /**< The indirect pointer. */ +}; + +typedef struct rtems_rtl_sptr_chain_s rtems_rtl_sptr_chain_t; + +/** * Get the pointer given an indirect handle. * * @param handle The handle the pointer is returned from. |