9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 44da3fe0e987be3f32ff86ece4b4e0c0add8b114
parent 5dce7e124ce0295bdbad9200116ca0f05936ace7
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date:   Mon, 18 Feb 2019 11:54:57 +0000

Remove bss context structure

Change-Id: I574a49b6d76d45072616aa22696173ce41e5733e
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>

Diffstat:
Mdrivers/dev.c | 14+++++++-------
Mdrivers/devuart.c | 3++-
Minclude/rcode/ramfw.h | 4+---
Minclude/rcode/romfw.h | 36++++++++++++++++--------------------
Msrc/ramfw/rt.c | 2+-
Msrc/romfw/dlang.c | 32++++++++++++++++----------------
Msrc/romfw/rmc.c | 40++++++++++++++++++++--------------------
Mtarget/hosted/arch.c | 8--------
Mtarget/hosted/hosted.h | 1-
Mtarget/hosted/ram.c | 9++++++++-
Mtarget/hosted/rom.c | 33++++++++++++++++++++++-----------
Mtarget/native/Makefile | 8--------
Mtarget/native/arch.s | 6+-----
Dtarget/native/mktst | 13-------------
Mtarget/native/ram.c | 2++
Mtarget/native/rom.c | 42+++++++++++++++++++++++++++++-------------
16 files changed, 125 insertions(+), 128 deletions(-)

