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:
parent
d8deae5099
commit
165a7a3eeb
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user