This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Re: Calling exit in a Redboot standalone Arm program
- From: Pierre Habraken <Pierre dot Habraken at imag dot fr>
- To: Jonathan Larmour <jifl at eCosCentric dot com>
- Cc: Mark Salter <msalter at redhat dot com>,eCos discussion <ecos-discuss at sources dot redhat dot com>
- Date: Thu, 01 May 2003 16:56:00 +0200
- Subject: Re: [ECOS] Calling exit in a Redboot standalone Arm program
- Organization: Université Joseph Fourier
- References: <3EA53C1E.231D1898@imag.fr> <20030422132718.70DE07885A@deneb.localdomain> <3EA5646A.5CF9F526@imag.fr> <3EA5B1B8.8020205@eCosCentric.com> <20030423020915.A942A7885A@deneb.localdomain> <3EA74B92.1050107@eCosCentric.com>
Jonathan Larmour wrote:
>
> 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 :).
I'm back after I have been busy for some time with some other matters.
So, I just applied your patch to main.c (together with the change in
syscall.c): it produces the expected behavior.
However, I have not understood why you said I had to rename
'go_saved_context' and 'go_trampoline': I just added some early
declaration for both features at the beginning of the file and then
everything built and ran fine. But I probably missed something. Could
you please clarify that point ?
In accordance with Mark's previous warning I checked that this time
quitting gdb makes RedBoot return to its main prompt.
BTW, Mark, you expressed in an other message some doubts about the use
of HAL_THREAD_* macros. What about the patch as it was proposed by
Jonathan ?
Besides that I also created a cdl option named
CYGOPT_REDBOOT_BSP_SYSCALLS_EXIT_WITHOUT_TRAP so that this new feature
be enabled in syscall.c when it is desirable only.
I am waiting for confirmation from both of you, Jonathan and Mark, and
then I'll send a full patch with ChangeLog entry.
Pierre
> 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
--
________________________________________________________________________
Pierre HABRAKEN - mailto:Pierre.Habraken@imag.fr
Tél: 04 76 82 72 83 - Fax: 04 76 82 72 87
IMAG-LSR BP72 38402 SAINT MARTIN D'HERES Cedex
________________________________________________________________________
--
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss