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

setup-x86_64.S (1198B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * purgatory:  setup code
      4 *
      5 * Copyright (C) 2003,2004  Eric Biederman (ebiederm@xmission.com)
      6 * Copyright (C) 2014 Red Hat Inc.
      7 *
      8 * This code has been taken from kexec-tools.
      9 */
     10#include <linux/linkage.h>
     11#include <asm/purgatory.h>
     12
     13	.text
     14	.balign 16
     15	.code64
     16
     17SYM_CODE_START(purgatory_start)
     18	/* Load a gdt so I know what the segment registers are */
     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 a stack */
     30	leaq	lstack_end(%rip), %rsp
     31
     32	/* Call the C code */
     33	call purgatory
     34	jmp	entry64
     35SYM_CODE_END(purgatory_start)
     36
     37	.section ".rodata"
     38	.balign 16
     39SYM_DATA_START_LOCAL(gdt)
     40	/* 0x00 unusable segment
     41	 * 0x08 unused
     42	 * so use them as the gdt ptr
     43	 */
     44	.word	gdt_end - gdt - 1
     45	.quad	gdt
     46	.word	0, 0, 0
     47
     48	/* 0x10 4GB flat code segment */
     49	.word	0xFFFF, 0x0000, 0x9A00, 0x00AF
     50
     51	/* 0x18 4GB flat data segment */
     52	.word	0xFFFF, 0x0000, 0x9200, 0x00CF
     53SYM_DATA_END_LABEL(gdt, SYM_L_LOCAL, gdt_end)
     54
     55	.bss
     56	.balign 4096
     57SYM_DATA_START_LOCAL(lstack)
     58	.skip 4096
     59SYM_DATA_END_LABEL(lstack, SYM_L_LOCAL, lstack_end)