diff options
Diffstat (limited to 'i386/xen')
-rw-r--r-- | i386/xen/xen_boothdr.S | 17 |
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) |