--- /dev/null
+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__) */