binutils 2.9.0.4 and linux kernel

H.J. Lu (hjl@lucon.org)
Sun, 26 Apr 1998 10:57:48 -0700 (PDT)


>
> : Yes, it does. But I don't think your change is correct. It should
> : check
> :
> : if ((t->opcode_modifier & OperandSizeMask) == DWordOperand)
> :
> : But we also need to check the explicit opcode suffix.
>
> So now I check like this:
>
> if ((t->opcode_modifier & (Data32|OperandSizeMask)) != DWordOperand)
>
> Also, I changed the opcode modifiers in the templates for "call",
> "lcall", "jmp" and "ljmp" and removed the "callw" and "lcallw"
> templates. This changes the semantics of "callw": earlier "callw 0"
> assembled to "data16 call *0x000000", but it now assembles to "addr16
> call 0x0000" in 32 bit mode. You need to use "callw *0" to get the
> previous behaviour. Is this a problem and how do other assemblers
> interprete "callw 0"?
>

I am preparing for binutils 2.9.0.4 now. It will include Martynas's
16 bit changes. I also tighten the x86 asm syntax checking. Previously,
gas will silently turn

call sys_call_table(,%eax,4)

into
call *sys_call_table(,%eax,4)

I fixed gas such that

call sys_call_table(,%eax,4)

won't assemble anymore since it is not a valid x86 asm. There are a
few places in both linux 2.0 and 2.1 where something like

call sys_call_table(,%eax,4)

is used.

Linus, do you want me to send a patch to fix those problems and other
bugs discovered by the new x86 gas?

Thanks.

H.J.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu