Split external symbol prototypes (EF_) (Trac #11395)
authorSergei Trofimovich <slyfox@gentoo.org>
Tue, 8 Mar 2016 08:14:08 +0000 (08:14 +0000)
committerSergei Trofimovich <siarheit@google.com>
Tue, 8 Mar 2016 08:14:27 +0000 (08:14 +0000)
commit90e1e160b783644c2d3cc0a05e3a804cea549cf9
treec150978c9ee9efbe0b3e19da9e21d1a7c10e7154
parent82e36edcbd831e9b7c05e1c2cb918ad5de56cd3a
Split external symbol prototypes (EF_) (Trac #11395)

Before the patch both Cmm and C symbols were declared
with 'EF_' macro:

    #define EF_(f)    extern StgFunPtr f()

but for Cmm symbols we know exact prototypes.

The patch splits there prototypes in to:

    #define EFF_(f)   void f() /* See Note [External function prototypes] */
    #define EF_(f)    StgFunPtr f(void)

Cmm functions are 'EF_' (External Functions),
C functions are 'EFF_' (External Foreign Functions).

While at it changed external C function prototype
to return 'void' to workaround ghc bug on m68k.
Described in detail in Trac #11395.

This makes simple tests work on m68k-linux target!

Thanks to Michael Karcher for awesome analysis
happening in Trac #11395.

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
Test Plan: ran "hello world" on m68k successfully

Reviewers: simonmar, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D1975

GHC Trac Issues: #11395
compiler/cmm/CLabel.hs
compiler/cmm/PprC.hs
includes/Stg.h
includes/stg/MiscClosures.h