Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update the POWER port for OCaml 5 #12276

Merged
merged 9 commits into from Jun 19, 2023
Merged

Conversation

xavierleroy
Copy link
Contributor

@xavierleroy xavierleroy commented May 30, 2023

This big PR restores native-code support for the POWER/PowerPC 64 bits little endian architecture and adds support for all the OCaml 5 niceties.

The other two POWER/PowerPC variants (32 bits and 64 bits big endian) remain bytecode-only, as they have pretty much disappeared from the server world and are now only found in embedded systems that are unlikely to run OCaml code.

The PR is best reviewed commit-by-commit. Most of the work is in commit 05d82f9 :

On the compiler side:

  • Generate POWER barriers for atomic loads and noninitializing stores
    Noninitializing stores: as described in the PLDI 2018 memory model paper.
    Atomic loads: as generated by GCC for SC atomic_load.
  • Update code generated for external calls
  • Add support for Icompf instruction
  • Add support for stack overflow checking
  • Revised exception handling:
    - Trap frames are 2 words (16 bytes) instead of 4, this is large enough
    - Linkage is in first word of trap frame (needed for stack reallocation)
    - Trap pointer points to trap frame, not to bottom of stack frame (needed for stack reallocation)
    - Implemented caml_reraise_exn and moved zero-ing of backtrace_pos to caml_raise_exn.

On the runtime side:

  • Extensive rewrite of runtime/power.S, based mostly on runtime/arm64.S
  • Added POWER definitions to <caml/stack.h>
  • Added POWER definition of c_stack_link to <caml/fiber.h>
  • Handle SIGTRAP signals and turn them into out-of-bounds exceptions

The first 4 commits are ground work. aa4a811 is from #12275.(now merged).

The last commit is an unfinished experiment into supporting frame pointers, which seem necessary to get decent backtraces under GDB. (CFI information seems ignored by default?) It needs more work.

@xavierleroy
Copy link
Contributor Author

To simplify reviewing, I removed the experiment with frame pointer support from this PR, as it is definitely not ready.

@tmcgilchrist
Copy link
Contributor

I've been working on and off on the Power64 support also and would be happy to review this PR.
We are interested in using this support in the build cluster for opam-repo-ci and check.ci.ocaml.org.

@avsm
Copy link
Member

avsm commented Jun 2, 2023

@tmcgilchrist In case you need a native host, I've installed opam on the ppc64 orithea host which you should have a shell on, and (as a convenient CLI for any compiler PR) you can do opam compiler create xavierleroy/ocaml:resurrect-power or opam compiler create '#12276' to directly build the compiler from this branch.

@avsm
Copy link
Member

avsm commented Jun 2, 2023

I've taken this PR for a quick spin on my OCaml 5 monorepos, and it compiles a large amount of OCaml code (including mirage-crypto/tls) and serves pages just fine. I'll run some benchmarks but no regressions spotted so far.

Definition taken from the Linux kernel sources,
arch/powerpc/include/asm/vdso/processor.h
On the compiler side:
- Generate POWER barriers for atomic loads and noninitializing stores
  Noninitializing stores: as described in the PLDI 2018 memory model paper.
  Atomic loads: as generated by GCC for SC atomic_load.
- Update code generated for external calls
- Add support for Icompf instruction
- Add support for stack overflow checking
- Revised exception handling:
    - Trap frames are 2 words (16 bytes) large, this is enough
    - Linkage is in first word of trap frame (needed for stack reallocation)
    - Trap pointer points to trap frame, not to bottom of stack frame
      (needed for stack reallocation)
    - Implemented caml_reraise_exn and moved zero-ing of backtrace_pos
      to caml_raise_exn.

On the runtime side:
- Extensive rewrite of runtime/power.S, based mostly on runtime/arm64.S
- Added POWER definitions to <caml/stack.h>
- Added POWER definition of `c_stack_link` to `<caml/fiber.h>`
- Handle SIGTRAP signals and turn them into out-of-bounds exceptions
Because a trap frame size of 32 was still used, while it's 16 now.
These branches are taken/not taken when an allocation runs out of space
or when polling is positive, which is unlikely.
@avsm
Copy link
Member

avsm commented Jun 4, 2023

I upstreamed the build fixes (which seem to be due to a gcc 11 compiler bug on powerpc64 issuing spurious warnings) to mirage-crypto, and now the effects-based webserver is running fine on ppc64le with this PR: https://orithia.ocamllabs.io.

