...für lokale Label ist das Verhalten auch anders:
1 | void llabel (void)
|
2 | {
|
3 | __asm ("rjmp 0f $ break $ 0:");
|
4 | }
|
v2.28 disassembliert (GAS mit sowie ohne -L) zu:
1 | 0000001c <llabel>:
|
2 | 1c: 00 c0 rjmp .+0 ; 0x1e <llabel+0x2>
|
3 | 1c: R_AVR_13_PCREL .text+0x20
|
4 | 1e: 98 95 break
|
5 | 20: 08 95 ret
|
v2.40 disassembliert (GAS mit sowie ohne -L) zu:
1 | 0000001c <llabel>:
|
2 | 1c: 00 c0 rjmp .+0 ; 0x1e <llabel+0x2>
|
3 | 1c: R_AVR_13_PCREL .L0^B1
|
4 | 1e: 98 95 break
|
5 |
|
6 | 00000020 <.L0^B1>:
|
7 | 20: 08 95 ret
|
v2.28 erzeugt also kein Label für "0:" und berechnet einfach nur den
Offset.
v2.40 erzeugt ein Label mit ^B wie in der Doku beschrieben. Hatten die
Autoren der Doku zu v2.9 damals ne Zeitmschine, um v2.40 vorherzusagen?
Meine Verwirrung wird irgendwie nicht kleiner.