import genassym and use it for sconst.h in kernel

This commit is contained in:
Ben Gras
2012-03-30 18:35:18 +02:00
parent 18f3961189
commit 8c4cdbd3c5
9 changed files with 354 additions and 36 deletions

View File

@@ -2,7 +2,8 @@
# Makefile for arch-dependent kernel code
.include <bsd.own.mk>
.PATH: ${.CURDIR}/arch/${ARCH}
HERE=${.CURDIR}/arch/${ARCH}
.PATH: ${HERE}
SRCS+= arch_do_vmctl.c \
arch_clock.c \
do_int86.c \
@@ -27,6 +28,20 @@ SRCS+= arch_do_vmctl.c \
arch_system.c \
pre_init.c
apic_asm.d klib.d mpx.d: procoffsets.h
# It's OK to hardcode the arch as i386 here as this and procoffsets.cf
# are i386-specific.
TMP=procoffsets.h.tmp
INCLS=../include/arch/i386/include/
PROCOFFSETSCF=procoffsets.cf
procoffsets.h: $(PROCOFFSETSCF) kernel.h proc.h $(INCLS)/stackframe.h $(INCLS)/archtypes.h
${_MKTARGET_CREATE}
cat ${HERE}/$(PROCOFFSETSCF) | \
${TOOL_GENASSYM} -- ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} >$TMP && \
mv -f $TMP $@
.ifdef CONFIG_SMP
SRCS += arch_smp.c trampoline.S
.endif

View File

@@ -0,0 +1,29 @@
include "kernel.h"
include "proc.h"
struct proc
member GSREG p_reg.gs
member FSREG p_reg.fs
member ESREG p_reg.es
member DSREG p_reg.ds
member DIREG p_reg.di
member SIREG p_reg.si
member BPREG p_reg.fp
member STREG p_reg.st
member BXREG p_reg.bx
member DXREG p_reg.dx
member CXREG p_reg.cx
member AXREG p_reg.retreg
member RETADR p_reg.retadr
member PCREG p_reg.pc
member CSREG p_reg.cs
member PSWREG p_reg.psw
member SPREG p_reg.sp
member SSREG p_reg.ss
member FP_SAVE_AREA_P p_fpu_state
member P_LDT_SEL p_seg.p_ldt_sel
member P_CR3 p_seg.p_cr3
member P_CR3_V p_seg.p_cr3_v
member P_LDT p_seg.p_ldt

View File

@@ -2,39 +2,7 @@
#define __SCONST_H__
#include "kernel/const.h"
/* Miscellaneous constants used in assembler code. */
W = _WORD_SIZE /* Machine word size. */
/* Offsets in struct proc. They MUST match proc.h. */
P_STACKBASE = 0
GSREG = P_STACKBASE
FSREG = GSREG+2 /* 386 introduces FS and GS segments*/
ESREG = FSREG+2
DSREG = ESREG+2
DIREG = DSREG+2
SIREG = DIREG+W
BPREG = SIREG+W
STREG = BPREG+W /* hole for another SP*/
BXREG = STREG+W
DXREG = BXREG+W
CXREG = DXREG+W
AXREG = CXREG+W
RETADR = AXREG+W /* return address for save() call*/
PCREG = RETADR+W
CSREG = PCREG+W
PSWREG = CSREG+W
SPREG = PSWREG+W
SSREG = SPREG+W
P_STACKTOP = SSREG+W
FP_SAVE_AREA_P = P_STACKTOP
P_LDT_SEL = FP_SAVE_AREA_P + 532
P_CR3 = P_LDT_SEL+W
P_CR3_V = P_CR3+4
P_LDT = P_CR3_V+W
P_MISC_FLAGS = P_LDT + 50
Msize = 9 /* size of a message in 32-bit words*/
#include "kernel/procoffsets.h"
/*
* offset to current process pointer right after trap, we assume we always have