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). |