/* -----------------------------------------------------------------------------
- * $Id: LinkerInternals.h,v 1.4 2001/08/29 15:12:21 sewardj Exp $
*
* (c) The GHC Team, 2000
*
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
}
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.
*/
int n_symbols;
/* ptr to malloc'd lump of memory holding the obj file */
- void* image;
+ char* 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;
safely be prodded during relocation. Any attempt to prod
outside one of these is an error in the linker. */
ProddableBlock* proddables;
-
+
+#ifdef ia64_HOST_ARCH
+ /* Procedure Linkage Table for this object */
+ void *plt;
+ unsigned int pltIndex;
+#endif
+
+#ifdef powerpc_HOST_ARCH
+ ppcJumpIsland *jump_islands;
+ unsigned long island_start_symbol;
+ unsigned long n_islands;
+#endif
+
} ObjectCode;
extern ObjectCode *objects;