Yasm compile issue (1.2 & trunk)

Hi,

I’ve been trying out SDL-1.2 and was pleasantly surprised that it chose
yasm over nasm as the default intel syntax assembler but less pleasantly
surprised that it didn’t actually compile with its preferred assembler.

I’ve logged the particular problem as a nasm compatibility issue over at
tortall.net but I thought you might be interested in a patch to fix the
issue.

It looks like this has been broken since the “non-executable stack” fix
went in. Does anyone test with yasm? The patch is against the trunk
(1.3?) but a fix against 1.2 would be nice. Is 1.2 still open for fixes?

I have tested the patch as compiling and working (i.e. correct object
file sections being created) with both current yasm (0.5.0 + recent
fixes) and nasm from fedora core 5:

$ nasm -v
NASM version 0.98.39 compiled on Feb 12 2006

A quick note on the patch. You can’t leave the quotes in the section
name for nasm as, although it compiles, the quotes make it into the
section name of the resultant object file which is wrong.

Thanks,

Charles.

$ svn info
Path: .
URL: svn://libsdl.org/trunk/SDL
Repository Root: svn://libsdl.org
Repository UUID: c70aab31-4412-0410-b14c-859654838e24
Revision: 2926

Index: src/hermes/mmx_main.asm===================================================================
— src/hermes/mmx_main.asm (revision 2926)
+++ src/hermes/mmx_main.asm (working copy)
@@ -72,5 +72,9 @@
ret

%ifidn OUTPUT_FORMAT,elf
+%ifdef YASM_MAJOR
+section “.note.GNU-stack” noalloc noexec nowrite progbits
+%else
section .note.GNU-stack noalloc noexec nowrite progbits
%endif
+%endif
Index: src/hermes/mmxp2_32.asm

— src/hermes/mmxp2_32.asm (revision 2926)
+++ src/hermes/mmxp2_32.asm (working copy)
@@ -403,5 +403,9 @@
jmp _mmxreturn

%ifidn OUTPUT_FORMAT,elf
+%ifdef YASM_MAJOR
+section “.note.GNU-stack” noalloc noexec nowrite progbits
+%else
section .note.GNU-stack noalloc noexec nowrite progbits
%endif
+%endif
Index: src/hermes/x86_main.asm

— src/hermes/x86_main.asm (revision 2926)
+++ src/hermes/x86_main.asm (working copy)
@@ -118,5 +118,9 @@
ret

%ifidn OUTPUT_FORMAT,elf
+%ifdef YASM_MAJOR
+section “.note.GNU-stack” noalloc noexec nowrite progbits
+%else
section .note.GNU-stack noalloc noexec nowrite progbits
%endif
+%endif
Index: src/hermes/x86p_32.asm

— src/hermes/x86p_32.asm (revision 2926)
+++ src/hermes/x86p_32.asm (working copy)
@@ -1043,5 +1043,9 @@
jmp _x86return

%ifidn OUTPUT_FORMAT,elf
+%ifdef YASM_MAJOR
+section “.note.GNU-stack” noalloc noexec nowrite progbits
+%else
section .note.GNU-stack noalloc noexec nowrite progbits
%endif
+%endif
Index: src/hermes/x86p_16.asm

— src/hermes/x86p_16.asm (revision 2926)
+++ src/hermes/x86p_16.asm (working copy)
@@ -487,5 +487,9 @@
jmp _x86return

%ifidn OUTPUT_FORMAT,elf
+%ifdef YASM_MAJOR
+section “.note.GNU-stack” noalloc noexec nowrite progbits
+%else
section .note.GNU-stack noalloc noexec nowrite progbits
%endif
+%endif

This incompatibility between nasm and yasm has now been fixed in the the
trunk of yasm (r1723).

Charles.