X-Git-Url: https://git.cryptolib.org/?p=avr-crypto-lib.git;a=blobdiff_plain;f=stack_measuring.S;h=f9bb8c35d954d5a1d3836ba909461f9d72ae4866;hp=a70f32d949c09c417247fb49ad3271741bd286ae;hb=e9e07569721b9e005d6b602e26a03e930e796577;hpb=c9c11514d91b8c19f77d65ac051b998bd99048b0 diff --git a/stack_measuring.S b/stack_measuring.S index a70f32d..f9bb8c3 100644 --- a/stack_measuring.S +++ b/stack_measuring.S @@ -1,7 +1,7 @@ /* stack_measuring.S */ /* This file is part of the AVR-Crypto-Lib. - Copyright (C) 2010 Daniel Otte (daniel.otte@rub.de) + Copyright (C) 2006-2015 Daniel Otte (bg@nerilex.org) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,12 +25,23 @@ stack_measure_init: movw r30, r24 lds r20, __brkval - lds r21, __brkval+1 + lds r21, __brkval + 1 in r0, _SFR_IO_ADDR(SREG) cli in r26, _SFR_IO_ADDR(SPL) out _SFR_IO_ADDR(SREG), r0 in r27, _SFR_IO_ADDR(SPH) + cp r20, r26 + cpc r21, r27 + brlo 10f + ldi r20, lo8(__bss_end) + ldi r21, hi8(__bss_end) + cp r20, r26 + cpc r21, r27 + brlo 10f + ldi r21, 1 + clr r20 +10: st Z+, r20 st Z+, r21 st Z+, r26 @@ -41,23 +52,31 @@ stack_measure_init: sbc r25, r21 sbiw r24, 1 st X, r22 -1: st -X, r22 +50: st -X, r22 sbiw r24, 1 - brne 1b + brne 50b ret .global stack_measure_final stack_measure_final: movw r30, r24 lds r20, __brkval - lds r21, __brkval+1 + lds r21, __brkval + 1 ld r26, Z+ ld r27, Z+ + cp r20, r26 cpc r21, r27 - brlo 1f - movw r26, r20 -1: + brlo 10f + ldi r20, lo8(__bss_end) + ldi r21, hi8(__bss_end) + cp r20, r26 + cpc r21, r27 + brlo 10f + ldi r21, 1 + clr r20 +10: + adiw r26, 1 ld r24, Z+ ld r25, Z+