[erlang-questions] R12.0B and Sparcs

Mikael Pettersson <>
Wed Jan 2 14:26:26 CET 2008


Bruce O'Neel writes:
 > Happy New Year,
 > 
 > Here at the home for ancient, disused, and discarded computers we noticed that 
 > while R11B-5 built and ran just fine on Sparcs, R12B-0 did not at least on 
 > OpenBSD and NetBSD.

What exactly is the failure? Compile-time warning from the assembler
on the V9 instructions? Runtime SIGILL?

 > No, not Ultras, the sparcs that Sun hasn't actually shipped for 10+ years, the old
 > V7 and V8 systems (ie SPARCstation 10s, 20s, 4s, and 5s etc).
 > 
 > It turns out that a small change to 
 > 
 > erts/include/internal/ethread.h 
 > 
 > allows them to work again.
 > 
 > 82a83,85
 > > /* BEO  for SPARC OpenBSD only.  Not SPARC64! */
 > > #  define ETHR_DISABLE_NATIVE_IMP
 > >
 > 
 > Basically the above define throws away the optimized assembly code in 
 > erts/include/internal/sparc32 which is V9 (ie Ultra) specific.

The SPARC v9 (actually v8+) code referenced by ethread.h is
essentially the same in R11B-5 and R12B-0.
I suspect some configuration change is causing your problems.

- Did you build R11B-5 with SMP support on SPARC v7/v8?
  If so, was it autoenabled or did you enable it explicitly.
- Does R12B-0 autoenable SMP on BSD/SPARC or do you enable
  it explicitly?

GCC's __sparcv9 macro is unfortunately useless here
(it seems to be set if and only if 64-bit code is generated),
so to disable the v8+/v9 code automatically we'd have to add
a check in erts/configure.in and use that to #define a macro
which we then check in ethread.h.

/Mikael



More information about the erlang-questions mailing list