/* -----------------------------------------------------------------------------
- * $Id: LinkerInternals.h,v 1.2 2001/02/12 12:46:23 sewardj Exp $
+ * $Id: LinkerInternals.h,v 1.6 2002/06/09 13:37:44 matthewc 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
the GC for deciding whether or not a pointer on the stack
is a code pointer.
*/
-typedef enum { SECTIONKIND_CODE_OR_RODATA,
- SECTIONKIND_RWDATA,
- SECTIONKIND_OTHER,
- SECTIONKIND_NOINFOAVAIL }
+typedef
+ enum { SECTIONKIND_CODE_OR_RODATA,
+ SECTIONKIND_RWDATA,
+ SECTIONKIND_OTHER,
+ SECTIONKIND_NOINFOAVAIL }
SectionKind;
-typedef struct { void* start; void* end; SectionKind kind; }
+typedef
+ struct _Section {
+ void* start;
+ void* end;
+ SectionKind kind;
+ struct _Section* next;
+ }
Section;
+typedef
+ struct _ProddableBlock {
+ void* start;
+ int size;
+ struct _ProddableBlock* next;
+ }
+ ProddableBlock;
+
/* Top-level structure for an object module. One of these is allocated
* for each object file in use.
*/
int fileSize;
char* formatName; /* eg "ELF32", "DLL", "COFF", etc. */
- SymbolVal *symbols;
+ /* 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;
- /* The section-kind entries for this object module. Dynamically expands. */
- Section* sections;
- int n_sections;
+ /* The section-kind entries for this object module. Linked
+ list. */
+ Section* sections;
/* A private hash table for local symbols. */
HashTable* lochash;
/* Allow a chain of these things */
struct _ObjectCode * next;
+
+ /* SANITY CHECK ONLY: a list of the only memory regions which may
+ safely be prodded during relocation. Any attempt to prod
+ outside one of these is an error in the linker. */
+ ProddableBlock* proddables;
+
+#ifdef ia64_TARGET_ARCH
+ /* Procedure Linkage Table for this object */
+ void *plt;
+ unsigned int pltIndex;
+#endif
+
} ObjectCode;
extern ObjectCode *objects;