PERFORCE change 162124 for review
Arnar Mar Sig
antab at FreeBSD.org
Fri May 15 18:22:30 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=162124
Change 162124 by antab at antab_farm on 2009/05/15 18:21:37
* Enable exceptions before falling trap()
* Fix argc/argv in crt1 and pass in cleanup
Affected files ...
.. //depot/projects/avr32/src/lib/csu/avr32/crt1.c#4 edit
.. //depot/projects/avr32/src/sys/avr32/avr32/exception.S#13 edit
.. //depot/projects/avr32/src/sys/avr32/avr32/pm_machdep.c#7 edit
Differences ...
==== //depot/projects/avr32/src/lib/csu/avr32/crt1.c#4 (text+ko) ====
@@ -56,7 +56,7 @@
extern void _fini(void);
extern void _init(void);
extern int main(int, char **, char **);
-extern void _start(char *ap, struct ps_strings *, ...);
+extern void _start(char **ap, struct ps_strings *, fptr cleanup);
#ifdef GCRT
extern void _mcleanup(void);
@@ -70,20 +70,17 @@
struct ps_strings *__ps_strings;
void
-_start(char *ap, struct ps_strings *ps_strings, ...)
+_start(char **ap, struct ps_strings *ps_strings, fptr cleanup)
{
- fptr cleanup;
int argc;
char **argv;
char **env;
const char *s;
- //cleanup = get_rtld_cleanup();
- argv = ≈
- argc = *(int *)(void *)(argv - 1);
- env = argv + argc + 1;
+ argc = *(long *)(void *)ap;
+ argv = ap + 1;
+ env = ap + 2 + argc;
environ = env;
-
if (argc > 0 && argv[0] != NULL) {
__progname = argv[0];
for (s = __progname; *s != '\0'; s++)
==== //depot/projects/avr32/src/sys/avr32/avr32/exception.S#13 (text+ko) ====
@@ -244,6 +244,7 @@
PUSH_TRAPFRAME(NMI)
mfsr r12, AT32_SYS_ECR
mov r11, sp
+ csrf AT32_SYS_SR_EM
call trap
POP_TRAPFRAME(NMI)
rete
@@ -257,6 +258,7 @@
PUSH_TRAPFRAME(EX)
mfsr r12, AT32_SYS_ECR
mov r11, sp
+ csrf AT32_SYS_SR_EM
call trap
call handle_ast
POP_TRAPFRAME(EX)
@@ -270,6 +272,7 @@
PUSH_TLB_TRAPFRAME(EX)
mfsr r12, AT32_SYS_ECR
mov r11, sp
+ csrf AT32_SYS_SR_EM
call trap
call handle_ast
POP_TLB_TRAPFRAME(EX)
==== //depot/projects/avr32/src/sys/avr32/avr32/pm_machdep.c#7 (text+ko) ====
@@ -71,6 +71,7 @@
{
/* Clear frame and set init register values, SP must be word aligned */
bzero((char *)td->td_frame, sizeof(struct trapframe));
+ td->td_frame->regs.r10 = 0;
td->td_frame->regs.r11 = ps_strings;
td->td_frame->regs.r12 = stack;
td->td_frame->regs.sp = ((register_t)stack) & ~(sizeof(register_t) - 1);
More information about the p4-projects
mailing list