summaryrefslogtreecommitdiff
path: root/i386/xen/xen_boothdr.S
diff options
context:
space:
mode:
Diffstat (limited to 'i386/xen/xen_boothdr.S')
-rw-r--r--i386/xen/xen_boothdr.S17
1 files changed, 17 insertions, 0 deletions
diff --git a/i386/xen/xen_boothdr.S b/i386/xen/xen_boothdr.S
index 3d84e0c..604e13b 100644
--- a/i386/xen/xen_boothdr.S
+++ b/i386/xen/xen_boothdr.S
@@ -90,6 +90,23 @@ _start:
subl $KERNELBASE,%esi
pushl %esi
+ /* Fix ifunc entries */
+ movl $__rel_iplt_start,%esi
+ movl $__rel_iplt_end,%edi
+iplt_cont:
+ cmpl %edi,%esi
+ jae iplt_done
+ movl (%esi),%ebx /* r_offset */
+ movb 4(%esi),%al /* info */
+ cmpb $42,%al /* IRELATIVE */
+ jnz iplt_next
+ call *(%ebx) /* call ifunc */
+ movl %eax,(%ebx) /* fixed address */
+iplt_next:
+ addl $8,%esi
+ jmp iplt_cont
+iplt_done:
+
/* Jump into C code. */
call EXT(c_boot_entry)