]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/amd64/linux/linux_locore.asm
sys/{x86,amd64}: remove one of doubled ;s
[FreeBSD/FreeBSD.git] / sys / amd64 / linux / linux_locore.asm
1 /* $FreeBSD$ */
2
3 #include "linux_assym.h"                        /* system definitions */
4 #include <machine/asmacros.h>                   /* miscellaneous asm macros */
5
6 #include <amd64/linux/linux_syscall.h>          /* system call numbers */
7
8         .data
9
10         .globl linux_platform
11 linux_platform:
12         .asciz "x86_64"
13
14
15         .text
16 /*
17  * To avoid excess stack frame the signal trampoline code emulates
18  * the 'call' instruction.
19  */
20 NON_GPROF_ENTRY(linux_rt_sigcode)
21         movq    %rsp, %rbx                      /* preserve sigframe */
22         call    .getip
23 .getip:
24         popq    %rax
25         add     $.startrtsigcode-.getip, %rax   /* ret address */
26         pushq   %rax
27         jmp     *LINUX_RT_SIGF_HANDLER(%rbx)
28 .startrtsigcode:
29         movq    $LINUX_SYS_linux_rt_sigreturn,%rax   /* linux_rt_sigreturn() */
30         syscall                                 /* enter kernel with args */
31         hlt
32 .endrtsigcode:
33 0:      jmp     0b
34
35 NON_GPROF_ENTRY(__vdso_clock_gettime)
36         movq    $LINUX_SYS_linux_clock_gettime,%rax
37         syscall
38         ret
39 .weak clock_gettime
40 .set clock_gettime, __vdso_clock_gettime
41
42 NON_GPROF_ENTRY(__vdso_time)
43         movq    $LINUX_SYS_linux_time,%rax
44         syscall
45         ret
46 .weak time
47 .set time, __vdso_time
48
49 NON_GPROF_ENTRY(__vdso_gettimeofday)
50         movq    $LINUX_SYS_gettimeofday,%rax
51         syscall
52         ret
53 .weak gettimeofday
54 .set gettimeofday, __vdso_gettimeofday
55
56 NON_GPROF_ENTRY(__vdso_getcpu)
57         movq    $-38,%rax       /* not implemented */
58         ret
59 .weak getcpu
60 .set getcpu, __vdso_getcpu
61
62 #if 0
63         .section .note.Linux, "a",@note
64         .long 2f - 1f           /* namesz */
65         .balign 4
66         .long 4f - 3f           /* descsz */
67         .long 0
68 1:
69         .asciz "Linux"
70 2:
71         .balign 4
72 3:
73         .long LINUX_VERSION_CODE
74 4:
75         .balign 4
76         .previous
77 #endif
78
79         .section .eh_frame,"a",@progbits
80 .LSTARTFRAMEDLSI0:
81         .long .LENDCIEDLSI0-.LSTARTCIEDLSI0
82 .LSTARTCIEDLSI0:
83         .long 0                                 /* CIE ID */
84         .byte 1                                 /* Version number */
85         .string "zR"                            /* NULL-terminated
86                                                  * augmentation string
87                                                  */
88         .uleb128 1                              /* Code alignment factor */
89         .sleb128 -4                             /* Data alignment factor */
90         .byte 8                                 /* Return address register column */
91         .uleb128 1                              /* Augmentation value length */
92         .byte 0x1b                              /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */
93         .byte 0x0c                              /* DW_CFA_def_cfa */
94         .uleb128 4
95         .uleb128 4
96         .byte 0x88                              /* DW_CFA_offset, column 0x8 */
97         .uleb128 1
98         .align 4
99 .LENDCIEDLSI0:
100         .long .LENDFDEDLSI0-.LSTARTFDEDLSI0     /* Length FDE */
101 .LSTARTFDEDLSI0:
102         .long .LSTARTFDEDLSI0-.LSTARTFRAMEDLSI0 /* CIE pointer */
103         .long .startrtsigcode-.                 /* PC-relative start address */
104         .long .endrtsigcode-.startrtsigcode
105         .uleb128 0
106         .align 4
107 .LENDFDEDLSI0:
108         .previous