Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  asm-offsets.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/*
 * asm-offsets.c: Calculate pt_regs and task_struct offsets.
 *
 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
 */

#define COMPILE_OFFSETS

#include <linux/types.h>
#include <linux/sched.h>
#include <linux/mm.h>
#include <linux/kbuild.h>
#include <linux/suspend.h>
#include <linux/kvm_host.h>
#include <asm/cpu-info.h>
#include <asm/ptrace.h>
#include <asm/processor.h>
#include <asm/ftrace.h>
#include <vdso/datapage.h>

static void __used output_ptreg_defines(void)
{
 COMMENT("LoongArch pt_regs offsets.");
 OFFSET(PT_R0, pt_regs, regs[0]);
 OFFSET(PT_R1, pt_regs, regs[1]);
 OFFSET(PT_R2, pt_regs, regs[2]);
 OFFSET(PT_R3, pt_regs, regs[3]);
 OFFSET(PT_R4, pt_regs, regs[4]);
 OFFSET(PT_R5, pt_regs, regs[5]);
 OFFSET(PT_R6, pt_regs, regs[6]);
 OFFSET(PT_R7, pt_regs, regs[7]);
 OFFSET(PT_R8, pt_regs, regs[8]);
 OFFSET(PT_R9, pt_regs, regs[9]);
 OFFSET(PT_R10, pt_regs, regs[10]);
 OFFSET(PT_R11, pt_regs, regs[11]);
 OFFSET(PT_R12, pt_regs, regs[12]);
 OFFSET(PT_R13, pt_regs, regs[13]);
 OFFSET(PT_R14, pt_regs, regs[14]);
 OFFSET(PT_R15, pt_regs, regs[15]);
 OFFSET(PT_R16, pt_regs, regs[16]);
 OFFSET(PT_R17, pt_regs, regs[17]);
 OFFSET(PT_R18, pt_regs, regs[18]);
 OFFSET(PT_R19, pt_regs, regs[19]);
 OFFSET(PT_R20, pt_regs, regs[20]);
 OFFSET(PT_R21, pt_regs, regs[21]);
 OFFSET(PT_R22, pt_regs, regs[22]);
 OFFSET(PT_R23, pt_regs, regs[23]);
 OFFSET(PT_R24, pt_regs, regs[24]);
 OFFSET(PT_R25, pt_regs, regs[25]);
 OFFSET(PT_R26, pt_regs, regs[26]);
 OFFSET(PT_R27, pt_regs, regs[27]);
 OFFSET(PT_R28, pt_regs, regs[28]);
 OFFSET(PT_R29, pt_regs, regs[29]);
 OFFSET(PT_R30, pt_regs, regs[30]);
 OFFSET(PT_R31, pt_regs, regs[31]);
 OFFSET(PT_CRMD, pt_regs, csr_crmd);
 OFFSET(PT_PRMD, pt_regs, csr_prmd);
 OFFSET(PT_EUEN, pt_regs, csr_euen);
 OFFSET(PT_ECFG, pt_regs, csr_ecfg);
 OFFSET(PT_ESTAT, pt_regs, csr_estat);
 OFFSET(PT_ERA, pt_regs, csr_era);
 OFFSET(PT_BVADDR, pt_regs, csr_badvaddr);
 OFFSET(PT_ORIG_A0, pt_regs, orig_a0);
 DEFINE(PT_SIZE, sizeof(struct pt_regs));
 BLANK();
}

static void __used output_task_defines(void)
{
 COMMENT("LoongArch task_struct offsets.");
 OFFSET(TASK_STATE, task_struct, __state);
 OFFSET(TASK_THREAD_INFO, task_struct, stack);
 OFFSET(TASK_FLAGS, task_struct, flags);
 OFFSET(TASK_MM, task_struct, mm);
 OFFSET(TASK_PID, task_struct, pid);
#if defined(CONFIG_STACKPROTECTOR)
 OFFSET(TASK_STACK_CANARY, task_struct, stack_canary);
#endif
 DEFINE(TASK_STRUCT_SIZE, sizeof(struct task_struct));
 BLANK();
}

