gas x86-32: allow non-absolute segment values for lcall/ljmp?

Jan Beulich jbeulich@suse.com
Wed Sep 30 13:42:58 GMT 2020
On 30.09.2020 15:13, TK Chia wrote:
> I am trying to use Binutils's GNU assembler for writing 16-bit Intel x86
> (IA-16) code.  I see that the x86 assembler does not allow me to use an
> unresolved or non-absolute symbol as the segment operand of an immediate
> far jump (`ljmp SEG, OFF') or far call (`lcall SEG, OFF'):
> 
> ======================================================================
> $ cd .../binutils-gdb
> $ cat >test5.s
> 	.code16
> 	lcall	$foo_seg, $foo_off
> 
> $ git log -1 | head -6
> commit c81946efc22dbbe97ef8c934a5367e37bf101c48
> Author: Alex Coplan <alex.coplan@arm.com>
> Date:   Wed Sep 30 12:15:18 2020 +0100
> 
>      NEWS: Mention recent Arm CPU support
> 
> $ gas/as-new --32 test5.s
> test5.s: Assembler messages:
> test5.s:2: Error: can't handle non absolute segment in `lcall'
> ======================================================================
> 
> I find this a rather strange restriction.  If it is fine, I would like
> to propose a patch to GNU as to remove this restriction for `lcall' and
> `ljmp' commands.

One of the many issues that I have on my todo list, yet that I didn't
find time yet to deal with. Afaic you're very welcome to take care of
this issue (ideally in more general a manner, but I guess you won't
want to go farther than you need to for your immediate purposes).

Jan


More information about the Binutils mailing list