.align #,0x90 in gas ignores the 0x90 and outputs any kind of nop it feels like. the one avoided by this patch is a 7 byte nop, which gas has been doing since at least 1999: http://sourceware.org/ml/binutils/1999-10/msg00083.html In order to match what gas does, we would need to make code alignment target-specific, import a lot of code, and face the question: exactly which gas {version,target,tune} combo are we trying to match? see i386_align_code in: http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-i386.c?annotate=1.460&cvsroot=src The smart noppery is turned on via the special casing of 0x90 at line 438 in md_do_align in: http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-i386.h?annotate=1.1&cvsroot=src
Unified · Split
| @@ -9,7 +9,8 @@ · 8 unmodified lines | ||
| 9 | 9 | .int 1, 2, 3 |
| 10 | 10 | .align 8 |
| 11 | 11 | .byte 1 |
| 12 | − .align 16, 0x90 | |
| 12 | +/* .align 16, 0x90 gas is too clever for us with 0x90 fill */ | |
| 13 | + .align 16, 0x91 /* 0x91 tests the non-clever behaviour */ | |
| 13 | 14 | .skip 3 |
| 14 | 15 | .skip 15, 0x90 |
| 15 | 16 | .string "hello\0world" |