X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FLinkerInternals.h;h=0763703a323463878608005ecd51152655f92ac8;hb=2b57ddc3e802a5d93b30a21e198077b016e2e008;hp=9cf33171da1fe3fb4b336339b76ca7fef1e35727;hpb=4b6c8c65c1eb579e93a4554e29041a554d7a479b;p=ghc-hetmet.git diff --git a/ghc/rts/LinkerInternals.h b/ghc/rts/LinkerInternals.h index 9cf3317..0763703 100644 --- a/ghc/rts/LinkerInternals.h +++ b/ghc/rts/LinkerInternals.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $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 * @@ -7,31 +7,36 @@ * * ---------------------------------------------------------------------------*/ -/* 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. */ @@ -41,21 +46,37 @@ typedef struct _ObjectCode { 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;