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


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 :-).

Sure, I'm going to look at it ! I just can't promise when I'll do it:
I am just a full time teacher, not a developer, not even a researcher,
and have very few time only left for working on development/debugging
tasks...


> 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 :).

OK. I still have to understand all this stuff (not really easy to follow
all these macro-defined functions with concatenated names operating on
indirection table(s) !)... I'll apply and test your patch as soon as
possible and let you know the results.

Pierre

PS: I assume that the main argument for sending a SIGTRAP when an app
terminates is that it provides the developer with a way to back trace to
the location in his/her source code where exit() was called. Besides
that, do you see any other argument in favor of this behavior ?


> 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 dot Habraken at imag dot 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


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