summaryrefslogtreecommitdiffstats
path: root/linker/linker.h
diff options
context:
space:
mode:
Diffstat (limited to 'linker/linker.h')
-rw-r--r--linker/linker.h11
1 files changed, 10 insertions, 1 deletions
diff --git a/linker/linker.h b/linker/linker.h
index d29484c..0c986cd 100644
--- a/linker/linker.h
+++ b/linker/linker.h
@@ -31,7 +31,8 @@
#include <unistd.h>
#include <sys/types.h>
-#include <linux/elf.h>
+#include <elf.h>
+#include <sys/exec_elf.h>
#undef PAGE_MASK
#undef PAGE_SIZE
@@ -83,6 +84,7 @@ typedef struct soinfo soinfo;
#define FLAG_LINKED 0x00000001
#define FLAG_ERROR 0x00000002
#define FLAG_EXE 0x00000004 // The main executable
+#define FLAG_LINKER 0x00000010 // The linker itself
#define SOINFO_NAME_LEN 128
@@ -140,6 +142,12 @@ struct soinfo
unsigned refcount;
struct link_map linkmap;
+
+ int constructors_called;
+
+ Elf32_Addr gnu_relro_start;
+ unsigned gnu_relro_len;
+
};
@@ -200,6 +208,7 @@ Elf32_Sym *lookup(const char *name, soinfo **found, soinfo *start);
soinfo *find_containing_library(const void *addr);
Elf32_Sym *find_containing_symbol(const void *addr, soinfo *si);
const char *linker_get_error(void);
+void call_constructors_recursive(soinfo *si);
#ifdef ANDROID_ARM_LINKER
typedef long unsigned int *_Unwind_Ptr;