This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Why doesn't this assemble for elf but does for pe?




Nick Clifton wrote:

Hi Stephen,



I have some code that looks like this. The code assembles when
compiled with i686-pc-pe-as but chokes when compiled with
i686-pc-elf-as. The version of the assembler is the same:



How does the assembler choke ?



It complains about a missing ")"


--------------------- example ------------
.equ numRawHandlers, NumEntries
table:
<some code goes here>
common:
.equ size, ((common - table/ numRawHandlers)



There are a couple of problem with this test case:


* The value of NumEntries is not defined.


Actually, the value is defined. I didn't think you wanted to look at 100 lines of code and when I
shortened it I forgot to give a value.


* There is a missing closing brace after 'table' on the last line.

Anyway, if the problem is that the assembler is complaining about a
missing closing parenthesis:

 fred.s: Assembler messages:
 fred.s:5: Error: missing ')' (

then the reason is that the i386-pc-elf target defines the forward
slash character ('/') as starting a comment, so the second .equ
directive in the example above is interpreted as:

.equ size, ((common - table

The answer is to disable pre-processing at the start of the file by
using the #NO_APP directive, like this:

#NO_APP .equ NumEntries, 5
.equ numRawHandlers, NumEntries
table:
nop
common:
.equ size, ((common - table) / numRawHandlers)





Then how do I turn preprocessing back on?





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]