The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/i386/linux/linux_locore.s

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* $FreeBSD: releng/11.0/sys/i386/linux/linux_locore.s 283432 2015-05-24 16:25:44Z dchagin $ */
    2 
    3 #include "linux_assym.h"                        /* system definitions */
    4 #include <machine/asmacros.h>                   /* miscellaneous asm macros */
    5 
    6 #include <i386/linux/linux_syscall.h>           /* system call numbers */
    7 
    8 #include "assym.s"
    9 
   10 /*
   11  * To avoid excess stack frame the signal trampoline code emulates
   12  * the 'call' instruction.
   13  */
   14 NON_GPROF_ENTRY(linux_sigcode)
   15         movl    %esp, %ebx                      /* preserve sigframe */
   16         call .getip0
   17 .getip0:
   18         popl    %eax
   19         add     $.startsigcode-.getip0, %eax    /* ret address */
   20         push    %eax
   21         jmp     *LINUX_SIGF_HANDLER(%ebx)
   22 .startsigcode:
   23         popl    %eax                            /* gcc unwind code need this */
   24         movl    $LINUX_SYS_linux_sigreturn,%eax /* linux_sigreturn() */
   25         int     $0x80                           /* enter kernel with args */
   26 .endsigcode:
   27 0:      jmp     0b
   28 
   29 NON_GPROF_ENTRY(linux_rt_sigcode)
   30         leal    LINUX_RT_SIGF_UC(%esp),%ebx     /* linux ucp */
   31         leal    LINUX_RT_SIGF_SC(%ebx),%ecx     /* linux sigcontext */
   32         movl    %esp, %edi
   33         call    .getip1
   34 .getip1:
   35         popl    %eax
   36         add     $.startrtsigcode-.getip1, %eax  /* ret address */
   37         push    %eax
   38         jmp     *LINUX_RT_SIGF_HANDLER(%edi)
   39 .startrtsigcode:
   40         movl    $LINUX_SYS_linux_rt_sigreturn,%eax   /* linux_rt_sigreturn() */
   41         int     $0x80                           /* enter kernel with args */
   42 .endrtsigcode:
   43 0:      jmp     0b
   44 
   45 NON_GPROF_ENTRY(linux_vsyscall)
   46 .startvsyscall:
   47         int $0x80
   48         ret
   49 .endvsyscall:
   50 
   51 #if 0
   52         .section .note.Linux, "a",@note
   53         .long 2f - 1f           /* namesz */
   54         .balign 4
   55         .long 4f - 3f           /* descsz */
   56         .long 0
   57 1:
   58         .asciz "Linux"
   59 2:
   60         .balign 4
   61 3:
   62         .long LINUX_VERSION_CODE
   63 4:
   64         .balign 4
   65         .previous
   66 #endif
   67 
   68 #define do_cfa_expr(offset)                                             \
   69         .byte 0x0f;                     /* DW_CFA_def_cfa_expression */ \
   70         .uleb128 11f-10f;               /*   length */                  \
   71 10:     .byte 0x74;                     /*     DW_OP_breg4 */           \
   72         .sleb128 offset;                /*      offset */               \
   73         .byte 0x06;                     /*     DW_OP_deref */           \
   74 11:
   75 
   76 
   77         /* CIE */
   78         .section .eh_frame,"a",@progbits
   79 .LSTARTFRAMEDLSI1:
   80         .long .LENDCIEDLSI1-.LSTARTCIEDLSI1
   81 .LSTARTCIEDLSI1:
   82         .long 0                                 /* CIE ID */
   83         .byte 1                                 /* Version number */
   84         .string "zRS"                           /* NULL-terminated
   85                                                  * augmentation string
   86                                                  */
   87         .uleb128 1                              /* Code alignment factor */
   88         .sleb128 -4                             /* Data alignment factor */
   89         .byte 8                                 /* Return address
   90                                                  * register column
   91                                                  */
   92         .uleb128 1                              /* Augmentation value length */
   93         .byte 0x1b                              /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */
   94         .byte 0                                 /* DW_CFA_nop */
   95         .align 4
   96 .LENDCIEDLSI1:
   97 
   98         /* FDE */
   99         .long .LENDFDEDLSI1-.LSTARTFDEDLSI1     /* Length FDE */
  100 .LSTARTFDEDLSI1:
  101         .long .LSTARTFDEDLSI1-.LSTARTFRAMEDLSI1 /* CIE pointer */
  102         .long .startsigcode-.                   /* PC-relative start address */
  103         .long .endsigcode-.startsigcode
  104         .uleb128 0                              /* Augmentation */
  105         do_cfa_expr(LINUX_SIGF_SC-8)
  106         .align 4
  107 .LENDFDEDLSI1:
  108 
  109         .long .LENDFDEDLSI2-.LSTARTFDEDLSI2     /* Length FDE */
  110 .LSTARTFDEDLSI2:
  111         .long .LSTARTFDEDLSI2-.LSTARTFRAMEDLSI1 /* CIE pointer */
  112         .long .startrtsigcode-.                 /* PC-relative start address */
  113         .long .endrtsigcode-.startrtsigcode
  114         .uleb128 0                              /* Augmentation */
  115         do_cfa_expr(LINUX_RT_SIGF_SC-4+LINUX_SC_ESP)
  116         .align 4
  117 .LENDFDEDLSI2:
  118         .previous
  119 
  120         .section .eh_frame,"a",@progbits
  121 .LSTARTFRAMEDLSI2:
  122         .long .LENDCIEDLSI2-.LSTARTCIEDLSI2
  123 .LSTARTCIEDLSI2:
  124         .long 0                                 /* CIE ID */
  125         .byte 1                                 /* Version number */
  126         .string "zR"                            /* NULL-terminated
  127                                                  * augmentation string
  128                                                  */
  129         .uleb128 1                              /* Code alignment factor */
  130         .sleb128 -4                             /* Data alignment factor */
  131         .byte 8                                 /* Return address register column */
  132         .uleb128 1                              /* Augmentation value length */
  133         .byte 0x1b                              /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */
  134         .byte 0x0c                              /* DW_CFA_def_cfa */
  135         .uleb128 4
  136         .uleb128 4
  137         .byte 0x88                              /* DW_CFA_offset, column 0x8 */
  138         .uleb128 1
  139         .align 4
  140 .LENDCIEDLSI2:
  141         .long .LENDFDEDLSI3-.LSTARTFDEDLSI3 /* Length FDE */
  142 .LSTARTFDEDLSI3:
  143         .long .LSTARTFDEDLSI3-.LSTARTFRAMEDLSI2 /* CIE pointer */
  144         .long .startvsyscall-.                  /* PC-relative start address */
  145         .long .endvsyscall-.startvsyscall
  146         .uleb128 0
  147         .align 4
  148 .LENDFDEDLSI3:
  149         .previous

Cache object: 607be817a5efb91402e7a1d36904520a


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.