summaryrefslogtreecommitdiff
path: root/sys/kern/link_elf_obj.c
diff options
context:
space:
mode:
authorMarcel Moolenaar <marcel@FreeBSD.org>2002-04-21 21:08:30 +0000
committerMarcel Moolenaar <marcel@FreeBSD.org>2002-04-21 21:08:30 +0000
commit8420105927433fa5327d76871e927d2c295aa976 (patch)
tree745d9e23292cef4ba528d7c410f78377f0a1dde6 /sys/kern/link_elf_obj.c
parent3bf762b7f61757c859d21eb99a0226e6d6c4cc63 (diff)
Notes
Diffstat (limited to 'sys/kern/link_elf_obj.c')
-rw-r--r--sys/kern/link_elf_obj.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/kern/link_elf_obj.c b/sys/kern/link_elf_obj.c
index fe4aba357351..8eb7681f95ac 100644
--- a/sys/kern/link_elf_obj.c
+++ b/sys/kern/link_elf_obj.c
@@ -165,6 +165,10 @@ r_debug_state(struct r_debug *dummy_one __unused,
#endif
+#ifdef __ia64__
+Elf_Addr link_elf_get_gp(linker_file_t);
+#endif
+
/*
* The kernel symbol table starts here.
*/
@@ -1171,3 +1175,18 @@ link_elf_each_function_name(linker_file_t file,
}
return (0);
}
+
+#ifdef __ia64__
+/*
+ * Each KLD has its own GP. The GP value for each load module is given by
+ * DT_PLTGOT on ia64. We need GP to construct function descriptors, but
+ * don't have direct access to the ELF file structure. The link_elf_get_gp()
+ * function returns the GP given a pointer to a generic linker file struct.
+ */
+Elf_Addr
+link_elf_get_gp(linker_file_t lf)
+{
+ elf_file_t ef = (elf_file_t)lf;
+ return (Elf_Addr)ef->got;
+}
+#endif