[GHC] #10383: AArch64: get GHC Calling convention working

GHC ghc-devs at haskell.org
Thu May 28 01:18:54 UTC 2015


#10383: AArch64: get GHC Calling convention working
----------------------------------------+----------------------------------
        Reporter:  erikd                |                   Owner:  erikd
            Type:  feature request      |                  Status:  new
        Priority:  normal               |               Milestone:  7.12.1
       Component:  Compiler             |                 Version:  7.11
      Resolution:                       |                Keywords:
Operating System:  Unknown/Multiple     |            Architecture:  aarch64
 Type of failure:  Building GHC failed  |               Test Case:
      Blocked By:                       |                Blocking:
 Related Tickets:                       |  Differential Revisions:
----------------------------------------+----------------------------------

Comment (by erikd):

 Narrowed the problem down to code in `rts/sm/Evac.c` namely:

 {{{
     do {
         info_ptr = xchg((StgPtr)&p->header.info, (W_)&stg_WHITEHOLE_info);
     } while (info_ptr == (W_)&stg_WHITEHOLE_info);
 }}}

 Adding a `printf` before and after the call to `xchg` found that the
 exchange was happening, but the function was returning `0` instead of the
 old value of `p->header.info`.

 Wrote a small program to test this:

 {{{
 #include "PosixSource.h"
 #include "Rts.h"
 #include "Stg.h"
 #include "stg/Types.h"
 #include "stg/SMP.h"

 int main (void)
 {   StgWord a = 0xa, b = 0xb, res = 1;
     printf ("0x%lx 0x%lx 0x%lx\n", res, a, b);
     res = xchg(&a, b);
     printf ("0x%lx 0x%lx 0x%lx\n", res, a, b);
     return 0;
 }
 }}}

 which I compile and run as:

 {{{
 gcc-5 -Wall -O3 -Iincludes -Irts -fno-stack-protector -DTHREADED_RTS \
       -DCOMPILING_RTS xchg_test.c -o xchg_test && ./xchg_test
 }}}

 which on AArch64/Arm64 results:

 {{{
 0x1 0xa 0xb
 0x0 0xb 0xb
 }}}

 which is just profoundly wrong! The expected result is:

 {{{
 0x1 0xa 0xb
 0xa 0xb 0xb
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10383#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list