linux/arch/x86/kernel/asm-offsets_64.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2#ifndef __LINUX_KBUILD_H
   3# error "Please do not build this file directly, build asm-offsets.c instead"
   4#endif
   5
   6#include <asm/ia32.h>
   7
   8#define __SYSCALL_64(nr, sym, qual) [nr] = 1,
   9#define __SYSCALL_X32(nr, sym, qual)
  10static char syscalls_64[] = {
  11#include <asm/syscalls_64.h>
  12};
  13#undef __SYSCALL_64
  14#undef __SYSCALL_X32
  15
  16#ifdef CONFIG_X86_X32_ABI
  17#define __SYSCALL_64(nr, sym, qual)
  18#define __SYSCALL_X32(nr, sym, qual) [nr] = 1,
  19static char syscalls_x32[] = {
  20#include <asm/syscalls_64.h>
  21};
  22#undef __SYSCALL_64
  23#undef __SYSCALL_X32
  24#endif
  25
  26#define __SYSCALL_I386(nr, sym, qual) [nr] = 1,
  27static char syscalls_ia32[] = {
  28#include <asm/syscalls_32.h>
  29};
  30#undef __SYSCALL_I386
  31
  32#if defined(CONFIG_KVM_GUEST) && defined(CONFIG_PARAVIRT_SPINLOCKS)
  33#include <asm/kvm_para.h>
  34#endif
  35
  36int main(void)
  37{
  38#ifdef CONFIG_PARAVIRT
  39#ifdef CONFIG_PARAVIRT_XXL
  40        OFFSET(PV_CPU_usergs_sysret64, paravirt_patch_template,
  41               cpu.usergs_sysret64);
  42        OFFSET(PV_CPU_swapgs, paravirt_patch_template, cpu.swapgs);
  43#ifdef CONFIG_DEBUG_ENTRY
  44        OFFSET(PV_IRQ_save_fl, paravirt_patch_template, irq.save_fl);
  45#endif
  46#endif
  47        BLANK();
  48#endif
  49
  50#if defined(CONFIG_KVM_GUEST) && defined(CONFIG_PARAVIRT_SPINLOCKS)
  51        OFFSET(KVM_STEAL_TIME_preempted, kvm_steal_time, preempted);
  52        BLANK();
  53#endif
  54
  55#define ENTRY(entry) OFFSET(pt_regs_ ## entry, pt_regs, entry)
  56        ENTRY(bx);
  57        ENTRY(cx);
  58        ENTRY(dx);
  59        ENTRY(sp);
  60        ENTRY(bp);
  61        ENTRY(si);
  62        ENTRY(di);
  63        ENTRY(r8);
  64        ENTRY(r9);
  65        ENTRY(r10);
  66        ENTRY(r11);
  67        ENTRY(r12);
  68        ENTRY(r13);
  69        ENTRY(r14);
  70        ENTRY(r15);
  71        ENTRY(flags);
  72        BLANK();
  73#undef ENTRY
  74
  75#define ENTRY(entry) OFFSET(saved_context_ ## entry, saved_context, entry)
  76        ENTRY(cr0);
  77        ENTRY(cr2);
  78        ENTRY(cr3);
  79        ENTRY(cr4);
  80        ENTRY(gdt_desc);
  81        BLANK();
  82#undef ENTRY
  83
  84        OFFSET(TSS_ist, tss_struct, x86_tss.ist);
  85        DEFINE(DB_STACK_OFFSET, offsetof(struct cea_exception_stacks, DB_stack) -
  86               offsetof(struct cea_exception_stacks, DB1_stack));
  87        BLANK();
  88
  89#ifdef CONFIG_STACKPROTECTOR
  90        DEFINE(stack_canary_offset, offsetof(struct fixed_percpu_data, stack_canary));
  91        BLANK();
  92#endif
  93
  94        DEFINE(__NR_syscall_max, sizeof(syscalls_64) - 1);
  95        DEFINE(NR_syscalls, sizeof(syscalls_64));
  96
  97#ifdef CONFIG_X86_X32_ABI
  98        DEFINE(__NR_syscall_x32_max, sizeof(syscalls_x32) - 1);
  99        DEFINE(X32_NR_syscalls, sizeof(syscalls_x32));
 100#endif
 101
 102        DEFINE(__NR_syscall_compat_max, sizeof(syscalls_ia32) - 1);
 103        DEFINE(IA32_NR_syscalls, sizeof(syscalls_ia32));
 104
 105        return 0;
 106}
 107