cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

entry64.S (1984B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) 2003,2004  Eric Biederman (ebiederm@xmission.com)
      4 * Copyright (C) 2014  Red Hat Inc.
      5
      6 * Author(s): Vivek Goyal <vgoyal@redhat.com>
      7 *
      8 * This code has been taken from kexec-tools.
      9 */
     10
     11#include <linux/linkage.h>
     12
     13	.text
     14	.balign 16
     15	.code64
     16
     17SYM_CODE_START(entry64)
     18	/* Setup a gdt that should be preserved */
     19	lgdt gdt(%rip)
     20
     21	/* load the data segments */
     22	movl    $0x18, %eax     /* data segment */
     23	movl    %eax, %ds
     24	movl    %eax, %es
     25	movl    %eax, %ss
     26	movl    %eax, %fs
     27	movl    %eax, %gs
     28
     29	/* Setup new stack */
     30	leaq    stack_init(%rip), %rsp
     31	pushq   $0x10 /* CS */
     32	leaq    new_cs_exit(%rip), %rax
     33	pushq   %rax
     34	lretq
     35new_cs_exit:
     36
     37	/* Load the registers */
     38	movq	rax(%rip), %rax
     39	movq	rbx(%rip), %rbx
     40	movq	rcx(%rip), %rcx
     41	movq	rdx(%rip), %rdx
     42	movq	rsi(%rip), %rsi
     43	movq	rdi(%rip), %rdi
     44	movq    rsp(%rip), %rsp
     45	movq	rbp(%rip), %rbp
     46	movq	r8(%rip), %r8
     47	movq	r9(%rip), %r9
     48	movq	r10(%rip), %r10
     49	movq	r11(%rip), %r11
     50	movq	r12(%rip), %r12
     51	movq	r13(%rip), %r13
     52	movq	r14(%rip), %r14
     53	movq	r15(%rip), %r15
     54
     55	/* Jump to the new code... */
     56	jmpq	*rip(%rip)
     57SYM_CODE_END(entry64)
     58
     59	.section ".rodata"
     60	.balign 4
     61SYM_DATA_START(entry64_regs)
     62rax:	.quad 0x0
     63rcx:	.quad 0x0
     64rdx:	.quad 0x0
     65rbx:	.quad 0x0
     66rsp:	.quad 0x0
     67rbp:	.quad 0x0
     68rsi:	.quad 0x0
     69rdi:	.quad 0x0
     70r8:	.quad 0x0
     71r9:	.quad 0x0
     72r10:	.quad 0x0
     73r11:	.quad 0x0
     74r12:	.quad 0x0
     75r13:	.quad 0x0
     76r14:	.quad 0x0
     77r15:	.quad 0x0
     78rip:	.quad 0x0
     79SYM_DATA_END(entry64_regs)
     80
     81	/* GDT */
     82	.section ".rodata"
     83	.balign 16
     84SYM_DATA_START_LOCAL(gdt)
     85	/*
     86	 * 0x00 unusable segment
     87	 * 0x08 unused
     88	 * so use them as gdt ptr
     89	 */
     90	.word gdt_end - gdt - 1
     91	.quad gdt
     92	.word 0, 0, 0
     93
     94	/* 0x10 4GB flat code segment */
     95	.word 0xFFFF, 0x0000, 0x9A00, 0x00AF
     96
     97	/* 0x18 4GB flat data segment */
     98	.word 0xFFFF, 0x0000, 0x9200, 0x00CF
     99SYM_DATA_END_LABEL(gdt, SYM_L_LOCAL, gdt_end)
    100
    101SYM_DATA_START_LOCAL(stack)
    102	.quad   0, 0
    103SYM_DATA_END_LABEL(stack, SYM_L_LOCAL, stack_init)