i386 lcall without *

Alan Modra alan@SPRI.Levels.UniSA.Edu.Au
Fri Mar 3 16:37:00 GMT 2000


On Fri, 3 Mar 2000, [iso-8859-1] Etienne LORRAIN wrote:

>   There is a new warning in binutils-2.9.5.0.27 (gas) for i386
>  on a line like:
>     lcall (memory)
>  It says something like "lcall without *".

The warning has been there for a long time.  It's just that when
.intel_syntax was added, the warning was accidentally turned off in some
cases.  Worse than that, wrong code was generated too (in a smaller
number of cases).  For an example, see
http://sourceware.cygnus.com/ml/binutils/2000-01/msg00083.html

>   Shall I convert to a form like:
>     lcall *memory
>   Or the warning will disappear when the argument is in
>  between parenthesis ?

The easiest solution is just to use "call *address".  Note that
"call (address)" is equivalent to plain "call address", a relative call.
Adding any number of pairs of parentheses doesn't change the address
expression in this case.  You could argue that "call address(,1)"
shouldn't give a warning as it is clear that the address expression
here is indirect.  Does anyone know what other assemblers do with

.extern foo
 call foo(,1)

?





More information about the Binutils mailing list