Msg/ClobberedSP: Difference between revisions

From CPUlator Wiki

< Msg
Line 14: Line 14:
      
      
MyFunction:
MyFunction:
     push {r4} // Changes SP
     push {r4} // Change SP
     bx lr // Return, but SP is different
     bx lr // SP is different at return
</syntaxhighlight>
==== Nios II ====
<syntaxhighlight lang="Asm" line highlight="9">
.global _start
_start:
movi sp, 0x1000 # Initialize SP
call Function
    nop
    nop
   
Function:
subi sp, sp, 4 # Modify SP
    ret # SP is different at return
</syntaxhighlight>
</syntaxhighlight>


{{DisableMsg|Function clobbered ra or sp}}
{{DisableMsg|Function clobbered ra or sp}}

Revision as of 23:25, 9 March 2019

A function should always ensure that the stack pointer is the same at the entry and exit of the function. This message tells you that this didn't happen: the stack pointer was different at the function return than when the function was first called.

Examples

ARMv7

.global _start
_start:
    mov sp, #0x1000		// Initialize SP to something sane
    bl MyFunction
    nop
    nop
    # ...
    
MyFunction:
    push {r4}	// Change SP
    bx lr		// SP is different at return

Nios II

.global _start
_start:
	movi sp, 0x1000		# Initialize SP
	call Function
    nop
    nop
    
Function:
	subi sp, sp, 4		# Modify SP
    ret					# SP is different at return

Disabling this message

This debugging check can be disabled in the Debugging Checks section of the Settings box: Function clobbered ra or sp.