On Linux/s390x (Debian 8) in 32-bit mode (CC="gcc -m31"),
with configure option --enable-dfltcc, there is a build failure:

  CC       dfltcc.o
../dfltcc.c: Assembler messages:
../dfltcc.c:163: Error: Unrecognized opcode: `stfle'
Makefile:1640: recipe for target 'dfltcc.o' failed
make[2]: *** [dfltcc.o] Error 1

Or, with V=1:

depbase=`echo dfltcc.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
gcc -m31 -std=gnu11 -DHAVE_CONFIG_H -I. -I.. -I./lib  -I../lib 
-I/home/bruno/prefix32/include -Wall   -g -O2 -MT dfltcc.o -MD -MP -MF 
$depbase.Tpo -c -o dfltcc.o ../dfltcc.c &&\
mv -f $depbase.Tpo $depbase.Po
../dfltcc.c: Assembler messages:
../dfltcc.c:163: Error: Unrecognized opcode: `stfle'
Makefile:1640: recipe for target 'dfltcc.o' failed
make[2]: *** [dfltcc.o] Error 1

In the source code there is a comment that attempts to explain why this
code is good for 32-bit mode:

  /* STFLE is supported since z9-109 and only in z/Architecture mode.  When
   * compiling with -m31, gcc defaults to ESA mode, however, since the kernel
   * is 64-bit, it's always z/Architecture mode at runtime.  */

But apparently it assumes that the assembler will grok the 'stfle' instruction.
Which is not the case here (in 32-bit mode).

Bruno






Reply via email to