X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FLinkerInternals.h;h=07d6334c7f4fab7d3299c6548cf9824c1f1a28ea;hb=0dbbf1932d550293986af6244202cb735b2cd966;hp=deb9af2d994cccee210195ee073cb8ea9fb20a5b;hpb=94e06463420582cc2d336b39a297e82af39e4cc4;p=ghc-hetmet.git diff --git a/ghc/rts/LinkerInternals.h b/ghc/rts/LinkerInternals.h index deb9af2..07d6334 100644 --- a/ghc/rts/LinkerInternals.h +++ b/ghc/rts/LinkerInternals.h @@ -6,6 +6,9 @@ * * ---------------------------------------------------------------------------*/ +#ifndef LINKERINTERNALS_H +#define LINKERINTERNALS_H + typedef enum { OBJECT_LOADED, OBJECT_RESOLVED } OStatus; /* Indication of section kinds for loaded objects. Needed by @@ -36,6 +39,18 @@ typedef } ProddableBlock; +/* Jump Islands are sniplets of machine code required for relative + * address relocations on the PowerPC. + */ +#ifdef powerpc_HOST_ARCH +typedef struct { + short lis_r12, hi_addr; + short ori_r12_r12, lo_addr; + long mtctr_r12; + long bctr; +} ppcJumpIsland; +#endif + /* Top-level structure for an object module. One of these is allocated * for each object file in use. */ @@ -53,7 +68,13 @@ typedef struct _ObjectCode { int n_symbols; /* ptr to malloc'd lump of memory holding the obj file */ - void* image; + char* image; + +#ifdef darwin_HOST_OS + /* record by how much image has been deliberately misaligned + after allocation, so that we can use realloc */ + int misalignment; +#endif /* The section-kind entries for this object module. Linked list. */ @@ -70,14 +91,14 @@ typedef struct _ObjectCode { outside one of these is an error in the linker. */ ProddableBlock* proddables; -#ifdef ia64_TARGET_ARCH +#ifdef ia64_HOST_ARCH /* Procedure Linkage Table for this object */ void *plt; unsigned int pltIndex; #endif -#ifdef darwin_TARGET_OS - char* jump_islands; +#ifdef powerpc_HOST_ARCH + ppcJumpIsland *jump_islands; unsigned long island_start_symbol; unsigned long n_islands; #endif @@ -85,3 +106,5 @@ typedef struct _ObjectCode { } ObjectCode; extern ObjectCode *objects; + +#endif /* LINKERINTERNALS_H */