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