Just running stress tests on it, then shifting to multi-domain testing, but no issues encountered so far. Bulk builds also show no unexpected regressions against OCaml 4 ppc64 so far (but are chugging along more slowly).

asmcomp/power/emit.mlp Outdated Show resolved Hide resolved
Big TOC has been the default for a while, since many packages
overflow the TOC when compiled in small TOC mode.
/* The purpose of this function is to simulate a [caml_c_call]
to [caml_array_bound_error_asm]. */

caml_domain_state * dom_st = Caml_state;
Copy link
Contributor

@gadmm gadmm Jun 6, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, but:

  • is it known that the signal handler will only run for OCaml code? I wonder if it is necessary to check that the pc points to OCaml code prior to accessing Caml_state.
  • For C11 conformance, one can access TLS in a signal handler, but the thread-local variable has to be _Atomic, which it is not, currently. One also has to consider the fact that glibc does not conform to C11 and can allocate in corner cases (that are probably irrelevant here); as for MacOS one might want to reimplement the more efficient implementation of Caml_state that uses explicit TLS one day (edit: irrelevant for this target!). Could you side-step these worries by retrieving the domain state pointer from ctx instead?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where can I find the code in ocamlopt that is setting up the SIGTRAP machinery?
Is runtime/signals.c the right place?

Does the Reraise sigsegv #10409 need multicore updating? @gadmm

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tmcgilchrist if you mean where the bound checks are emitted, then on power it's via instructions that emit traps. See the Icheckbound functions in power/emit.mlp; e.g.

    | Lop(Iintop_imm(Icheckbound, n)) ->
        if !Clflags.debug then
          record_frame env Reg.Set.empty (Dbg_other i.dbg);
        `       tdllei  {emit_reg i.arg.(0)}, {emit_int n}\n`

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tmcgilchrist It makes sense to adapt #10409 to SIGTRAP on Power indeed (as part of a new PR and if someone volunteers).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you side-step these worries by retrieving the domain state pointer from ctx instead?

Yes, sure, see 0b12d86 .

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is it known that the signal handler will only run for OCaml code? I wonder if it is necessary to check that the pc points to OCaml code prior to accessing Caml_state.

And what shall we do if it doesn't? Abort the program?

Copy link
Contributor

@gadmm gadmm Jun 8, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For SEGV you used to restore the signal handler to its default disposition and restart at the faulting instruction (and thus abort the program in a debuggable way). I imagine that you did not do the same here for some reason. I imagine that traps increment the program counter like on x86 but decrementing the pc does not sound like an obstacle. Am I missing anything?

I also noticed that caml_find_code_fragment_by_pc is essentially signal-safe because the call to caml_code_fragment_cleanup in cycle_all_domains_callback can be omitted (in fact, does nothing) in native, as no code fragment gets removed.

I agree with your point that none of these issues are blocking, since this is old code being ported to multicore.

]}
*)
let (bitnum, negated) = emit_float_comp cmp i.arg in
emit_extract_crbit bitnum negated i.res.(0)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The memory model is implemented by the following sequences (compared to RISC-V and ARMv8):

OCaml Operation POWER operation ARMv8 operation RISC-V operation
Atomic load sync; lwz; cmpw; bne; isync dmb ishld; ldar fence iorw, iorw; ld; fence iorw, iorw
Atomic store lwsync; stw L: ldaxr; stlxr; cbnz L; dmb st fence iorw, ow; amoswap.d.aq
Nonatomic load lwz ldr ld
Nonatomic store stw dmb ishld; str sd

These look right to me and match the instructions I had worked out.

It uses these instructions:

  • sync (hwsync) - heavy weight sync is a full memory barrier that prevents any reordering
  • lwsync - lightweight sync is a memory barrier that prevents reordering (Load-Load, Load-Store, Store-Store)
  • isync - instruction sync, refetches any instructions that might have been fetched prior to this instruction

