|
From: Jakob B. <jb...@wi...> - 2010-10-12 19:06:29
|
Hi, I am having a strange problem with nasm, which has me somewhat
baffled:
When building a specific project (Openssl 1.0.0a for Win64-amd64),
nasm 2.09.02 (and 2.08.02 and 2.08.01 too) fails to assemble one of the
files (x86_64_cpuid.asm) when run on one build machine, but not the
other.
Strangely, manually running the same nasm command with the same values
of all environment variables on the computer where it just failed,
produces the correct output, but running the build script always fails
on that same computer.
When nasm fails in that buildscript on that machine, it randomly
chooses between two different failure modes:
A (most frequent): nasm reports success (no messages and 0 exit code),
but the generated .obj file is empty (not 0-byte), containing no code,
data or symbols, just a valid .obj file header (This obviously leads
to a later linker error).
B (less frequent): nasm aborts claiming that all the local symbols
are undefined.
On the other build machine, nasm just works as expected for the same
files.
What could be causing this and how do I work around this?
P.S.
The machine in question is an automated build server which has no
trouble building millions of other lines of code (none of them with
nasm though). It runs Win2003 server (i386), cross compiling for
multiple target architectures (including x86_64).
P.P.S
I am new to this list, hope my question is OK.
P.P.P.S
The error messages when failing in mode B are:
nasm -f win64 -DNEAR -Ox -g -o tmp32\x86_64cpuid.obj
tmp32\x86_64cpuid.asm
(above is one long line wrapped for e-mail)
tmp32\x86_64cpuid.asm:5: error: symbol `OPENSSL_cpuid_setup' undefined
tmp32\x86_64cpuid.asm:18: error: symbol `L$spin' undefined
tmp32\x86_64cpuid.asm:54: error: symbol `L$intel' undefined
tmp32\x86_64cpuid.asm:65: error: symbol `L$intel' undefined
tmp32\x86_64cpuid.asm:71: error: symbol `L$intel' undefined
tmp32\x86_64cpuid.asm:81: error: symbol `L$done' undefined
tmp32\x86_64cpuid.asm:84: error: symbol `L$done' undefined
tmp32\x86_64cpuid.asm:86: error: symbol `L$done' undefined
tmp32\x86_64cpuid.asm:91: error: symbol `L$nocacheinfo' undefined
tmp32\x86_64cpuid.asm:104: error: symbol `L$notintel' undefined
tmp32\x86_64cpuid.asm:108: error: symbol `L$notintel' undefined
tmp32\x86_64cpuid.asm:112: error: symbol `L$done' undefined
tmp32\x86_64cpuid.asm:115: error: symbol `L$done' undefined
tmp32\x86_64cpuid.asm:120: error: symbol `L$done' undefined
tmp32\x86_64cpuid.asm:136: error: symbol `L$ot' undefined
tmp32\x86_64cpuid.asm:138: error: symbol `L$ret' undefined
tmp32\x86_64cpuid.asm:143: error: symbol `L$ittle' undefined
tmp32\x86_64cpuid.asm:149: error: symbol `L$aligned' undefined
tmp32\x86_64cpuid.asm:153: error: symbol `L$ot' undefined
tmp32\x86_64cpuid.asm:159: error: symbol `L$aligned' undefined
tmp32\x86_64cpuid.asm:161: error: symbol `L$ittle' undefined
NMAKE : fatal error U1077: '!NASM208DIR!\nasm.EXE' : return code '0x1'
(The symbols in question are defined on lines before they are used, the
errors report the lines where they are used).
|