This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Calling exit in a Redboot standalone Arm program


Just to avoid any doubt, Pierre, are you going to look at this? You're the one with the incentive to do it :-). Look at the various places that go_saved_context is used in redboot's src/main.c.

I think the attached patch might do it, but it's purely off the top of my head. If it does then all you need to do to finish it off is just rename go_saved_context to redboot_return_context or something like that, and something similar for go_trampoline; and then most importantly test it with the below exit status change as well to verify it all builds and works. Oh, and add ChangeLog entries :).

Jifl

Mark Salter wrote:
Jonathan Larmour writes:


Pierre Habraken wrote:

Mark Salter wrote:


[...]
Something to watch out for is that any patch not break the ability to
quit GDB and return to the RedBoot prompt.


Haven't tried it so I'm probably way off base, but could this maybe simply be done by making the code in question just be:


       __send_exit_status((int)arg1);
       CYGACC_CALL_IF_MONITOR_RETURN(arg1);


This isn't way off base, but it won't work right now. The context used by
CYGACC_CALL_IF_MONITOR_RETURN is only setup through the 'go' command right
now. The return back to stub is handled by saving a context on the first
entry to the stub and then restoring that context when a 'k' packet is
received from GDB. We could get rid of that mechanism (good riddance) and
setup a context for CYGACC_CALL_IF_MONITOR_RETURN before entering the stub.

--Mark



--
eCosCentric    http://www.eCosCentric.com/    The eCos and RedBoot experts
--[ "You can complain because roses have thorns, or you ]--
--[  can rejoice because thorns have roses." -Lincoln   ]-- Opinions==mine
? src/flash.c.at91flash.dead
Index: src/main.c
===================================================================
RCS file: /cvs/ecos/ecos/packages/redboot/current/src/main.c,v
retrieving revision 1.44
diff -u -5 -p -r1.44 main.c
--- src/main.c	8 Apr 2003 05:09:06 -0000	1.44
+++ src/main.c	24 Apr 2003 02:24:53 -0000
@@ -314,14 +314,20 @@ cyg_start(void)
                     __chan = CYGACC_CALL_IF_CONSOLE_PROCS();
                     CYGACC_COMM_IF_CONTROL( *__chan, __COMMCTL_IRQ_DISABLE );
                 }
     
                 CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
+                // set up a temporary context that will take us to the trampoline
+                HAL_THREAD_INIT_CONTEXT((CYG_ADDRESS)workspace_end, &breakpoint, go_trampoline, 0);
+
+                // switch context to trampoline
+                HAL_THREAD_SWITCH_CONTEXT(&go_saved_context, &workspace_end);
+
 #ifdef HAL_ARCH_PROGRAM_NEW_STACK
-                HAL_ARCH_PROGRAM_NEW_STACK(breakpoint);
+                //                HAL_ARCH_PROGRAM_NEW_STACK(breakpoint);
 #else
-                breakpoint();  // Get GDB stubs started, with a proper environment, etc.
+                //                breakpoint();  // Get GDB stubs started, with a proper environment, etc.
 #endif
 		dbgchan = CYGACC_CALL_IF_SET_DEBUG_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
 		CYGACC_CALL_IF_SET_CONSOLE_COMM(dbgchan);
             } else 
 #endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS

-- 
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]