static void __used output_thread_info_defines(void)
{
 COMMENT("LoongArch thread_info offsets.");
 OFFSET(TI_TASK, thread_info, task);
 OFFSET(TI_FLAGS, thread_info, flags);
 OFFSET(TI_TP_VALUE, thread_info, tp_value);
 OFFSET(TI_CPU, thread_info, cpu);
 OFFSET(TI_PRE_COUNT, thread_info, preempt_count);
 OFFSET(TI_REGS, thread_info, regs);
 DEFINE(_THREAD_SIZE, THREAD_SIZE);
 DEFINE(_THREAD_MASK, THREAD_MASK);
 DEFINE(_IRQ_STACK_SIZE, IRQ_STACK_SIZE);
 DEFINE(_IRQ_STACK_START, IRQ_STACK_START);
 BLANK();
}

static void __used output_thread_defines(void)
{
 COMMENT("LoongArch specific thread_struct offsets.");
 OFFSET(THREAD_REG01, task_struct, thread.reg01);
 OFFSET(THREAD_REG03, task_struct, thread.reg03);
 OFFSET(THREAD_REG22, task_struct, thread.reg22);
 OFFSET(THREAD_REG23, task_struct, thread.reg23);
 OFFSET(THREAD_REG24, task_struct, thread.reg24);
 OFFSET(THREAD_REG25, task_struct, thread.reg25);
 OFFSET(THREAD_REG26, task_struct, thread.reg26);
 OFFSET(THREAD_REG27, task_struct, thread.reg27);
 OFFSET(THREAD_REG28, task_struct, thread.reg28);
 OFFSET(THREAD_REG29, task_struct, thread.reg29);
 OFFSET(THREAD_REG30, task_struct, thread.reg30);
 OFFSET(THREAD_REG31, task_struct, thread.reg31);
 OFFSET(THREAD_SCHED_RA, task_struct, thread.sched_ra);
 OFFSET(THREAD_SCHED_CFA, task_struct, thread.sched_cfa);
 OFFSET(THREAD_CSRCRMD, task_struct,
        thread.csr_crmd);
 OFFSET(THREAD_CSRPRMD, task_struct,
        thread.csr_prmd);
 OFFSET(THREAD_CSREUEN, task_struct,
        thread.csr_euen);
 OFFSET(THREAD_CSRECFG, task_struct,
        thread.csr_ecfg);

 OFFSET(THREAD_FPU, task_struct, thread.fpu);

 OFFSET(THREAD_BVADDR, task_struct, \
        thread.csr_badvaddr);
 OFFSET(THREAD_ECODE, task_struct, \
        thread.error_code);
 OFFSET(THREAD_TRAPNO, task_struct, thread.trap_nr);
 BLANK();
}

static void __used output_thread_fpu_defines(void)
{
 OFFSET(THREAD_FPR0, loongarch_fpu, fpr[0]);
 OFFSET(THREAD_FPR1, loongarch_fpu, fpr[1]);
 OFFSET(THREAD_FPR2, loongarch_fpu, fpr[2]);
 OFFSET(THREAD_FPR3, loongarch_fpu, fpr[3]);
 OFFSET(THREAD_FPR4, loongarch_fpu, fpr[4]);
 OFFSET(THREAD_FPR5, loongarch_fpu, fpr[5]);
 OFFSET(THREAD_FPR6, loongarch_fpu, fpr[6]);
 OFFSET(THREAD_FPR7, loongarch_fpu, fpr[7]);
 OFFSET(THREAD_FPR8, loongarch_fpu, fpr[8]);
 OFFSET(THREAD_FPR9, loongarch_fpu, fpr[9]);
 OFFSET(THREAD_FPR10, loongarch_fpu, fpr[10]);
 OFFSET(THREAD_FPR11, loongarch_fpu, fpr[11]);
 OFFSET(THREAD_FPR12, loongarch_fpu, fpr[12]);
 OFFSET(THREAD_FPR13, loongarch_fpu, fpr[13]);
 OFFSET(THREAD_FPR14, loongarch_fpu, fpr[14]);
 OFFSET(THREAD_FPR15, loongarch_fpu, fpr[15]);
 OFFSET(THREAD_FPR16, loongarch_fpu, fpr[16]);
 OFFSET(THREAD_FPR17, loongarch_fpu, fpr[17]);
 OFFSET(THREAD_FPR18, loongarch_fpu, fpr[18]);
 OFFSET(THREAD_FPR19, loongarch_fpu, fpr[19]);
 OFFSET(THREAD_FPR20, loongarch_fpu, fpr[20]);
 OFFSET(THREAD_FPR21, loongarch_fpu, fpr[21]);
 OFFSET(THREAD_FPR22, loongarch_fpu, fpr[22]);
 OFFSET(THREAD_FPR23, loongarch_fpu, fpr[23]);
 OFFSET(THREAD_FPR24, loongarch_fpu, fpr[24]);
 OFFSET(THREAD_FPR25, loongarch_fpu, fpr[25]);
 OFFSET(THREAD_FPR26, loongarch_fpu, fpr[26]);
 OFFSET(THREAD_FPR27, loongarch_fpu, fpr[27]);
 OFFSET(THREAD_FPR28, loongarch_fpu, fpr[28]);
 OFFSET(THREAD_FPR29, loongarch_fpu, fpr[29]);
 OFFSET(THREAD_FPR30, loongarch_fpu, fpr[30]);
 OFFSET(THREAD_FPR31, loongarch_fpu, fpr[31]);

 OFFSET(THREAD_FCSR, loongarch_fpu, fcsr);
 OFFSET(THREAD_FCC,  loongarch_fpu, fcc);
 OFFSET(THREAD_FTOP, loongarch_fpu, ftop);
 BLANK();
}

static void __used output_thread_lbt_defines(void)
{
 OFFSET(THREAD_SCR0,  loongarch_lbt, scr0);
 OFFSET(THREAD_SCR1,  loongarch_lbt, scr1);
 OFFSET(THREAD_SCR2,  loongarch_lbt, scr2);
 OFFSET(THREAD_SCR3,  loongarch_lbt, scr3);
 OFFSET(THREAD_EFLAGS, loongarch_lbt, eflags);
 BLANK();
}

static void __used output_mm_defines(void)
{
 COMMENT("Size of struct page");
 DEFINE(STRUCT_PAGE_SIZE, sizeof(struct page));
 BLANK();
 COMMENT("Linux mm_struct offsets.");
 OFFSET(MM_USERS, mm_struct, mm_users);
 OFFSET(MM_PGD, mm_struct, pgd);
 OFFSET(MM_CONTEXT, mm_struct, context);
 BLANK();
 DEFINE(_PGD_T_SIZE, sizeof(pgd_t));
 DEFINE(_PMD_T_SIZE, sizeof(pmd_t));
 DEFINE(_PTE_T_SIZE, sizeof(pte_t));
 BLANK();
 DEFINE(_PGD_T_LOG2, PGD_T_LOG2);
#ifndef __PAGETABLE_PMD_FOLDED
 DEFINE(_PMD_T_LOG2, PMD_T_LOG2);
#endif
 DEFINE(_PTE_T_LOG2, PTE_T_LOG2);
 BLANK();
 DEFINE(_PMD_SHIFT, PMD_SHIFT);
 DEFINE(_PGDIR_SHIFT, PGDIR_SHIFT);
 BLANK();
 DEFINE(_PTRS_PER_PGD, PTRS_PER_PGD);
 DEFINE(_PTRS_PER_PMD, PTRS_PER_PMD);
 DEFINE(_PTRS_PER_PTE, PTRS_PER_PTE);
 BLANK();
 DEFINE(_PAGE_SHIFT, PAGE_SHIFT);
 DEFINE(_PAGE_SIZE, PAGE_SIZE);
 BLANK();
}

static void __used output_sc_defines(void)
{
 COMMENT("Linux sigcontext offsets.");
 OFFSET(SC_REGS, sigcontext, sc_regs);
 OFFSET(SC_PC, sigcontext, sc_pc);
 BLANK();
}

