Nicht ganz, das SREG (oder was auch immer) wird nur gerettet, wenn ich der ISR einen Pro/Epilog gebe, was ich aber mit naked verhindern kann.

Zunächst mal eine minimal-ISR, die nix macht:
Code:
SIGNAL (SIG_INTERRUPT1)
{
}

00000060 <__vector_2>:
  60:	1f 92       	push	r1
  62:	0f 92       	push	r0
  64:	0f b6       	in	r0, 0x3f	; 63
  66:	0f 92       	push	r0
  68:	11 24       	eor	r1, r1
  6a:	0f 90       	pop	r0
  6c:	0f be       	out	0x3f, r0	; 63
  6e:	0f 90       	pop	r0
  70:	1f 90       	pop	r1
  72:	18 95       	reti
Dann eine ISR, die nix macht, ausser eine parameterlose Func zu rufen:
Code:
SIGNAL (SIG_INTERRUPT1)
{
	foo();
}

00000060 <__vector_2>:
  60:	1f 92       	push	r1
  62:	0f 92       	push	r0
  64:	0f b6       	in	r0, 0x3f	; 63
  66:	0f 92       	push	r0
  68:	11 24       	eor	r1, r1
  6a:	2f 93       	push	r18
  6c:	3f 93       	push	r19
  6e:	4f 93       	push	r20
  70:	5f 93       	push	r21
  72:	6f 93       	push	r22
  74:	7f 93       	push	r23
  76:	8f 93       	push	r24
  78:	9f 93       	push	r25
  7a:	af 93       	push	r26
  7c:	bf 93       	push	r27
  7e:	ef 93       	push	r30
  80:	ff 93       	push	r31
  82:	ec df       	rcall	.-40     	; 0x5c
  84:	ff 91       	pop	r31
  86:	ef 91       	pop	r30
  88:	bf 91       	pop	r27
  8a:	af 91       	pop	r26
  8c:	9f 91       	pop	r25
  8e:	8f 91       	pop	r24
  90:	7f 91       	pop	r23
  92:	6f 91       	pop	r22
  94:	5f 91       	pop	r21
  96:	4f 91       	pop	r20
  98:	3f 91       	pop	r19
  9a:	2f 91       	pop	r18
  9c:	0f 90       	pop	r0
  9e:	0f be       	out	0x3f, r0	; 63
  a0:	0f 90       	pop	r0
  a2:	1f 90       	pop	r1
  a4:	18 95       	reti
Der Rahmen ist deutlich fetter, und da sind noch keine Werte übergeben. Ausserdem wird das in jeder ISR wiederholt, die foo() aufruft.

Was ich gerne hätte, wäre so was:
Code:
0000005e <__vector_1>:
  5e:	00 c0       	rjmp	.+0      	; 0x60

00000060 <__vector_2>:
  60:	1f 92       	push	r1
  62:	0f 92       	push	r0
  64:	0f b6       	in	r0, 0x3f	; 63
  66:	0f 92       	push	r0
  68:	11 24       	eor	r1, r1
  6a:	0f 90       	pop	r0
  6c:	0f be       	out	0x3f, r0	; 63
  6e:	0f 90       	pop	r0
  70:	1f 90       	pop	r1
  72:	18 95       	reti

was etwa durch die naked-Sequenz erzeugt wird
Code:
void __attribute__ ((naked))
SIG_INTERRUPT0()
{
   asm volatile ("rjmp __vector_2");
}

SIGNAL (SIG_INTERRUPT1)
{
}
Was fehlt, ist die Unterscheidung, ob ich von INT0 komme oder von INT1...

Für den Eintrag in die Vektortabelle ist übrigens nicht das signal- oder interrupt-Attribut verantwortlich, sondern alleine der spezielle Name der Funktion __vector_n, die dem Linker bekannt ist (der Linker weiss eh nix von Attributen). Wenn du also ne Funktion schreibst
Code:
void __vector_10()
{}
dann wird ein Eintrag in die VecTab gemacht!