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:
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);
}