Browse Source

rename binary to pk; change argv handling

the new fesvr approach makes argv[0] = pk, rather than user program's name
eos20
Andrew Waterman 13 years ago
parent
commit
e0e1662fc1
  1. 2
      configure
  2. 2
      configure.ac
  3. 5
      pk/handlers.c
  4. 18
      pk/init.c
  5. 0
      pk/pk.S
  6. 2
      pk/pk.ld
  7. 4
      pk/pk.mk.in

2
configure

@ -3951,7 +3951,7 @@ fi
# Default compiler flags
#-------------------------------------------------------------------------
CFLAGS="-Wall -Os -std=gnu99"
CFLAGS="-Wall -Os -std=gnu99 -Wno-unused"
LIBS="-lgcc"

2
configure.ac

@ -71,7 +71,7 @@ AC_HEADER_STDC
# Default compiler flags
#-------------------------------------------------------------------------
AC_SUBST([CFLAGS], ["-Wall -Os -std=gnu99"])
AC_SUBST([CFLAGS], ["-Wall -Os -std=gnu99 -Wno-unused"])
AC_SUBST([LIBS], ["-lgcc"])
AX_DEFAULT_CONFIGURE_ARG([--host=riscv])

5
pk/handlers.c

@ -104,11 +104,6 @@ void handle_fault_store(trapframe_t* tf)
panic("Faulting store!");
}
static void handle_timer_interrupt(trapframe_t* tf)
{
panic("Timer interrupt!");
}
static void handle_syscall(trapframe_t* tf)
{
setpcr(PCR_SR, SR_ET);

18
pk/pk.c → pk/init.c

@ -145,11 +145,17 @@ struct args
uint64_t argv[];
};
static struct args* mainvars_init(long loc)
static struct args* stack_init(unsigned long* stack_top)
{
sysret_t r = frontend_syscall(SYS_getmainvars, loc, USER_MAINVARS_SIZE, 0, 0);
*stack_top -= USER_MAINVARS_SIZE;
struct args* args = (struct args*)(*stack_top - sizeof(args->argc));
sysret_t r = frontend_syscall(SYS_getmainvars, (long)args, USER_MAINVARS_SIZE, 0, 0);
kassert(r.result == 0);
return (struct args*)loc;
// chop off argv[0]
args->argv[0] = args->argc-1;
return (struct args*)args->argv;
}
static void jump_usrstart(const char* fn, long sp)
@ -158,7 +164,7 @@ static void jump_usrstart(const char* fn, long sp)
int user64;
long start = load_elf(fn, &user64);
asm volatile("cflush; fence");
__clear_cache(0, 0);
init_tf(&tf, start, sp, user64);
pop_tf(&tf);
@ -178,8 +184,6 @@ void boot()
if (mem_mb < stack_top / (1024 * 1024))
stack_top = mem_mb * (1024 * 1024);
stack_top -= USER_MAINVARS_SIZE;
struct args* args = mainvars_init(stack_top);
struct args* args = stack_init(&stack_top);
jump_usrstart((char*)(long)args->argv[0], stack_top);
}

0
pk/riscv-pk.S → pk/pk.S

2
pk/pk.ld

@ -16,7 +16,7 @@ SECTIONS
.text :
{
riscv-pk.o(.text)
pk.o(.text)
}
/* text: Program code section */

4
pk/pk.mk.in

@ -14,7 +14,7 @@ pk_hdrs = \
elf.h \
pk_c_srcs = \
pk.c \
init.c \
file.c \
syscall.c \
handlers.c \
@ -32,4 +32,4 @@ pk_asm_srcs = \
pk_test_srcs =
pk_install_prog_srcs = \
riscv-pk.S \
pk.S \

Loading…
Cancel
Save