static void __used output_signal_defines(void)
{
 COMMENT("Linux signal numbers.");
 DEFINE(_SIGHUP, SIGHUP);
 DEFINE(_SIGINT, SIGINT);
 DEFINE(_SIGQUIT, SIGQUIT);
 DEFINE(_SIGILL, SIGILL);
 DEFINE(_SIGTRAP, SIGTRAP);
 DEFINE(_SIGIOT, SIGIOT);
 DEFINE(_SIGABRT, SIGABRT);
 DEFINE(_SIGFPE, SIGFPE);
 DEFINE(_SIGKILL, SIGKILL);
 DEFINE(_SIGBUS, SIGBUS);
 DEFINE(_SIGSEGV, SIGSEGV);
 DEFINE(_SIGSYS, SIGSYS);
 DEFINE(_SIGPIPE, SIGPIPE);
 DEFINE(_SIGALRM, SIGALRM);
 DEFINE(_SIGTERM, SIGTERM);
 DEFINE(_SIGUSR1, SIGUSR1);
 DEFINE(_SIGUSR2, SIGUSR2);
 DEFINE(_SIGCHLD, SIGCHLD);
 DEFINE(_SIGPWR, SIGPWR);
 DEFINE(_SIGWINCH, SIGWINCH);
 DEFINE(_SIGURG, SIGURG);
 DEFINE(_SIGIO, SIGIO);
 DEFINE(_SIGSTOP, SIGSTOP);
 DEFINE(_SIGTSTP, SIGTSTP);
 DEFINE(_SIGCONT, SIGCONT);
 DEFINE(_SIGTTIN, SIGTTIN);
 DEFINE(_SIGTTOU, SIGTTOU);
 DEFINE(_SIGVTALRM, SIGVTALRM);
 DEFINE(_SIGPROF, SIGPROF);
 DEFINE(_SIGXCPU, SIGXCPU);
 DEFINE(_SIGXFSZ, SIGXFSZ);
 BLANK();
}

#ifdef CONFIG_SMP
static void __used output_smpboot_defines(void)
{
 COMMENT("Linux smp cpu boot offsets.");
 OFFSET(CPU_BOOT_STACK, secondary_data, stack);
 OFFSET(CPU_BOOT_TINFO, secondary_data, thread_info);
 BLANK();
}
#endif

#ifdef CONFIG_HIBERNATION
static void __used output_pbe_defines(void)
{
 COMMENT("Linux struct pbe offsets.");
 OFFSET(PBE_ADDRESS, pbe, address);
 OFFSET(PBE_ORIG_ADDRESS, pbe, orig_address);
 OFFSET(PBE_NEXT, pbe, next);
 DEFINE(PBE_SIZE, sizeof(struct pbe));
 BLANK();
}
#endif

static void __used output_kvm_defines(void)
{
 COMMENT("KVM/LoongArch Specific offsets.");

 OFFSET(VCPU_FCC, kvm_vcpu_arch, fpu.fcc);
 OFFSET(VCPU_FCSR0, kvm_vcpu_arch, fpu.fcsr);
 BLANK();

 OFFSET(KVM_VCPU_ARCH, kvm_vcpu, arch);
 OFFSET(KVM_VCPU_KVM, kvm_vcpu, kvm);
 OFFSET(KVM_VCPU_RUN, kvm_vcpu, run);
 BLANK();

 OFFSET(KVM_ARCH_HSP, kvm_vcpu_arch, host_sp);
 OFFSET(KVM_ARCH_HTP, kvm_vcpu_arch, host_tp);
 OFFSET(KVM_ARCH_HPGD, kvm_vcpu_arch, host_pgd);
 OFFSET(KVM_ARCH_KVMPGD, kvm_vcpu_arch, kvm_pgd);
 OFFSET(KVM_ARCH_HANDLE_EXIT, kvm_vcpu_arch, handle_exit);
 OFFSET(KVM_ARCH_HEENTRY, kvm_vcpu_arch, host_eentry);
 OFFSET(KVM_ARCH_GEENTRY, kvm_vcpu_arch, guest_eentry);
 OFFSET(KVM_ARCH_GPC, kvm_vcpu_arch, pc);
 OFFSET(KVM_ARCH_GGPR, kvm_vcpu_arch, gprs);
 OFFSET(KVM_ARCH_HBADI, kvm_vcpu_arch, badi);
 OFFSET(KVM_ARCH_HBADV, kvm_vcpu_arch, badv);
 OFFSET(KVM_ARCH_HECFG, kvm_vcpu_arch, host_ecfg);
 OFFSET(KVM_ARCH_HESTAT, kvm_vcpu_arch, host_estat);
 OFFSET(KVM_ARCH_HPERCPU, kvm_vcpu_arch, host_percpu);

 OFFSET(KVM_GPGD, kvm, arch.pgd);
 BLANK();
}

static void __used output_vdso_defines(void)
{
 COMMENT("LoongArch vDSO offsets.");

 DEFINE(__VDSO_PAGES, VDSO_NR_PAGES);
 BLANK();
}

Messung V0.5
C=91 H=88 G=89

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge