Put all the name/value pairs in an initialized array of structures

so that this can be compiled to assembly code and then translated
directly into assym.h by a simple awk program (genassym.awk).
This program can still be run the old way for verification.
This commit is contained in:
gwr 1997-02-03 19:31:44 +00:00
parent d8deae5099
commit 165a7a3eeb
3 changed files with 284 additions and 269 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: genassym.c,v 1.36 1997/01/27 20:43:55 gwr Exp $ */ /* $NetBSD: genassym.c,v 1.37 1997/02/03 19:31:44 gwr Exp $ */
/* /*
* Copyright (c) 1994, 1995 Gordon W. Ross * Copyright (c) 1994, 1995 Gordon W. Ross
@ -37,6 +37,16 @@
* from: @(#)genassym.c 8.3 (Berkeley) 1/4/94 * from: @(#)genassym.c 8.3 (Berkeley) 1/4/94
*/ */
/*
* This program is designed so that it can be both:
* (1) Run on the native machine and generated output
* (2) Converted to assembly and parsed by genassym.awk
* to produce the same output as (1) does.
* The second method is done as follows:
* m68k-xxx-gcc [options] -S .../genassym.c
* awk -f genassym.awk < genassym.s > assym.h
*/
#include <sys/param.h> #include <sys/param.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/cdefs.h> #include <sys/cdefs.h>
@ -63,36 +73,7 @@
extern void printf __P((char *fmt, ...)); extern void printf __P((char *fmt, ...));
extern void exit __P((int)); extern void exit __P((int));
#if 1 /* XXX - Temporary hack... */ #define def(name, value) { name, value }
/*
* Make this work correctly on a SPARC!
* Should be able to fix this by adding:
* __attribute__((packed)) where needed.
*/
struct mytrapframe {
int tf_regs[16];
short tf_pad;
short tf_stackadj;
u_short tf_sr;
u_short tf_pc[2]; /* XXX was: u_int tf_pc; */
u_short tf_format:4,
tf_vector:12;
};
#define trapframe mytrapframe
#endif /* XXX */
void
def(what, val)
char *what;
int val;
{
printf("#define\t%s\t", what);
/* Hack to make the output easier to verify. */
if ((val < -99) || (val > 999))
printf("0x%x\n", val);
else
printf("%d\n", val);
}
#ifdef __STDC__ #ifdef __STDC__
#define def1(name) def(#name, name) #define def1(name) def(#name, name)
@ -100,54 +81,60 @@ def(what, val)
#define def1(name) def("name", name) #define def1(name) def("name", name)
#endif #endif
main() #define offsetof(type, member) ((size_t)(&((type *)0)->member))
{
struct pcb *pcb = (struct pcb *) 0; /*
struct proc *p = (struct proc *) 0; * Note: genassym.awk cares about the form of this structure,
struct vmspace *vms = (struct vmspace *) 0; * as well as the names and placement of the "asdefs" array
struct trapframe *tf = (struct trapframe *) 0; * and the "nassefs" variable below. Clever, but fragile.
struct fpframe *fpf = (struct fpframe *) 0; */
struct nv {
char n[28];
int v;
};
struct nv assyms[] = {
/* bus error stuff */ /* bus error stuff */
def1(BUSERR_REG); def1(BUSERR_REG),
def1(BUSERR_MMU); def1(BUSERR_MMU),
/* 68k isms */ /* 68k isms */
def1(PSL_LOWIPL); def1(PSL_LOWIPL),
def1(PSL_HIGHIPL); def1(PSL_HIGHIPL),
def1(PSL_USER); def1(PSL_USER),
def1(PSL_S); def1(PSL_S),
def1(FC_CONTROL); def1(FC_CONTROL),
def1(FC_SUPERD); def1(FC_SUPERD),
def1(FC_USERD); def1(FC_USERD),
def1(IC_CLEAR); def1(IC_CLEAR),
/* sun3 control space isms */ /* sun3 control space isms */
def1(CONTEXT_0); def1(CONTEXT_0),
def1(CONTEXT_REG); def1(CONTEXT_REG),
def1(CONTEXT_NUM); def1(CONTEXT_NUM),
def1(SYSTEM_ENAB); def1(SYSTEM_ENAB),
def1(SYSTEM_ENAB_FPP); def1(SYSTEM_ENAB_FPP),
def1(SEGMAP_BASE); def1(SEGMAP_BASE),
def1(NBPG); def1(NBPG),
def1(NBSG); def1(NBSG),
/* sun3 memory map */ /* sun3 memory map */
def1(DVMA_SPACE_START); def1(DVMA_SPACE_START),
def1(MONSTART); def1(MONSTART),
def1(PROM_BASE); def1(PROM_BASE),
def1(USRSTACK); def1(USRSTACK),
/* kernel-isms */ /* kernel-isms */
def1(KERNBASE); def1(KERNBASE),
def1(USPACE); def1(USPACE),
/* system calls */ /* system calls */
def1(SYS_sigreturn); def1(SYS_sigreturn),
/* errno-isms */ /* errno-isms */
def1(EFAULT); def1(EFAULT),
def1(ENAMETOOLONG); def1(ENAMETOOLONG),
/* trap types: locore.s includes trap.h */ /* trap types: locore.s includes trap.h */
@ -156,43 +143,61 @@ main()
*/ */
/* proc fields and values */ /* proc fields and values */
def("P_FORW", &p->p_forw); def("P_FORW", offsetof(struct proc, p_forw)),
def("P_BACK", &p->p_back); def("P_BACK", offsetof(struct proc, p_back)),
def("P_VMSPACE", &p->p_vmspace); def("P_VMSPACE", offsetof(struct proc, p_vmspace)),
def("P_ADDR", &p->p_addr); def("P_ADDR", offsetof(struct proc, p_addr)),
def("P_PRIORITY", &p->p_priority); def("P_PRIORITY", offsetof(struct proc, p_priority)),
def("P_STAT", &p->p_stat); def("P_STAT", offsetof(struct proc, p_stat)),
def("P_WCHAN", &p->p_wchan); def("P_WCHAN", offsetof(struct proc, p_wchan)),
def("P_FLAG", &p->p_flag); def("P_FLAG", offsetof(struct proc, p_flag)),
def("P_MDFLAG", &p->p_md.md_flags); def("P_MDFLAG", offsetof(struct proc, p_md.md_flags)),
def("P_MDREGS", &p->p_md.md_regs); def("P_MDREGS", offsetof(struct proc, p_md.md_regs)),
def1(SRUN); def1(SRUN),
/* HP-UX trace bit */ /* XXX: HP-UX trace bit? */
def("MDP_TRCB", ffs(MDP_HPUXTRACE) - 1);
/* VM structure fields */ /* VM structure fields */
def("VM_PMAP", &vms->vm_pmap); def("VM_PMAP", offsetof(struct vmspace, vm_pmap)),
def("VM_PMAP_CTX", &vms->vm_pmap.pm_ctxnum); def("VM_PMAP_CTX", offsetof(struct vmspace, vm_pmap.pm_ctxnum)),
/* pcb offsets */ /* pcb offsets */
def("PCB_FLAGS", &pcb->pcb_flags); def("PCB_FLAGS", offsetof(struct pcb, pcb_flags)),
def("PCB_PS", &pcb->pcb_ps); def("PCB_PS", offsetof(struct pcb, pcb_ps)),
def("PCB_USP", &pcb->pcb_usp); def("PCB_USP", offsetof(struct pcb, pcb_usp)),
def("PCB_REGS", pcb->pcb_regs); def("PCB_REGS", offsetof(struct pcb, pcb_regs[0])),
def("PCB_ONFAULT", &pcb->pcb_onfault); def("PCB_ONFAULT", offsetof(struct pcb, pcb_onfault)),
def("PCB_FPCTX", &pcb->pcb_fpregs); def("PCB_FPCTX", offsetof(struct pcb, pcb_fpregs)),
def("SIZEOF_PCB", sizeof(*pcb)); def("SIZEOF_PCB", sizeof(struct pcb)),
/* exception frame offset/sizes */ /* exception frame offset/sizes */
def("FR_SP", &tf->tf_regs[15]); def("FR_SP", offsetof(struct trapframe, tf_regs[15])),
def("FR_ADJ", &tf->tf_stackadj); def("FR_ADJ", offsetof(struct trapframe, tf_stackadj)),
def("FR_HW", &tf->tf_sr); def("FR_HW", offsetof(struct trapframe, tf_sr)),
def("FR_SIZE", sizeof(*tf)); def("FR_SIZE", sizeof(struct trapframe)),
/* FP frame offsets */ /* FP frame offsets */
def("FPF_REGS", &fpf->fpf_regs[0]); def("FPF_REGS", offsetof(struct fpframe, fpf_regs[0])),
def("FPF_FPCR", &fpf->fpf_fpcr); def("FPF_FPCR", offsetof(struct fpframe, fpf_fpcr)),
};
int nassyms = sizeof(assyms)/sizeof(assyms[0]);
main()
{
char *name;
int i, val;
for (i = 0; i < nassyms; i++) {
name = assyms[i].n;
val = assyms[i].v;
printf("#define\t%s\t", name);
/* Hack to make the output easier to verify. */
if ((val < 0) || (val > 999))
printf("0x%x\n", val);
else
printf("%d\n", val);
}
exit(0); exit(0);
} }

View File

@ -1,4 +1,4 @@
/* $NetBSD: genassym.c,v 1.4 1997/01/23 22:44:47 gwr Exp $ */ /* $NetBSD: genassym.c,v 1.5 1997/02/03 19:33:42 gwr Exp $ */
/* /*
* Copyright (c) 1994, 1995 Gordon W. Ross * Copyright (c) 1994, 1995 Gordon W. Ross
@ -37,6 +37,16 @@
* from: @(#)genassym.c 8.3 (Berkeley) 1/4/94 * from: @(#)genassym.c 8.3 (Berkeley) 1/4/94
*/ */
/*
* This program is designed so that it can be both:
* (1) Run on the native machine and generated output
* (2) Converted to assembly and parsed by genassym.awk
* to produce the same output as (1) does.
* The second method is done as follows:
* m68k-xxx-gcc [options] -S .../genassym.c
* awk -f genassym.awk < genassym.s > assym.h
*/
#include <sys/param.h> #include <sys/param.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/cdefs.h> #include <sys/cdefs.h>
@ -62,36 +72,7 @@
extern void printf __P((char *fmt, ...)); extern void printf __P((char *fmt, ...));
extern void exit __P((int)); extern void exit __P((int));
#if 1 /* XXX - Temporary hack... */ #define def(name, value) { name, value }
/*
* Make this work correctly on a SPARC!
* Should be able to fix this by adding:
* __attribute__((packed)) where needed.
*/
struct mytrapframe {
int tf_regs[16];
short tf_pad;
short tf_stackadj;
u_short tf_sr;
u_short tf_pc[2]; /* XXX was: u_int tf_pc; */
u_short tf_format:4,
tf_vector:12;
};
#define trapframe mytrapframe
#endif /* XXX */
void
def(what, val)
char *what;
int val;
{
printf("#define\t%s\t", what);
/* Hack to make the output easier to verify. */
if ((val < -99) || (val > 999))
printf("0x%x\n", val);
else
printf("%d\n", val);
}
#ifdef __STDC__ #ifdef __STDC__
#define def1(name) def(#name, name) #define def1(name) def(#name, name)
@ -99,46 +80,52 @@ def(what, val)
#define def1(name) def("name", name) #define def1(name) def("name", name)
#endif #endif
main() #define offsetof(type, member) ((size_t)(&((type *)0)->member))
{
struct pcb *pcb = (struct pcb *) 0; /*
struct proc *p = (struct proc *) 0; * Note: genassym.awk cares about the form of this structure,
struct vmspace *vms = (struct vmspace *) 0; * as well as the names and placement of the "asdefs" array
struct trapframe *tf = (struct trapframe *) 0; * and the "nassefs" variable below. Clever, but fragile.
struct fpframe *fpf = (struct fpframe *) 0; */
struct nv {
char n[28];
int v;
};
struct nv assyms[] = {
/* bus error stuff */ /* bus error stuff */
/* def1(BUSERR_REG); XXX */ /* def1(BUSERR_REG), XXX */
/* def1(BUSERR_MMU); XXX */ /* def1(BUSERR_MMU), XXX */
/* 68k isms */ /* 68k isms */
def1(PSL_LOWIPL); def1(PSL_LOWIPL),
def1(PSL_HIGHIPL); def1(PSL_HIGHIPL),
def1(PSL_USER); def1(PSL_USER),
def1(PSL_S); def1(PSL_S),
def1(FC_CONTROL); def1(FC_CONTROL),
def1(FC_SUPERD); def1(FC_SUPERD),
def1(FC_USERD); def1(FC_USERD),
def1(IC_CLEAR); def1(IC_CLEAR),
def1(DC_CLEAR); def1(DC_CLEAR),
def1(CACHE_CLR); def1(CACHE_CLR),
/* sun3 memory map */ /* sun3 memory map */
def1(DVMA_SPACE_START); def1(DVMA_SPACE_START),
def1(MONSTART); def1(MONSTART),
def1(PROM_BASE); def1(PROM_BASE),
def1(USRSTACK); def1(USRSTACK),
/* kernel-isms */ /* kernel-isms */
def1(KERNBASE); def1(KERNBASE),
def1(USPACE); def1(USPACE),
/* system calls */ /* system calls */
def1(SYS_sigreturn); def1(SYS_sigreturn),
/* errno-isms */ /* errno-isms */
def1(EFAULT); def1(EFAULT),
def1(ENAMETOOLONG); def1(ENAMETOOLONG),
/* trap types: locore.s includes trap.h */ /* trap types: locore.s includes trap.h */
@ -147,44 +134,62 @@ main()
*/ */
/* proc fields and values */ /* proc fields and values */
def("P_FORW", &p->p_forw); def("P_FORW", offsetof(struct proc, p_forw)),
def("P_BACK", &p->p_back); def("P_BACK", offsetof(struct proc, p_back)),
def("P_VMSPACE", &p->p_vmspace); def("P_VMSPACE", offsetof(struct proc, p_vmspace)),
def("P_ADDR", &p->p_addr); def("P_ADDR", offsetof(struct proc, p_addr)),
def("P_PRIORITY", &p->p_priority); def("P_PRIORITY", offsetof(struct proc, p_priority)),
def("P_STAT", &p->p_stat); def("P_STAT", offsetof(struct proc, p_stat)),
def("P_WCHAN", &p->p_wchan); def("P_WCHAN", offsetof(struct proc, p_wchan)),
def("P_FLAG", &p->p_flag); def("P_FLAG", offsetof(struct proc, p_flag)),
def("P_MDFLAG", &p->p_md.md_flags); def("P_MDFLAG", offsetof(struct proc, p_md.md_flags)),
def("P_MDREGS", &p->p_md.md_regs); def("P_MDREGS", offsetof(struct proc, p_md.md_regs)),
def1(SRUN); def1(SRUN),
/* HP-UX trace bit */ /* XXX: HP-UX trace bit? */
def("MDP_TRCB", ffs(MDP_HPUXTRACE) - 1);
/* VM structure fields */ /* VM structure fields */
def("VM_PMAP", &vms->vm_pmap); def("VM_PMAP", offsetof(struct vmspace, vm_pmap)),
def("VM_PMAP_MMUCRP", &vms->vm_pmap.pm_mmucrp); def("VM_PMAP_MMUCRP", offsetof(struct vmspace, vm_pmap.pm_mmucrp)),
def("VM_PMAP_A_TMGR", &vms->vm_pmap.pm_a_tmgr); def("VM_PMAP_A_TMGR", offsetof(struct vmspace, vm_pmap.pm_a_tmgr)),
/* pcb offsets */ /* pcb offsets */
def("PCB_FLAGS", &pcb->pcb_flags); def("PCB_FLAGS", offsetof(struct pcb, pcb_flags)),
def("PCB_PS", &pcb->pcb_ps); def("PCB_PS", offsetof(struct pcb, pcb_ps)),
def("PCB_USP", &pcb->pcb_usp); def("PCB_USP", offsetof(struct pcb, pcb_usp)),
def("PCB_REGS", pcb->pcb_regs); def("PCB_REGS", offsetof(struct pcb, pcb_regs[0])),
def("PCB_ONFAULT", &pcb->pcb_onfault); def("PCB_ONFAULT", offsetof(struct pcb, pcb_onfault)),
def("PCB_FPCTX", &pcb->pcb_fpregs); def("PCB_FPCTX", offsetof(struct pcb, pcb_fpregs)),
def("SIZEOF_PCB", sizeof(*pcb)); def("SIZEOF_PCB", sizeof(struct pcb)),
/* exception frame offset/sizes */ /* exception frame offset/sizes */
def("FR_SP", &tf->tf_regs[15]); def("FR_SP", offsetof(struct trapframe, tf_regs[15])),
def("FR_ADJ", &tf->tf_stackadj); def("FR_ADJ", offsetof(struct trapframe, tf_stackadj)),
def("FR_HW", &tf->tf_sr); def("FR_HW", offsetof(struct trapframe, tf_sr)),
def("FR_SIZE", sizeof(*tf)); def("FR_SIZE", sizeof(struct trapframe)),
/* FP frame offsets */ /* FP frame offsets */
def("FPF_REGS", &fpf->fpf_regs[0]); def("FPF_REGS", offsetof(struct fpframe, fpf_regs[0])),
def("FPF_FPCR", &fpf->fpf_fpcr); def("FPF_FPCR", offsetof(struct fpframe, fpf_fpcr)),
};
int nassyms = sizeof(assyms)/sizeof(assyms[0]);
main()
{
char *name;
int i, val;
for (i = 0; i < nassyms; i++) {
name = assyms[i].n;
val = assyms[i].v;
printf("#define\t%s\t", name);
/* Hack to make the output easier to verify. */
if ((val < 0) || (val > 999))
printf("0x%x\n", val);
else
printf("%d\n", val);
}
exit(0); exit(0);
} }

