Skip to content
  • Sergei Trofimovich's avatar
    unique: fix UNIQUE_BITS crosscompilation (Trac #13491) · 01b062ec
    Sergei Trofimovich authored and Ben Gamari's avatar Ben Gamari committed
    
    
    The #13491 manifests best when we try to crosscompile
    from 32-bit (i386-linux) to 64-bit (powerpc64-linux)
    system:
        ./configure --target=powerpc64-unknown-linux-gnu
    
    The build fails at assembly time:
      "inplace/bin/ghc-stage1" ...  -c rts/StgStartup.cmm
        /tmp/ghc19687_0/ghc_4.s: Assembler messages:
    
        /tmp/ghc19687_0/ghc_4.s:11:0: error:
             Error: unknown pseudo-op: `.l'
           |
        11 | .L<\x00>4:
           | ^
    
    That happens because UNIQUE_BITS is defined in terms
    of WORD_SIZE_IN_BITS macro:
        #define UNIQUE_BITS (WORD_SIZE_IN_BITS - 8)
    
    WORD_SIZE_IN_BITS is 64 bits (equals to target value)
    while ghc-stage1 is still running on i386-linux
    
    The fix is to stop relying on target macros and use
    host's 'sizeof (HsInt)' and 'finiteBitSize' way to
    determine unique layout.
    
    Signed-off-by: default avatarSergei Trofimovich <slyfox@gentoo.org>
    
    Test Plan: build i386-to-powerpc64 crosscompiler
    
    Reviewers: rwbarton, austin, bgamari
    
    Reviewed By: bgamari
    
    Subscribers: RyanGlScott, thomie
    
    Differential Revision: https://phabricator.haskell.org/D3397
    01b062ec