This is the mail archive of the newlib@sources.redhat.com mailing list for the newlib 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]

Modes, stack setup for "no-OS" ARM app


I've been wondering about how I should handle processor modes and set up stack pointers etc. for my newlib-based ARM application running on a "bare" system (no OS, no debug monitor.) Unlike the default crt0, mine will definitely have to set up stack pointers for more than one mode, since I use interrupts actively. Also, I'm not quite sure what mode the application itself ought to run under. I need to access "privileged" registers etc. during the init phase at least, so some bits have to run in Supervisor or System, but do I want to do *everything* in one of those modes?

Some issues related to this (in no particular order):

  1. Once User mode is entered, there is no easy way back, as far as I
     know, so I can't simply switch to that mode e.g. to set up the
     stack, if I want SVC or System later.
  2. System is ARM version 4 and above, so perhaps I shouldn't use that
     in my crt0, which I intend to be very general.
  3. As far as I can tell, there is no way to access the user mode
     stack pointer e.g. from supervisor mode, at least when using gas.

Any thoughts?

- Toralf


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