I'm running this through the ocaml-multicore/multicoretests to validate further.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ocaml-multicore/multicoretests didn't find any new issues (that aren't already reported elsewhere). I've compiled various EIO/multicore projects and no problems found.

I'd like to setup https://check.ci.ocaml.org to run against CI's POWER pool and see what it finds. @avsm

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Non-initialising (non-atomic) stores for Power are incorrect in the table. The PR does the right thing and emits: lwsync; stw, which is the same as what the PLDI 2018 paper suggests. See sec 8.2 in the paper: https://kcsrk.info/papers/pldi18-memory.pdf. In the code, see https://github.com/ocaml/ocaml/pull/12276/files#diff-f99d939a29505721a1d19a6aed606eac2d97eff24a8936102ab32e0794a3a97aR695.

@@ -16,19 +16,11 @@

(* Specific operations for the PowerPC processor *)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Technically this should be Specific operations for the Power processor. PowerPC is name for the 32bit family, which is being dropped and IBM changed naming from POWER to Power with Power10.

@xavierleroy
Copy link
Contributor Author

A note about the use of traps in this port, to make sure it doesn't monopolize the reviewing. It's a design choice that goes back to the original POWER port of OCaml circa 1996. The nice thing about it is that bounds checking is performed in 1 instruction, instead of 2+ with the usual approach, so code is smaller and runs fast in the "within bounds" case. The not so nice thing is that a signal is generated in the "out of bounds" case, and turning this signal into an OCaml exception is slow and runs into all the vagaries of Unix signal handling. In 25+ years of OCaml on POWER/PowerPC, nobody has complained about these limitations, though. I chose to keep the 1996 approach in this PR to minimize the amount of new code, but we could also change the code generated for bounds checks to not use traps. I would not do this in this PR and not before this PR is accepted, though.

@avsm
Copy link
Member

avsm commented Jun 7, 2023

I think using hardware traps should remain the choice for now, until emerging new kernel->userspace signalling mechanisms land like Linux uintr which is way better than either signals or eventfd. So a slow/safe implementation using signals for now seems just fine...

Certainly, I'm finding myself just using this PR day-to-day now to write OCaml code on an fast Raptor Talos II machine and quite enjoying the experience :-)

@tmcgilchrist
Copy link
Contributor

tmcgilchrist commented Jun 8, 2023 via email

@kayceesrk
Copy link
Contributor

The code looks ok. I didn't spot any gotchas.

As a sanity check, I built and ran the testsuite under Docker for Mac which uses qemu for emulating ppc64le. I received the following failures:

    tests/weak-ephe-final/'finaliser_handover.ml' with 1 (native) Process 51133 got signal 6(Aborted), no core dumped                                                                                                                         
    tests/asmcomp/'try_checkbound.ml' with 1 (native) Process 45912 got signal 6(Aborted), no core dumped                                                                                                                                     
    tests/lib-bytes-utf/'test.ml' with 1 (native) Process 67633 got signal 6(Aborted), no core dumped                                                                                                                                         
    tests/prim-bigstring/'string_access.ml' with 1 (native) Process 8734 got signal 6(Aborted), no core dumped                                                                                                                                
    tests/backtrace/'backtrace_deprecated.ml' with 1 (native) Process 45085 got signal 6(Aborted), no core dumped                                                                                                                             
    tests/backtrace/'backtrace2.ml' with 1 (native) Process 43864 got signal 6(Aborted), no core dumped                                                                                                                                       
    tests/backtrace/'backtrace.ml' with 1 (native)                                                                                                                                                                                            
    tests/lib-floatarray/'floatarray.ml' with 1 (native) Process 74507 got signal 6(Aborted), no core dumped                                                                                                                                  
    tests/backtrace/'backtrace3.ml' with 1 (native) Process 44045 got signal 6(Aborted), no core dumped                                                                                                                                       
    tests/backtrace/'backtrace_bounds_exn.ml' with 1 (native) Process 44210 got signal 6(Aborted), no core dumped                                                                                                                             
    tests/prim-bigstring/'bigstring_access.ml' with 1 (native) Process 8331 got signal 6(Aborted), no core dumped                                                                                                                             
    tests/backtrace/'backtrace_slots.ml' with 1 (native) Process 46782 got signal 6(Aborted), no core dumped                                                                                                                                  
    tests/backtrace/'raw_backtrace.ml' with 1 (native) Process 53336 got signal 6(Aborted), no core dumped                                                                                                                                    
    tests/lib-bigarray/'bigarrays.ml' with 1 (native) Process 65948 got signal 6(Aborted), no core dumped                                                                                                                                     
    tests/parallel/'fib_threads.ml' with 1.2 (native) Process 16262 got signal 6(Aborted), no core dumped                                                                                                                                     
    tests/lib-bytes/'binary.ml' with 1 (native) Process 67591 got signal 6(Aborted), no core dumped                                                                                                                                           
    tests/basic-more/'pr2719.ml' with 1 (native) Process 52484 got signal 6(Aborted), no core dumped                                                                                                                                          
    tests/lib-string/'binary.ml' with 1 (native) Process 82592 got signal 6(Aborted), no core dumped                                                                                                                                          
    tests/basic-more/'bounds.ml' with 1 (native) Process 48474 got signal 6(Aborted), no core dumped                                                                                                                                          
    tests/basic/'arrays.ml' with 1 (native) Process 45145 got signal 6(Aborted), no core dumped                                                                                                                                               
    tests/lib-systhreads/'boundscheck.ml' with 1.2 (native) Process 85839 got signal 6(Aborted), no core dumped

Running just one of the tests (tests/weak-ephe-final/'finaliser_handover.ml') produced this output:

> Running action 4/8 (run)                                                                                                                                                                                                                    
> Commandline: /home/ubuntu/ocaml/testsuite/_ocamltest/tests/weak-ephe-final/finaliser_handover/ocamlopt.byte/finaliser_handover.opt                                                                                                          
>   Redirecting stdout to /home/ubuntu/ocaml/testsuite/_ocamltest/tests/weak-ephe-final/finaliser_handover/ocamlopt.byte/finaliser_handover.opt.output                                                                                        
>   Redirecting stderr to /home/ubuntu/ocaml/testsuite/_ocamltest/tests/weak-ephe-final/finaliser_handover/ocamlopt.byte/finaliser_handover.opt.output                                                                                        
> ### begin stdout ###                                                                                                                                                                                                                        
> qemu: fatal: Tried to call a TRAP                                                                                                                                                                                                           
>                                                                                                                                                                                                                                             
> NIP 000000400004c3e8   LR 000000400004c3e0 CTR 00000040000c1ff0 XER 0000000020040000 CPU#0                                                                                                                                                  
> MSR 9000000102806901 HID0 0000000000000000  HF 02806105 iidx 0 didx 0                                                                                                                                                                       
> TB 00391387 1680997421969412                                                                                                                                                                                                                
> GPR00 00000040000486d0 0000004000164370 0000004000107c00 0000004011e2fff8                                            
> GPR04 0000000000000018 0000000000000600 000000400012c120 000000400012c138                                                                                                                                                                   > GPR08 0000000000000006 0000004000137c00 0000004011e40120 000000400015c3e0                                            
> GPR12 00000040000c1ff0 0000004001b1c7e0 000000400012c0c8 000000400012c0b0                                            
> GPR16 000000400012c098 000000400012c080 000000400012c068 000000400012c138                                            
> GPR20 0000004000129958 0000004000129958 000000400012c138 0000000000000400                                            
> GPR24 0000004001fb6a80 00000040000c1ff0 0000004000107c00 000000400004c3e0                                            
> GPR28 00000040001643a0 0000004000164390 000000400014b9b0 0000004001fb6a58                                            
> CR 44002842  [ G  G  -  -  E  L  G  E  ]             RES ffffffffffffffff                                            
> FPR00 000000000000cdc7 4059000000000000 0000000000000000 0000000000000000                                                                                                                                                                   
> FPR04 0000000000000000 0000000000000000 0000000000000000 3fe0000000000000                                                                                                                                                                   > FPR08 406b800000000000 40d745c000000000 0000000000000000 3ff0000000000000                                            
> FPR12 413fffcc00000000 0000000000000000 0000000000000000 0000000000000000                                                                                                                                                                   
> FPR16 0000000000000000 0000000000000000 0000000000000000 0000000000000000                                                                                                                                                                   
> FPR20 0000000000000000 0000000000000000 0000000000000000 0000000000000000                             
> FPR24 0000000000000000 0000000000000000 0000000000000000 0000000000000000                                                                                                                                                                   
> FPR28 0000000000000000 0000000000000000 0000000000000000 0000000000000000                                           
> FPSCR 0000000082004000                                                                                                                                                                                                                      > ### end stdout ###                                 

The error seems unrelated to the PR and looks like a qemu issue? https://gitlab.com/qemu-project/qemu/-/issues/588

I'm yet to build the compiler on Power hardware. @xavierleroy while it hasn't been explicitly mentioned in the thread, I assume the testsuite passes there.

@xavierleroy
Copy link
Contributor Author

Yes, I'm afraid QEMU doesn't fully implement trap instructions. And, yes, I ran the testsuite (many times) on real hardware -- the same POWER9 machine at Cambridge that is part of the Jenkins CI. I'm sure @avsm can provide you with an account on this machine.

Copy link
Contributor

@kayceesrk kayceesrk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code looks good to me. Glad to have Power back!

@kayceesrk
Copy link
Contributor

I ran the testsuite (many times) on real hardware -- the same POWER9 machine at Cambridge that is part of the Jenkins CI.

Thanks for the confirmation. I am happy for this one to be merged.

@avsm
Copy link
Member

avsm commented Jun 19, 2023

I do regret adding the more exotic architectures to the default binfmt_misc in Docker for Desktop; the number of bug reports that have come through from qemu being an incomplete emulator are very high.

For completeness alongside the existing POWER9 results, I also ran the testsuite in this PR on an older physical POWER8 machine (PowerNV 8348-21C), with no failures.

Summary:
  3350 tests passed
   64 tests skipped
    0 tests failed
  126 tests not started (parent test skipped or failed)
    0 unexpected errors
  3540 tests considered

So thumbs up from me on this PR.

(KC: I'll contact you separately about a POWER9 account; you've already got an account on the machines)

@xavierleroy xavierleroy merged commit 5672ed6 into ocaml:trunk Jun 19, 2023
6 of 7 checks passed
@xavierleroy
Copy link
Contributor Author

Thanks all for the reviews and tests. It's now merged!

@XVilka
Copy link
Contributor

XVilka commented Jun 20, 2023

The code looks ok. I didn't spot any gotchas.

As a sanity check, I built and ran the testsuite under Docker for Mac which uses qemu for emulating ppc64le. I received the following failures:

    tests/weak-ephe-final/'finaliser_handover.ml' with 1 (native) Process 51133 got signal 6(Aborted), no core dumped                                                                                                                         
    tests/asmcomp/'try_checkbound.ml' with 1 (native) Process 45912 got signal 6(Aborted), no core dumped                                                                                                                                     
    tests/lib-bytes-utf/'test.ml' with 1 (native) Process 67633 got signal 6(Aborted), no core dumped                                                                                                                                         
    tests/prim-bigstring/'string_access.ml' with 1 (native) Process 8734 got signal 6(Aborted), no core dumped                                                                                                                                
    tests/backtrace/'backtrace_deprecated.ml' with 1 (native) Process 45085 got signal 6(Aborted), no core dumped                                                                                                                             
    tests/backtrace/'backtrace2.ml' with 1 (native) Process 43864 got signal 6(Aborted), no core dumped                                                                                                                                       
    tests/backtrace/'backtrace.ml' with 1 (native)                                                                                                                                                                                            
    tests/lib-floatarray/'floatarray.ml' with 1 (native) Process 74507 got signal 6(Aborted), no core dumped                                                                                                                                  
    tests/backtrace/'backtrace3.ml' with 1 (native) Process 44045 got signal 6(Aborted), no core dumped                                                                                                                                       
    tests/backtrace/'backtrace_bounds_exn.ml' with 1 (native) Process 44210 got signal 6(Aborted), no core dumped                                                                                                                             
    tests/prim-bigstring/'bigstring_access.ml' with 1 (native) Process 8331 got signal 6(Aborted), no core dumped                                                                                                                             
    tests/backtrace/'backtrace_slots.ml' with 1 (native) Process 46782 got signal 6(Aborted), no core dumped                                                                                                                                  
    tests/backtrace/'raw_backtrace.ml' with 1 (native) Process 53336 got signal 6(Aborted), no core dumped                                                                                                                                    
    tests/lib-bigarray/'bigarrays.ml' with 1 (native) Process 65948 got signal 6(Aborted), no core dumped                                                                                                                                     
    tests/parallel/'fib_threads.ml' with 1.2 (native) Process 16262 got signal 6(Aborted), no core dumped                                                                                                                                     
    tests/lib-bytes/'binary.ml' with 1 (native) Process 67591 got signal 6(Aborted), no core dumped                                                                                                                                           
    tests/basic-more/'pr2719.ml' with 1 (native) Process 52484 got signal 6(Aborted), no core dumped                                                                                                                                          
    tests/lib-string/'binary.ml' with 1 (native) Process 82592 got signal 6(Aborted), no core dumped                                                                                                                                          
    tests/basic-more/'bounds.ml' with 1 (native) Process 48474 got signal 6(Aborted), no core dumped                                                                                                                                          
    tests/basic/'arrays.ml' with 1 (native) Process 45145 got signal 6(Aborted), no core dumped                                                                                                                                               
    tests/lib-systhreads/'boundscheck.ml' with 1.2 (native) Process 85839 got signal 6(Aborted), no core dumped

Running just one of the tests (tests/weak-ephe-final/'finaliser_handover.ml') produced this output:

> Running action 4/8 (run)                                                                                                                                                                                                                    
> Commandline: /home/ubuntu/ocaml/testsuite/_ocamltest/tests/weak-ephe-final/finaliser_handover/ocamlopt.byte/finaliser_handover.opt                                                                                                          
>   Redirecting stdout to /home/ubuntu/ocaml/testsuite/_ocamltest/tests/weak-ephe-final/finaliser_handover/ocamlopt.byte/finaliser_handover.opt.output                                                                                        
>   Redirecting stderr to /home/ubuntu/ocaml/testsuite/_ocamltest/tests/weak-ephe-final/finaliser_handover/ocamlopt.byte/finaliser_handover.opt.output                                                                                        
> ### begin stdout ###                                                                                                                                                                                                                        
> qemu: fatal: Tried to call a TRAP                                                                                                                                                                                                           
>                                                                                                                                                                                                                                             
> NIP 000000400004c3e8   LR 000000400004c3e0 CTR 00000040000c1ff0 XER 0000000020040000 CPU#0                                                                                                                                                  
> MSR 9000000102806901 HID0 0000000000000000  HF 02806105 iidx 0 didx 0                                                                                                                                                                       
> TB 00391387 1680997421969412                                                                                                                                                                                                                
> GPR00 00000040000486d0 0000004000164370 0000004000107c00 0000004011e2fff8                                            
> GPR04 0000000000000018 0000000000000600 000000400012c120 000000400012c138                                                                                                                                                                   > GPR08 0000000000000006 0000004000137c00 0000004011e40120 000000400015c3e0                                            
> GPR12 00000040000c1ff0 0000004001b1c7e0 000000400012c0c8 000000400012c0b0                                            
> GPR16 000000400012c098 000000400012c080 000000400012c068 000000400012c138                                            
> GPR20 0000004000129958 0000004000129958 000000400012c138 0000000000000400                                            
> GPR24 0000004001fb6a80 00000040000c1ff0 0000004000107c00 000000400004c3e0                                            
> GPR28 00000040001643a0 0000004000164390 000000400014b9b0 0000004001fb6a58                                            
> CR 44002842  [ G  G  -  -  E  L  G  E  ]             RES ffffffffffffffff                                            
> FPR00 000000000000cdc7 4059000000000000 0000000000000000 0000000000000000                                                                                                                                                                   
> FPR04 0000000000000000 0000000000000000 0000000000000000 3fe0000000000000                                                                                                                                                                   > FPR08 406b800000000000 40d745c000000000 0000000000000000 3ff0000000000000                                            
> FPR12 413fffcc00000000 0000000000000000 0000000000000000 0000000000000000                                                                                                                                                                   
> FPR16 0000000000000000 0000000000000000 0000000000000000 0000000000000000                                                                                                                                                                   
> FPR20 0000000000000000 0000000000000000 0000000000000000 0000000000000000                             
> FPR24 0000000000000000 0000000000000000 0000000000000000 0000000000000000                                                                                                                                                                   
> FPR28 0000000000000000 0000000000000000 0000000000000000 0000000000000000                                           
> FPSCR 0000000082004000                                                                                                                                                                                                                      > ### end stdout ###                                 

The error seems unrelated to the PR and looks like a qemu issue? https://gitlab.com/qemu-project/qemu/-/issues/588

I'm yet to build the compiler on Power hardware. @xavierleroy while it hasn't been explicitly mentioned in the thread, I assume the testsuite passes there.

The issue linked was closed 11 months ago. If it still happens, it would be great if you open a new issue, otherwise this might be never fixed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants