/* -----------------------------------------------------------------------------
- * $Id: LinkerInternals.h,v 1.1 2001/02/11 17:51:07 simonmar Exp $
+ * $Id: LinkerInternals.h,v 1.3 2001/02/28 10:03:42 sewardj Exp $
*
* (c) The GHC Team, 2000
*
*
* ---------------------------------------------------------------------------*/
-/* A bucket in the symbol hash-table. Primarily, maps symbol names to
- * absolute addresses. All symbols from a given module are linked
- * together, so they can be freed at the same time. There's also a
- * bucket link field for the hash table.
- */
-typedef struct _SymbolVal {
- char *lbl;
- void *addr;
-} SymbolVal;
-
typedef enum { OBJECT_LOADED, OBJECT_RESOLVED } OStatus;
/* Indication of section kinds for loaded objects. Needed by
* for each object file in use.
*/
typedef struct _ObjectCode {
- OStatus status;
- char* fileName;
- int fileSize;
- char* formatName; /* eg "ELF32", "DLL", "COFF", etc. */
-
- SymbolVal *symbols;
- int n_symbols;
+ OStatus status;
+ char* fileName;
+ int fileSize;
+ char* formatName; /* eg "ELF32", "DLL", "COFF", etc. */
+
+ /* An array containing ptrs to all the symbol names copied from
+ this object into the global symbol hash table. This is so that
+ we know which parts of the latter mapping to nuke when this
+ object is removed from the system. */
+ char** symbols;
+ int n_symbols;
/* ptr to malloc'd lump of memory holding the obj file */
- void* image;
+ void* image;
/* The section-kind entries for this object module. Dynamically expands. */
- Section* sections;
- int n_sections;
+ Section* sections;
+ int n_sections;
+
+ /* A private hash table for local symbols. */
+ HashTable* lochash;
/* Allow a chain of these things */
struct _ObjectCode * next;