Re: Help needed: small piece of assembler code for IRAF

Adam Sampson <[email protected]>
Newsgroups gmane.linux.debian.ports.68k
Message-ID <[email protected]>
Hi Ole,

Ole Streicher <[email protected]> writes:
> I created a small repository [4] that contains the assembler I
> collected so far as well as two test programs.

The code you've written looks OK -- the only problem is that in
glibc, sigsetjmp is a macro which calls the real function __sigsetjmp:
https://sourceware.org/git/?p=glibc.git;a=blob;f=setjmp/setjmp.h;hb=HEAD#l72

So you need "jra __sigsetjmp" (as you've done on other architectures),
rather than "jra sigsetjmp". With that change, your tests work on an
emulated m68k machine:

$ git diff
diff --git a/zsvjmp-m68k.s b/zsvjmp-m68k.s
index 3b12e5d..43ca08c 100644
--- a/zsvjmp-m68k.s
+++ b/zsvjmp-m68k.s
@@ -12,7 +12,7 @@ zsvjmp_:
 	move.l %a1,(%a0)+
 	clr.l 8(%sp)
 	move.l %a0,4(%sp)
-	jra sigsetjmp
+	jra __sigsetjmp
 
 	.size	zsvjmp_, .-zsvjmp_
 	.section	.note.GNU-stack,"",@progbits

$ make ARCH=m68k test
gfortran -ff2c -g  -c -o jmptest.o jmptest.f
gcc -g    -c -o zdojmp.o zdojmp.c
as   -o zsvjmp-m68k.o zsvjmp-m68k.s
ar cr libzsvjmp.a zdojmp.o zsvjmp-m68k.o
gfortran -o jmptest jmptest.o -L. -lzsvjmp
gcc -g    -c -o zzdebug.o zzdebug.c
gcc -g -g -o zzdebug zzdebug.o -L. -lzsvjmp
./zzdebug
Status = 0, step = 0
Calling zdojmp
Status = 1, step = 1
All OK
./jmptest
 Status =                     0 step =                     0
 Calling zdojmp
 Status =            4294967296 step =                     1
 All OK
STOP 0

Thanks,
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.