summaryrefslogtreecommitdiff
path: root/cpukit/include/rtems/rtl/rtl-unresolved.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/include/rtems/rtl/rtl-unresolved.h')
-rw-r--r--cpukit/include/rtems/rtl/rtl-unresolved.h37
1 files changed, 26 insertions, 11 deletions
diff --git a/cpukit/include/rtems/rtl/rtl-unresolved.h b/cpukit/include/rtems/rtl/rtl-unresolved.h
index a69b51ac7f..a425384370 100644
--- a/cpukit/include/rtems/rtl/rtl-unresolved.h
+++ b/cpukit/include/rtems/rtl/rtl-unresolved.h
@@ -71,21 +71,30 @@ typedef uint32_t rtems_rtl_word;
typedef enum rtems_rtl_unresolved_rtype
{
rtems_rtl_unresolved_empty = 0, /**< The records is empty. Must always be 0 */
- rtems_rtl_unresolved_name = 1, /**< The record is a name. */
+ rtems_rtl_unresolved_symbol = 1, /**< The record is a symbol. */
rtems_rtl_unresolved_reloc = 2 /**< The record is a relocation record. */
} rtems_rtl_unresolved_rtype;
/**
- * Unresolved externals symbol names. The names are reference counted and
- * separate from the relocation records because a number of records could
- * reference the same symbol name.
+ * Unresolved external symbol flags.
*/
-typedef struct rtems_rtl_unresolv_name
+#define RTEMS_RTL_UNRESOLV_SYM_SEARCH_ARCHIVE (1 << 0) /**< Search the archive. */
+
+/**
+ * Unresolved externals symbols. The symbols are reference counted and separate
+ * from the relocation records because a number of records could reference the
+ * same symbol.
+ *
+ * The name is extended in the allocator of the record in the unresolved data
+ * block. The 10 is a minimum that is added to by joining more than one record.
+ */
+typedef struct rtems_rtl_unresolv_symbol
{
uint16_t refs; /**< The number of references to this name. */
+ uint16_t flags; /**< Flags to manage the symbol. */
uint16_t length; /**< The length of this name. */
- const char name[12]; /**< The symbol name. */
-} rtems_rtl_unresolv_name;
+ const char name[10]; /**< The symbol name. */
+} rtems_rtl_unresolv_symbol;
/**
* Unresolved externals symbols require the relocation records to be held
@@ -108,8 +117,8 @@ typedef struct rtems_rtl_unresolv_rec
rtems_rtl_unresolved_rtype type;
union
{
- rtems_rtl_unresolv_name name; /**< The name, or */
- rtems_rtl_unresolv_reloc reloc; /**< the relocation record. */
+ rtems_rtl_unresolv_symbol name; /**< The symnbol, or */
+ rtems_rtl_unresolv_reloc reloc; /**< the relocation record. */
} rec;
} rtems_rtl_unresolv_rec;
@@ -166,8 +175,8 @@ void rtems_rtl_unresolved_table_close (rtems_rtl_unresolved* unresolved);
/**
* Iterate over the table of unresolved entries.
*/
-bool rtems_rtl_unresolved_interate (rtems_rtl_unresolved_iterator iterator,
- void* data);
+bool rtems_rtl_unresolved_iterate (rtems_rtl_unresolved_iterator iterator,
+ void* data);
/**
* Add a relocation to the list of unresolved relocations.
@@ -206,6 +215,12 @@ bool rtems_rtl_unresolved_remove (rtems_rtl_obj* obj,
const rtems_rtl_word* rel);
/**
+ * Set all symbols to be archive searchable. This is done when the available
+ * archives have been refreshed and there are new archives to search for.
+ */
+void rtems_rtl_unresolved_set_archive_search (void);
+
+/**
* Dump the RTL unresolved data.
*/
void rtems_rtl_unresolved_dump (void);