aboutsummaryrefslogtreecommitdiff
path: root/sys/rt/amd64/crt1.s
blob: aaad0ba042cd7a16b8634e98ca45082e2149d8c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
global  _start

; NOTE: assumes program loader has put argc, argv, envc, envp on stack
section .text
_start:
    xor rbp,rbp    ; base pointer undefined: set to 0
    mov r9,rdx     ; 6th arg: function to register with atexit()
    pop rsi        ; 2nd arg: argc
    mov rdx,rsp    ; 3rd arg: argv
    and rsp,$-16   ; align stack pointer to 16 bytes
    mov $_fini,r8  ; 5th arg: fini
    mov $_init,rcx ; 4th arg: init
    mov $main,rdi  ; 1st arg: main

    call rtยทboot   ; int boot(
                   ;       int(*main)(int,char*[],char*[]),
                   ;       int argc,
                   ;       char *argv[],
                   ;       init, fini, atexit);

.loop: jmp .loop  ; should never reach...