View File

@ -1,4 +1,4 @@
/* $NetBSD: genassym.c,v 1.4 1997/01/23 22:44:47 gwr Exp $ */ /* $NetBSD: genassym.c,v 1.5 1997/02/03 19:33:42 gwr Exp $ */
/* /*
* Copyright (c) 1994, 1995 Gordon W. Ross * Copyright (c) 1994, 1995 Gordon W. Ross
@ -37,6 +37,16 @@
* from: @(#)genassym.c 8.3 (Berkeley) 1/4/94 * from: @(#)genassym.c 8.3 (Berkeley) 1/4/94
*/ */
/*
* This program is designed so that it can be both:
* (1) Run on the native machine and generated output
* (2) Converted to assembly and parsed by genassym.awk
* to produce the same output as (1) does.
* The second method is done as follows:
* m68k-xxx-gcc [options] -S .../genassym.c
* awk -f genassym.awk < genassym.s > assym.h
*/
#include <sys/param.h> #include <sys/param.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/cdefs.h> #include <sys/cdefs.h>
@ -62,36 +72,7 @@
extern void printf __P((char *fmt, ...)); extern void printf __P((char *fmt, ...));
extern void exit __P((int)); extern void exit __P((int));
#if 1 /* XXX - Temporary hack... */ #define def(name, value) { name, value }
/*
* Make this work correctly on a SPARC!
* Should be able to fix this by adding:
* __attribute__((packed)) where needed.
*/
struct mytrapframe {
int tf_regs[16];
short tf_pad;
short tf_stackadj;
u_short tf_sr;
u_short tf_pc[2]; /* XXX was: u_int tf_pc; */
u_short tf_format:4,
tf_vector:12;
};
#define trapframe mytrapframe
#endif /* XXX */
void
def(what, val)
char *what;
int val;
{
printf("#define\t%s\t", what);
/* Hack to make the output easier to verify. */
if ((val < -99) || (val > 999))
printf("0x%x\n", val);
else
printf("%d\n", val);
}
#ifdef __STDC__ #ifdef __STDC__
#define def1(name) def(#name, name) #define def1(name) def(#name, name)
@ -99,46 +80,52 @@ def(what, val)
#define def1(name) def("name", name) #define def1(name) def("name", name)
#endif #endif
main() #define offsetof(type, member) ((size_t)(&((type *)0)->member))
{
struct pcb *pcb = (struct pcb *) 0; /*
struct proc *p = (struct proc *) 0; * Note: genassym.awk cares about the form of this structure,
struct vmspace *vms = (struct vmspace *) 0; * as well as the names and placement of the "asdefs" array
struct trapframe *tf = (struct trapframe *) 0; * and the "nassefs" variable below. Clever, but fragile.
struct fpframe *fpf = (struct fpframe *) 0; */
struct nv {
char n[28];
int v;
};
struct nv assyms[] = {
/* bus error stuff */ /* bus error stuff */
/* def1(BUSERR_REG); XXX */ /* def1(BUSERR_REG), XXX */
/* def1(BUSERR_MMU); XXX */ /* def1(BUSERR_MMU), XXX */
/* 68k isms */ /* 68k isms */
def1(PSL_LOWIPL); def1(PSL_LOWIPL),
def1(PSL_HIGHIPL); def1(PSL_HIGHIPL),
def1(PSL_USER); def1(PSL_USER),
def1(PSL_S); def1(PSL_S),
def1(FC_CONTROL); def1(FC_CONTROL),
def1(FC_SUPERD); def1(FC_SUPERD),
def1(FC_USERD); def1(FC_USERD),
def1(IC_CLEAR); def1(IC_CLEAR),
def1(DC_CLEAR); def1(DC_CLEAR),
def1(CACHE_CLR); def1(CACHE_CLR),
/* sun3 memory map */ /* sun3 memory map */
def1(DVMA_SPACE_START); def1(DVMA_SPACE_START),
def1(MONSTART); def1(MONSTART),
def1(PROM_BASE); def1(PROM_BASE),
def1(USRSTACK); def1(USRSTACK),
/* kernel-isms */ /* kernel-isms */
def1(KERNBASE); def1(KERNBASE),
def1(USPACE); def1(USPACE),
/* system calls */ /* system calls */
def1(SYS_sigreturn); def1(SYS_sigreturn),
/* errno-isms */ /* errno-isms */
def1(EFAULT); def1(EFAULT),
def1(ENAMETOOLONG); def1(ENAMETOOLONG),
/* trap types: locore.s includes trap.h */ /* trap types: locore.s includes trap.h */
@ -147,44 +134,62 @@ main()
*/ */
/* proc fields and values */ /* proc fields and values */
def("P_FORW", &p->p_forw); def("P_FORW", offsetof(struct proc, p_forw)),
def("P_BACK", &p->p_back); def("P_BACK", offsetof(struct proc, p_back)),
def("P_VMSPACE", &p->p_vmspace); def("P_VMSPACE", offsetof(struct proc, p_vmspace)),
def("P_ADDR", &p->p_addr); def("P_ADDR", offsetof(struct proc, p_addr)),
def("P_PRIORITY", &p->p_priority); def("P_PRIORITY", offsetof(struct proc, p_priority)),
def("P_STAT", &p->p_stat); def("P_STAT", offsetof(struct proc, p_stat)),
def("P_WCHAN", &p->p_wchan); def("P_WCHAN", offsetof(struct proc, p_wchan)),
def("P_FLAG", &p->p_flag); def("P_FLAG", offsetof(struct proc, p_flag)),
def("P_MDFLAG", &p->p_md.md_flags); def("P_MDFLAG", offsetof(struct proc, p_md.md_flags)),
def("P_MDREGS", &p->p_md.md_regs); def("P_MDREGS", offsetof(struct proc, p_md.md_regs)),
def1(SRUN); def1(SRUN),
/* HP-UX trace bit */ /* XXX: HP-UX trace bit? */
def("MDP_TRCB", ffs(MDP_HPUXTRACE) - 1);
/* VM structure fields */ /* VM structure fields */
def("VM_PMAP", &vms->vm_pmap); def("VM_PMAP", offsetof(struct vmspace, vm_pmap)),
def("VM_PMAP_MMUCRP", &vms->vm_pmap.pm_mmucrp); def("VM_PMAP_MMUCRP", offsetof(struct vmspace, vm_pmap.pm_mmucrp)),
def("VM_PMAP_A_TMGR", &vms->vm_pmap.pm_a_tmgr); def("VM_PMAP_A_TMGR", offsetof(struct vmspace, vm_pmap.pm_a_tmgr)),
/* pcb offsets */ /* pcb offsets */
def("PCB_FLAGS", &pcb->pcb_flags); def("PCB_FLAGS", offsetof(struct pcb, pcb_flags)),
def("PCB_PS", &pcb->pcb_ps); def("PCB_PS", offsetof(struct pcb, pcb_ps)),
def("PCB_USP", &pcb->pcb_usp); def("PCB_USP", offsetof(struct pcb, pcb_usp)),
def("PCB_REGS", pcb->pcb_regs); def("PCB_REGS", offsetof(struct pcb, pcb_regs[0])),
def("PCB_ONFAULT", &pcb->pcb_onfault); def("PCB_ONFAULT", offsetof(struct pcb, pcb_onfault)),
def("PCB_FPCTX", &pcb->pcb_fpregs); def("PCB_FPCTX", offsetof(struct pcb, pcb_fpregs)),
def("SIZEOF_PCB", sizeof(*pcb)); def("SIZEOF_PCB", sizeof(struct pcb)),
/* exception frame offset/sizes */ /* exception frame offset/sizes */
def("FR_SP", &tf->tf_regs[15]); def("FR_SP", offsetof(struct trapframe, tf_regs[15])),
def("FR_ADJ", &tf->tf_stackadj); def("FR_ADJ", offsetof(struct trapframe, tf_stackadj)),
def("FR_HW", &tf->tf_sr); def("FR_HW", offsetof(struct trapframe, tf_sr)),
def("FR_SIZE", sizeof(*tf)); def("FR_SIZE", sizeof(struct trapframe)),
/* FP frame offsets */ /* FP frame offsets */
def("FPF_REGS", &fpf->fpf_regs[0]); def("FPF_REGS", offsetof(struct fpframe, fpf_regs[0])),
def("FPF_FPCR", &fpf->fpf_fpcr); def("FPF_FPCR", offsetof(struct fpframe, fpf_fpcr)),
};
int nassyms = sizeof(assyms)/sizeof(assyms[0]);
main()
{
char *name;
int i, val;
for (i = 0; i < nassyms; i++) {
name = assyms[i].n;
val = assyms[i].v;
printf("#define\t%s\t", name);
/* Hack to make the output easier to verify. */
if ((val < 0) || (val > 999))
printf("0x%x\n", val);
else
printf("%d\n", val);
}
exit(0); exit(0);
} }