mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-31 08:28:13 +00:00
37818afd15
GLOBAL is an x86's custom macro and is going to die very soon. It was meant for global symbols, but here, it was used for functions. Instead, use the new macros SYM_FUNC_START* and SYM_CODE_START* (depending on the type of the function) which are dedicated to global functions. And since they both require a closing by SYM_*_END, do that here too. startup_64, which does not use GLOBAL but uses .globl explicitly, is converted too. "No alignments" are preserved. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Signed-off-by: Borislav Petkov <bp@suse.de> Cc: Allison Randal <allison@lohutok.net> Cc: Andy Lutomirski <luto@kernel.org> Cc: Cao jin <caoj.fnst@cn.fujitsu.com> Cc: Enrico Weigelt <info@metux.net> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Juergen Gross <jgross@suse.com> Cc: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-arch@vger.kernel.org Cc: Maran Wilson <maran.wilson@oracle.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: x86-ml <x86@kernel.org> Link: https://lkml.kernel.org/r/20191011115108.12392-17-jslaby@suse.cz
75 lines
1.7 KiB
ArmAsm
75 lines
1.7 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/* ----------------------------------------------------------------------- *
|
|
*
|
|
* Copyright (C) 1991, 1992 Linus Torvalds
|
|
* Copyright 2007 rPath, Inc. - All Rights Reserved
|
|
*
|
|
* ----------------------------------------------------------------------- */
|
|
|
|
/*
|
|
* The actual transition into protected mode
|
|
*/
|
|
|
|
#include <asm/boot.h>
|
|
#include <asm/processor-flags.h>
|
|
#include <asm/segment.h>
|
|
#include <linux/linkage.h>
|
|
|
|
.text
|
|
.code16
|
|
|
|
/*
|
|
* void protected_mode_jump(u32 entrypoint, u32 bootparams);
|
|
*/
|
|
SYM_FUNC_START_NOALIGN(protected_mode_jump)
|
|
movl %edx, %esi # Pointer to boot_params table
|
|
|
|
xorl %ebx, %ebx
|
|
movw %cs, %bx
|
|
shll $4, %ebx
|
|
addl %ebx, 2f
|
|
jmp 1f # Short jump to serialize on 386/486
|
|
1:
|
|
|
|
movw $__BOOT_DS, %cx
|
|
movw $__BOOT_TSS, %di
|
|
|
|
movl %cr0, %edx
|
|
orb $X86_CR0_PE, %dl # Protected mode
|
|
movl %edx, %cr0
|
|
|
|
# Transition to 32-bit mode
|
|
.byte 0x66, 0xea # ljmpl opcode
|
|
2: .long .Lin_pm32 # offset
|
|
.word __BOOT_CS # segment
|
|
SYM_FUNC_END(protected_mode_jump)
|
|
|
|
.code32
|
|
.section ".text32","ax"
|
|
SYM_FUNC_START_LOCAL_NOALIGN(.Lin_pm32)
|
|
# Set up data segments for flat 32-bit mode
|
|
movl %ecx, %ds
|
|
movl %ecx, %es
|
|
movl %ecx, %fs
|
|
movl %ecx, %gs
|
|
movl %ecx, %ss
|
|
# The 32-bit code sets up its own stack, but this way we do have
|
|
# a valid stack if some debugging hack wants to use it.
|
|
addl %ebx, %esp
|
|
|
|
# Set up TR to make Intel VT happy
|
|
ltr %di
|
|
|
|
# Clear registers to allow for future extensions to the
|
|
# 32-bit boot protocol
|
|
xorl %ecx, %ecx
|
|
xorl %edx, %edx
|
|
xorl %ebx, %ebx
|
|
xorl %ebp, %ebp
|
|
xorl %edi, %edi
|
|
|
|
# Set up LDTR to make Intel VT happy
|
|
lldt %cx
|
|
|
|
jmpl *%eax # Jump to the 32-bit entrypoint
|
|
SYM_FUNC_END(.Lin_pm32)
|