]> git.pld-linux.org Git - packages/crossavr-libc.git/blobdiff - 505-avr-libc-avrtc-519.patch
- synchronized patches with official AVR toolchain 3.4.1.830
[packages/crossavr-libc.git] / 505-avr-libc-avrtc-519.patch
diff --git a/505-avr-libc-avrtc-519.patch b/505-avr-libc-avrtc-519.patch
new file mode 100644 (file)
index 0000000..8de7b1c
--- /dev/null
@@ -0,0 +1,93 @@
+diff -Naurp include/setjmp.h include/setjmp.h
+--- include/setjmp.h   2011-12-29 14:21:50.000000000 +0530
++++ include/setjmp.h   2012-06-15 11:53:57.000000000 +0530
+@@ -40,17 +40,20 @@ extern "C" {
+ /*
+    jmp_buf:
+       offset  size    description
+-       0      16      call-saved registers (r2-r17)
+-      16       2      frame pointer (r29:r28)
+-      18       2      stack pointer (SPH:SPL)
+-      20       1      status register (SREG)
+-      21       2/3    return address (PC) (2 bytes used for <=128Kw flash)
+-      23/24 = total size
++       0      16/4    call-saved registers (r2-r17)
++                        (AVR tiny10 family has only 4 call saved registers (r18-r21))
++      16/4     2      frame pointer (r29:r28)
++      18/6     2      stack pointer (SPH:SPL)
++      20/8     1      status register (SREG)
++      21/9     2/3    return address (PC) (2 bytes used for <=128Kw flash)
++      23/24/11 = total size (AVR Tiny10 family always has 2 bytes PC)
+  */
+ #if !defined(__DOXYGEN__)
+-#if   defined(__AVR_3_BYTE_PC__) && __AVR_3_BYTE_PC__
++#if defined(__AVR_TINY__)
++# define _JBLEN 11
++#elif defined(__AVR_3_BYTE_PC__) && __AVR_3_BYTE_PC__
+ # define _JBLEN  24
+ #else
+ # define _JBLEN  23
+diff -Naurp libc/stdlib/setjmp.S libc/stdlib/setjmp.S
+--- libc/stdlib/setjmp.S       2011-12-29 14:21:54.000000000 +0530
++++ libc/stdlib/setjmp.S       2012-06-15 11:51:32.000000000 +0530
+@@ -29,8 +29,6 @@
+ /* $Id: setjmp.S 2191 2010-11-05 13:45:57Z arcanum $ */
+-#if !defined(__AVR_TINY__)
+-
+ /*
+    setjmp.S
+@@ -42,12 +40,13 @@
+ /*
+    jmp_buf:
+       offset  size    description
+-       0      16      call-saved registers (r2-r17)
+-      16       2      frame pointer (r29:r28)
+-      18       2      stack pointer (SPH:SPL)
+-      20       1      status register (SREG)
+-      21       2/3    return address (PC) (2 bytes used for <=128Kw flash)
+-      23/24 = total size
++       0      16/4    call-saved registers (r2-r17)
++                        (AVR tiny10 family has only 4 call saved registers (r18-r21))
++      16/4     2      frame pointer (r29:r28)
++      18/6     2      stack pointer (SPH:SPL)
++      20/8     1      status register (SREG)
++      21/9     2/3    return address (PC) (2 bytes used for <=128Kw flash)
++      23/24/11 = total size (AVR tiny10 family always has 2 bytes PC)
+    All multibytes are stored as little-endian.
+    int setjmp(jmp_buf __jmpb);
+@@ -82,7 +81,11 @@
+ _U(setjmp):
+       X_movw  XL, jmpb_lo
+   ; save call-saved registers and frame pointer
++#if !defined(__AVR_TINY__)
+       .irp    .L_regno, 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,28,29
++#else
++      .irp    .L_regno, 18,19,20,21,28,29
++#endif
+       st      X+, r\.L_regno
+       .endr
+   ; get return address
+@@ -129,7 +132,11 @@ _U(longjmp):
+       cpc     ret_hi, __zero_reg__
+       adc     ret_lo, __zero_reg__
+   ; restore call-saved registers and frame pointer
++#if !defined(__AVR_TINY__)
+       .irp    .L_regno, 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,28,29
++#else
++      .irp    .L_regno, 18,19,20,21,28,29
++#endif
+       ld      r\.L_regno, X+
+       .endr
+   ; restore stack pointer (SP value before the setjmp() call) and SREG
+@@ -169,5 +176,3 @@ _U(longjmp):
+       .size   _U(longjmp), . - _U(longjmp)
+ #endif        /* !__DOXYGEN__ */
+-
+-#endif /* !defined(__AVR_TINY__) */
This page took 0.057459 seconds and 4 git commands to generate.