1 /* -----------------------------------------------------------------------------
3 * (c) The GHC Team, 2000
7 * ---------------------------------------------------------------------------*/
9 #ifndef LINKERINTERNALS_H
10 #define LINKERINTERNALS_H
12 typedef enum { OBJECT_LOADED, OBJECT_RESOLVED } OStatus;
14 /* Indication of section kinds for loaded objects. Needed by
15 the GC for deciding whether or not a pointer on the stack
19 enum { SECTIONKIND_CODE_OR_RODATA,
22 SECTIONKIND_NOINFOAVAIL }
30 struct _Section* next;
35 struct _ProddableBlock {
38 struct _ProddableBlock* next;
42 /* Jump Islands are sniplets of machine code required for relative
43 * address relocations on the PowerPC.
46 #ifdef powerpc_HOST_ARCH
48 short lis_r12, hi_addr;
49 short ori_r12_r12, lo_addr;
53 #elif x86_64_TARGET_ARCH
55 uint8_t jumpIsland[6];
59 /* Top-level structure for an object module. One of these is allocated
60 * for each object file in use.
62 typedef struct _ObjectCode {
66 char* formatName; /* eg "ELF32", "DLL", "COFF", etc. */
68 /* An array containing ptrs to all the symbol names copied from
69 this object into the global symbol hash table. This is so that
70 we know which parts of the latter mapping to nuke when this
71 object is removed from the system. */
75 /* ptr to malloc'd lump of memory holding the obj file */
79 /* record by how much image has been deliberately misaligned
80 after allocation, so that we can use realloc */
84 /* The section-kind entries for this object module. Linked
88 /* A private hash table for local symbols. */
91 /* Allow a chain of these things */
92 struct _ObjectCode * next;
94 /* SANITY CHECK ONLY: a list of the only memory regions which may
95 safely be prodded during relocation. Any attempt to prod
96 outside one of these is an error in the linker. */
97 ProddableBlock* proddables;
100 /* Procedure Linkage Table for this object */
102 unsigned int pltIndex;
105 #if powerpc_HOST_ARCH || x86_64_HOST_ARCH
106 SymbolExtra *symbol_extras;
107 unsigned long first_symbol_extra;
108 unsigned long n_symbol_extras;
113 extern ObjectCode *objects;
115 #endif /* LINKERINTERNALS_H */