summaryrefslogtreecommitdiff
path: root/service/start_x86_64.S
blob: 19db34fb5d3ca86dcb8aaa6711fa0024ec2e1b69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <kc.h>

.section .text.start

.extern kjarna_entry

.hidden _start
.global _start
.type _start, @function
_start:
    push %rbp
    push %rdi
    push %rsi
    mov %rsp, %rbp
    and $-0x10, %rsp
    lea kc_image_base(%rip), %rdi
    lea _DYNAMIC(%rip), %rsi
    call kc_dynamic_init
    mov %rbp, %rsp
    pop %rsi
    pop %rdi
    mov %rsp, %rbp
    and $-0x10, %rsp
    call kjarna_entry
    mov %rbp, %rsp
    pop %rbp
    ret
.size _start, . - _start

.section .text

.hidden _rtld_link
.global _rtld_link
.type _rtld_link, @function
_rtld_link:
    push %rbp
    mov %rsp, %rbp
    push %r9
    push %r8
    push %rcx
    push %rdx
    push %rsi
    push %rdi
    mov 8(%rbp), %rdi
    mov 16(%rbp), %rsi
    push %rbp
    mov %rsp, %rbp
    and $-0x10, %rsp
    call kc_dynamic_link
    mov %rbp, %rsp
    pop %rbp
    pop %rdi
    pop %rsi
    pop %rdx
    pop %rcx
    pop %r8
    pop %r9
    mov %rbp, %rsp
    pop %rbp
    add $0x10, %rsp
    jmp *(%rax)
.size _rtld_link, . - _rtld_link