diff --git a/drivers/dev.c b/drivers/dev.c @@ -11,7 +11,7 @@ static Chan * newchan(void) { Chan *c, *lim; - struct devdata *dinfo = bss->devinfo; + struct devdata *dinfo = devinfo; lim = &dinfo->fds[NR_CHANS]; for (c = dinfo->fds; c < lim; c++) { @@ -27,7 +27,7 @@ static Bind * newbind(void) { Bind *b, *lim; - struct devdata *dinfo = bss->devinfo; + struct devdata *dinfo = devinfo; lim = &dinfo->binds[NR_BINDS]; for (b = dinfo->binds; b < lim; b++) { @@ -46,13 +46,13 @@ fd2chan(int fd) errno = EBADF; return NULL; } - return &bss->devinfo->fds[fd]; + return &devinfo->fds[fd]; } static int chan2fd(Chan *c) { - return (c == NULL) ? -1 : (c - bss->devinfo->fds); + return (c == NULL) ? -1 : (c - devinfo->fds); } static int @@ -128,7 +128,7 @@ walk(Chan *c, char *name) { Chan *cw, tmp; Bind *bp, *lim; - struct devdata *dinfo = bss->devinfo; + struct devdata *dinfo = devinfo; if (devtab[c->type]->walk(c, name) == 1) return 1; @@ -160,7 +160,7 @@ chanclose(Chan *c) struct devdata * devdata(void) { - return bss->devinfo; + return devinfo; } Chan * @@ -444,7 +444,7 @@ idev(void) Bind *b, *blim; dinfo = alloc(sizeof(*dinfo)); - bss->devinfo = dinfo; + devinfo = dinfo; clim = &dinfo->fds[NR_CHANS]; for (c = dinfo->fds; c < clim; c++) diff --git a/drivers/devuart.c b/drivers/devuart.c @@ -314,7 +314,8 @@ uartlink(Uartphy *phy, Attr *attr) siz = strlen(cfg); if (uartctl(up, cfg, siz) != siz) - panic("uartlink"); + //panic("uartlink"); + ; } const Dev uartdevtab = { diff --git a/include/rcode/ramfw.h b/include/rcode/ramfw.h @@ -1,3 +1 @@ -struct bssmap { - void *text; -}; +extern void *text; diff --git a/include/rcode/romfw.h b/include/rcode/romfw.h @@ -6,27 +6,23 @@ struct trapframe; struct rmucmd; struct devdata; -struct bssmap { - unsigned char in_panic; - unsigned char in_debug; - unsigned char dumpstack; - unsigned char backtrace; - void *text; - void *environ; - size_t bsssize; +extern unsigned char in_panic; +extern unsigned char in_debug; +extern unsigned char in_dumpstack; +extern unsigned char in_backtrace; +extern void *text; +extern void *environ; +extern size_t bsssize; - const char *errstr; - jmp_buf dbgrecover; - struct rmctab *rmctab; - struct trapframe *fp; - struct rmucmd *cmd; +extern const char *errstr; +extern jmp_buf dbgrecover; +extern struct rmctab *rmctab; +extern struct trapframe *framep; +extern struct rmucmd *rmucmd; - unsigned char enable; /* System realm enablement */ - unsigned char hascrypto; /* System-wide memory encryption */ - - int errno_; - - struct devdata *devinfo; -}; +extern unsigned char enable; /* System realm enablement */ +extern unsigned char hascrypto; /* System-wide memory encryption */ +extern int errno_; +extern struct devdata *devinfo; extern struct rmctab romtab; diff --git a/src/ramfw/rt.c b/src/ramfw/rt.c @@ -38,7 +38,7 @@ void * reloc(const void *addr) { uintptr_t a = (uintptr_t) addr; - uintptr_t off = (uintptr_t) bss->text; + uintptr_t off = (uintptr_t) text; return (void *) (a + off); } diff --git a/src/romfw/dlang.c b/src/romfw/dlang.c @@ -41,7 +41,7 @@ error(char *fmt, ...) kputs(PREFIX "ERR "); kvprint(fmt, va); kputc('\n'); - longjmp(bss->dbgrecover, 1); + longjmp(dbgrecover, 1); } static void @@ -123,7 +123,7 @@ do_set(const struct cmd *cmd, struct args *args) unsigned long long *reg = NULL; unsigned long long setval = 0; - reg = get_named_reg(args->argv[1], bss->fp); + reg = get_named_reg(args->argv[1], framep); if (reg == NULL) error("set: %s: not found", args->argv[1]); @@ -137,7 +137,7 @@ do_get(const struct cmd *cmd, struct args *args) { unsigned long long *reg = NULL; - reg = get_named_reg(args->argv[1], bss->fp); + reg = get_named_reg(args->argv[1], framep); if (reg == NULL) error("get: %s: not found", args->argv[1]); @@ -148,14 +148,14 @@ do_get(const struct cmd *cmd, struct args *args) static int do_dump(const struct cmd *cmd, struct args *args) { - print_tf(bss->fp); + print_tf(framep); return 0; } static int do_trap(const struct cmd *cmd, struct args *args) { - trap(bss->fp); + trap(framep); return 0; } @@ -168,10 +168,10 @@ do_rmc(const struct cmd *cmd, struct args *args) class = estrtoull(args->argv[1], 0); func = estrtoull(args->argv[2], 0); - bss->fp->r[ESR] = (unsigned long long) RMC << 26; - bss->fp->r[ESR] |= class; - bss->fp->r[ESR] |= (func << 8); - trap(bss->fp); + framep->r[ESR] = (unsigned long long) RMC << 26; + framep->r[ESR] |= class; + framep->r[ESR] |= (func << 8); + trap(framep); return 0; } @@ -192,10 +192,10 @@ do_rmu(const struct cmd *cmd, struct args *args) if (desc == NULL) error("rmu: %s: not found", args->argv[1]); - bss->fp->r[ESR] = (unsigned long long) RMC << 26; - bss->fp->r[ESR] |= desc->class; - bss->fp->r[ESR] |= (desc->func << 8); - trap(bss->fp); + framep->r[ESR] = (unsigned long long) RMC << 26; + framep->r[ESR] |= desc->class; + framep->r[ESR] |= (desc->func << 8); + trap(framep); return 0; } @@ -343,13 +343,13 @@ debug(void) { struct args args; - bss->in_debug = 1; + in_debug = 1; kprint("begin debug language interface\n"); - setjmp(bss->dbgrecover); + setjmp(dbgrecover); for (ready(); !run(&args); ready()) ; kprint("end debug language interface\n"); - bss->in_debug = 0; + in_debug = 0; return args.status; } diff --git a/src/romfw/rmc.c b/src/romfw/rmc.c @@ -25,7 +25,7 @@ backtrace(struct trapframe *fp) { void **bp; - if (!bss->backtrace) + if (!in_backtrace) return; kprint("backtrace:\n"); kprint("%0llx\n", fp->r[X30]); @@ -38,7 +38,7 @@ dumpstack(struct trapframe *fp) { long long *sp, i; - if (!bss->dumpstack) + if (!in_dumpstack) return; kprint("stack dump:\n"); sp = (long long *)fp->r[SP]; @@ -53,12 +53,12 @@ panicfmt(const char *msg, struct trapframe *fp) * check against 1 to be more robust * against memory corruptions */ - if (bss->in_panic == 1) { + if (in_panic == 1) { for (;;) ; } - bss->in_panic = 1; + in_panic = 1; kprint("panic: %s\n", msg); dumpregs(fp); @@ -69,25 +69,25 @@ panicfmt(const char *msg, struct trapframe *fp) void halt(void) { - if (bss->in_debug) - longjmp(bss->dbgrecover, 1); + if (in_debug) + longjmp(dbgrecover, 1); dohalt(); } void panic(const char *msg) { - bss->errstr = msg; - if (bss->in_debug) - longjmp(bss->dbgrecover, 1); + errstr = msg; + if (in_debug) + longjmp(dbgrecover, 1); dopanic(); } void swtch(struct trapframe *fp) { - if (bss->in_debug) - longjmp(bss->dbgrecover, 1); + if (in_debug) + longjmp(dbgrecover, 1); doswtch(fp); } @@ -98,8 +98,8 @@ trap(struct trapframe *fp) enum ecvals ec; const char *msg; - if (bss->errstr) { - panicfmt(bss->errstr, fp); + if (errstr) { + panicfmt(errstr, fp); halt(); } dbg("exception handler\n"); @@ -114,8 +114,8 @@ trap(struct trapframe *fp) cmd.class = fp->r[ESR] & 0xff; cmd.func = (fp->r[ESR] >> 8) & 0xff; - bss->fp = cmd.fp = fp; - bss->cmd = &cmd; + framep = cmd.fp = fp; + rmucmd = &cmd; rmc(&cmd); swtch(fp); @@ -124,11 +124,11 @@ trap(struct trapframe *fp) void badcmd(int error) { - Rmucmd *cmd = bss->cmd; + Rmucmd *cmd = cmd; dbg("bad RMC: %d, %d = %d\n", cmd->class, cmd->func, error); - bss->fp->r[X0] = error; - swtch(bss->fp); + framep->r[X0] = error; + swtch(framep); } /* @@ -163,7 +163,7 @@ rmc(Rmucmd *cmd) if (cmd->class > 255 || cmd->func > 255) panic("rmc1"); - tab = bss->rmctab; + tab = rmctab; class = &tab->class[cmd->class]; if (cmd->func >= class->cnt) badcmd(-1); /* TODO: put the correct code */ @@ -188,7 +188,7 @@ void * reloc(const void *addr) { uintptr_t a = (uintptr_t) addr; - uintptr_t off = (uintptr_t) bss->text; + uintptr_t off = (uintptr_t) text; return (void *) (a + off); } diff --git a/target/hosted/arch.c b/target/hosted/arch.c @@ -6,8 +6,6 @@ #include "hosted.h" -#undef bss - jmp_buf recover; noreturn void abort(void); @@ -15,12 +13,6 @@ noreturn void longjmp(jmp_buf env, int val); struct trapframe *(*getframe)(void); int halted; -struct bssmap * -bss(void) -{ - return &bssmap; -} - void dohalt(void) { diff --git a/target/hosted/hosted.h b/target/hosted/hosted.h @@ -1,4 +1,3 @@ extern jmp_buf recover; extern int halted; extern struct trapframe *(*getframe)(void); -extern struct bssmap bssmap; diff --git a/target/hosted/ram.c b/target/hosted/ram.c @@ -3,10 +3,17 @@ #include <rcode/rcode.h> #include <rcode/ramfw.h> -struct bssmap bssmap; +void *text; + +static void +imach(void) +{ + text = 0; +} int main(int argc, char *argv[]) { + imach(); return 0; } diff --git a/target/hosted/rom.c b/target/hosted/rom.c @@ -7,7 +7,25 @@ #include "hosted.h" -struct bssmap bssmap; +unsigned char in_panic; +unsigned char in_debug; +unsigned char in_dumpstack; +unsigned char in_backtrace; +void *text; +void *environ; + +const char *errstr; +jmp_buf dbgrecover; +struct rmctab *rmctab; +struct trapframe trapframe, *framep; +struct rmucmd *rmucmd; + +unsigned char enable; /* System realm enablement */ +unsigned char hascrypto;/* System-wide memory encryption */ + +int errno_; + +struct devdata *devinfo; void * alloc(size_t size) @@ -24,22 +42,15 @@ imach(void) { if (setjmp(recover)) exit(EXIT_FAILURE); -} - -static void -ibss(void) -{ - static struct trapframe frame; - - bss->rmctab = &romtab; - bss->fp = &frame; + rmctab = &romtab; + framep = &trapframe; + text = 0; } int main(int argc, char *argv[]) { imach(); - ibss(); idev(); return debug(); diff --git a/target/native/Makefile b/target/native/Makefile @@ -20,10 +20,6 @@ RAMOBJS = ram-crt.o \ TARGET = $(BINDIR)/romfw.bin $(BINDIR)/ramfw.bin -.SUFFIXES: .tst -.elf.tst: - mktst $< - all: $(TARGET) ram-crt.o rom-crt.o: crt.s @@ -53,11 +49,7 @@ $(BINDIR)/romfw.elf: $(ROMOBJS) $(LIBDEP) $(BINDIR)/ramfw.elf: $(RAMOBJS) $(LIBDEP) $(LD) $(PROJ_LDFLAGS) $(LINKSCRIPT) $(RAMOBJS) $(PROJ_LDLIBS) -o $@ -$(BINDIR)/ramfw.bin: $(BINDIR)/ramfw.tst -$(BINDIR)/romfw.bin: $(BINDIR)/romfw.tst - clean: rm -f $(TARGET:.bin=.elf) - rm -f $(TARGET:.bin=.tst) rm -f sysreg.h sysreg.s version.h rm -f romtab.c ramtab.c diff --git a/target/native/arch.s b/target/native/arch.s @@ -3,7 +3,7 @@ .text .globl panic,dohalt,intr,dopanic .globl barrier,vectbl,doswtch,inm8,inm16,inm32 - .globl outm8,outm16,outm32,bss + .globl outm8,outm16,outm32 .globl invdcachesetway,invicache,vectbl,doswtch .globl inm8,inm16,inm32,outm8,outm16,outm32 @@ -28,10 +28,6 @@ barrier: dsb sy ret -bss: - mrs x0,S3_6_C13_C0_6 /* TPIDR_R */ - ret - invdcachesetway: dc isw,x0 ret diff --git a/target/native/mktst b/target/native/mktst @@ -1,13 +0,0 @@ -#!/bin/sh - -set -e - -size ${1?'First parameter unset'} | -awk 'NR == 2 { - if ($2 != 0 || $3 != 0) { - printf("image %s with data section!\n", - "'$1'") > "/dev/stderr"; - exit 1;\ - }\ -}' -touch ${1%.elf}.tst diff --git a/target/native/ram.c b/target/native/ram.c @@ -2,6 +2,8 @@ #include "version.h" +void *text; + void main(void) { diff --git a/target/native/rom.c b/target/native/rom.c @@ -17,6 +17,26 @@ typedef struct mach Mach; +unsigned char in_panic; +unsigned char in_debug; +unsigned char in_dumpstack; +unsigned char in_backtrace; +void *text; +void *environ; + +const char *errstr; +jmp_buf dbgrecover; +struct rmctab *rmctab; +struct trapframe trapframe, *framep; +struct rmucmd *rmucmd; + +unsigned char enable; /* System realm enablement */ +unsigned char hascrypto;/* System-wide memory encryption */ + +int errno_; + +struct devdata *devinfo; + struct mach { struct trapframe frame; void *env; @@ -34,13 +54,13 @@ struct mach { int * geterrno(void) { - return &bss->errno_; + return &errno_; } struct _Env * getenviron(void) { - return bss->environ; + return environ; } void * @@ -96,15 +116,11 @@ ibss(Mach *mp) { struct _Env *envp; - if (sizeof(struct bssmap) > BSSSIZ) - panic("ibss"); - - bss->text = mp->txt; - bss->backtrace = 1; - bss->dumpstack = 1; - bss->bsssize = sizeof(struct bssmap); - bss->rmctab = &romtab; - envp = bss->environ = mp->env; + text = mp->txt; + in_backtrace = 1; + in_dumpstack = 1; + rmctab = &romtab; + envp = environ = mp->env; envp->nvars = ENVPOS; } @@ -115,13 +131,13 @@ info(Mach *mp) "ram = %p, ramsiz = 0x%zx\n" "txt = %p, txtsiz = 0x%zx\n" "env = %p, envsiz = 0x%zx\n" - "bss = %p, bsssiz = 0x%zx, used = 0x%zx\n" + "bss = %p, bsssiz = 0x%zx\n" "sp = %p, stacksiz = 0x%zx\n", RCODEVERSION, mp->ram, mp->ramsiz, mp->txt, mp->txtsiz, mp->env, mp->envsiz, - mp->bss_, mp->bsssiz, bss->bsssize, + mp->bss_, mp->bsssiz, mp->sp, mp->stacksiz); }