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

TK Chia u1049321969@caramail.com
Wed Sep 30 13:13:05 GMT 2020


Good day all,

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.

Thank you!

--
https://github.com/tkchia


More information about the Binutils mailing list