On Tue, Apr 28, 2020 at 03:38:55PM -0500, Josh Poimboeuf wrote:
> This one makes no sense to me.  It looks like the assembler is inserting
> a jump as part of the alignment padding???  WTH.
> 
> 0000000000000980 <common_spurious>:
>      980:     48 83 04 24 80          addq   $0xffffffffffffff80,(%rsp)
>      985:     e8 00 00 00 00          callq  98a <common_spurious+0xa>
>                       986: R_X86_64_PLT32     interrupt_entry-0x4
>      98a:     e8 00 00 00 00          callq  98f <common_spurious+0xf>
>                       98b: R_X86_64_PLT32     smp_spurious_interrupt-0x4
>      98f:     eb 7e                   jmp    a0f <ret_from_intr>
>      991:     eb 6d                   jmp    a00 <common_interrupt>
>      993:     66 66 2e 0f 1f 84 00    data16 nopw %cs:0x0(%rax,%rax,1)
>      99a:     00 00 00 00 
>      99e:     66 66 2e 0f 1f 84 00    data16 nopw %cs:0x0(%rax,%rax,1)
>      9a5:     00 00 00 00 
>      9a9:     66 66 2e 0f 1f 84 00    data16 nopw %cs:0x0(%rax,%rax,1)
>      9b0:     00 00 00 00 
>      9b4:     66 66 2e 0f 1f 84 00    data16 nopw %cs:0x0(%rax,%rax,1)
>      9bb:     00 00 00 00 
>      9bf:     66 66 2e 0f 1f 84 00    data16 nopw %cs:0x0(%rax,%rax,1)
>      9c6:     00 00 00 00 
>      9ca:     66 66 2e 0f 1f 84 00    data16 nopw %cs:0x0(%rax,%rax,1)
>      9d1:     00 00 00 00 
>      9d5:     66 66 2e 0f 1f 84 00    data16 nopw %cs:0x0(%rax,%rax,1)
>      9dc:     00 00 00 00 
>      9e0:     66 66 2e 0f 1f 84 00    data16 nopw %cs:0x0(%rax,%rax,1)
>      9e7:     00 00 00 00 
>      9eb:     66 66 2e 0f 1f 84 00    data16 nopw %cs:0x0(%rax,%rax,1)
>      9f2:     00 00 00 00 
>      9f6:     66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
>      9fd:     00 00 00 

binutils.git/gas/configure/tc-i386.c:i386_generate_nops

When there's too many NOPs (as here) it generates a JMP across the NOPS.
It makes some sort of sense, at some point executing NOPs is going to be
more expensive than a branch.. But shees..

Reply via email to