17 July 2017, 14:56 | #1 |
Registered User
Join Date: Jul 2015
Location: The Netherlands
Posts: 3,409
|
Moving supervisor stack
I'm looking for a safe way to move the supervisor stack to an address of my choosing.
Now, I could do this by simply running the whole program from in supervisor mode and never returning to user mode. But that's not what I want, what I really want is to move both stacks to addresses of my choice for a test program without any OS left running. However, while I'm reasonably sure how to safely do this for the user stack, I'm not so sure how to safely do so for the supervisor stack, given that I want to be able to RTE after moving the stack and not blow up the system. Does anyone here know how to do so? |
17 July 2017, 17:39 | #2 |
ex. demoscener "Bigmama"
Join Date: Jun 2012
Location: Fyn / Denmark
Posts: 1,624
|
push the return address onto the stack before executing RTE, or exit supervisor mode by writing to the status register (don't remember if that's possible).
|
17 July 2017, 18:05 | #3 |
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Pushing return address for RTE is unsafe - supervisor stack frame may differ from one cpu to another.
But it's safe to exit supervisor mode by writing to the status register, provided there's nothing left in the supervisor stack. |
17 July 2017, 22:38 | #4 |
Join Date: Jul 2008
Location: Sweden
Posts: 2,269
|
It's generally not safe to move the stacks at run-time because you may end up with dangling pointers, but if you don't have any pointers onto the stack: make a copy, set the new SSP, and RTE.
|
17 July 2017, 22:48 | #5 |
Registered User
Join Date: Nov 2006
Location: Stockholm, Sweden
Posts: 237
|
Let's say that you start out in user mode. In this mode, a7 will alias onto the user stack pointer register (USP), and the supervisor stack pointer register (SSP) is inaccessible to you.
You can move the usermode stack when you are in usermode to somewhere else by doing move.l #imm,a7. This may upset the OS, so you should make sure that you do not have the OS task switching active when you have moved the USP. I'm not sure if you also need to disable interrupts when doing this. If you enter supervisor mode, for example by calling Supervisor(), then the act of entering Supervisor mode will have resulted in the CPU creating some form of exception stack frame on the supervisor stack. The "clean" method for going back to user mode is to ensure that the SSP points to the same place where it was at the start of supervisor execution, and issue an RTE instruction. Once you are in supervisor mode, a7 is an alias for SSP, and you can access the USP register via movec usp,rn / movec rn,usp. You can point them elsewhere with no impact. If you want to permanently relocate your supervisor and usermode stacks and discard all OS compatibility you could do as follows:
I haven't tried disabling the S bit in SR in practice but like meynaf I'm pretty sure it'll work. |
17 July 2017, 23:06 | #6 |
ex. demoscener "Bigmama"
Join Date: Jun 2012
Location: Fyn / Denmark
Posts: 1,624
|
I've used this method in the past. It's from my small trackmo 'OS' called BOSS. It clears the S bit to exit supervisor mode. It seems it also sets the interrupt stack pointer on bigger cpu's.
Man,I don't remember any details about this sort of stuff anymore :-/ Last edited by hooverphonique; 17 July 2017 at 23:15. |
18 July 2017, 17:13 | #7 |
Registered User
Join Date: Jul 2015
Location: The Netherlands
Posts: 3,409
|
The idea is to use this for a self booting trackloader program running on a 512KB system (without OS). Naturally, compatibility with other systems is also desired - this is why I asked how to do this safely across processors.
So thanks all for the tips, I'll be trying them for sure |
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
Thread Tools | |
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Moving Amiga's.... | Steve T | support.Hardware | 26 | 05 September 2015 01:13 |
Moving HDD from Pc to Amiga | Hockmiester | support.Hardware | 2 | 25 March 2013 17:37 |
Moving Files Etc | Washac | support.Hardware | 1 | 09 February 2010 16:50 |
moving OS3.9 to different HD | lopos2000 | support.Apps | 2 | 09 August 2005 12:56 |
It's moving..it's alive, it's moving.. IT'S ALLIIIIIIIIIIVE!!!!!!!!!1 | alkis21 | Retrogaming General Discussion | 23 | 22 August 2002 10:51 |
|
|