Dear powerpc specialists,

I just got the "IRAF" package accepted into Debian [1]. Although the
code is claimed to be portable, it needs a piece  of assembler
code for each platform that provides a (sort of) setjmp() to their
Fortran variant.

A "C" implementation for this looks like:

#include <setjmp.h>

int zsvjmp_( long *buf, long *status ) {
  *status = 0;
  ((long **)buf)[0] = status;
  return sigsetjmp ((void *)((long **)buf+1),0);
}

however this does not work, since the "sigsetjmp" call needs to be
replaced by a jump to sigsetjmp instead.

I already have some code for the ppc 32 bit (linuxppc) platform from
august 2000 in the original distribution:

-------------------------------8<-----------------------------------
        .file   "zsvjmp.s"
        .section        ".text"
        .align 2
        .globl zsvjmp_
        .type   zsvjmp_, @function
zsvjmp_:
        # R3 = buf, R4 = &status
        li 11,0         #
        stw 11,0(4)     # *status = 0
        stw 4,0(3)      # buf[0] = status
        addi 3,3,4      # &buf[1] --> 1st arg for sigsetjmp
        li 4,0          # 0       --> 2nd arg for sigsetjmp
        b __sigsetjmp@PLT
        .size   zsvjmp_,.-zsvjmp_
        .section        .note.GNU-stack,"",@progbits

-------------------------------8<-----------------------------------

The "zdojmp" counterpart is a portable C function.

I created a small repository [2] that contains the assembler I collected
so far as well as two test programs.

However, I have no idea how to write the same for the 64-bit platform
ppc64el. Maybe someone could help me here? Preferably under the IRAF
license [3], so that it can be included upstream later.

There is no direct request from the users to have this ported to
ppc64el. However, it would be nice to have IRAF running on as much
Debian platforms as possible; and maybe someone wants to run it on an
IBM BlueGene or so...

Big Endian systems are a different story; the current version seems to
have some problems on such machines, so there will be no Debian package
for those in the moment.

Best regards

Ole

[1] https://tracker.debian.org/pkg/iraf
[2] https://github.com/olebole/zsvjmp
[3] https://github.com/iraf/iraf-v216/blob/master/local/COPYRIGHTS

Reply via email to