rts: fix build failure on OpenBSD (_DYNAMIC symbol collision)
authorSergei Trofimovich <slyfox@gentoo.org>
Tue, 18 Dec 2018 23:17:45 +0000 (23:17 +0000)
committerBen Gamari <ben@well-typed.com>
Sat, 29 Dec 2018 16:20:49 +0000 (11:20 -0500)
Summary:
Build failure on OpenBSD-6.4 the the following:
```
rts/RtsSymbols.c:994:1: error:
     error: redefinition of '_DYNAMIC' as different kind of symbol
    |
994 | RTS_OPENBSD_ONLY_SYMBOLS
    | ^
RTS_OPENBSD_ONLY_SYMBOLS
^
```

On OpenBSD `_DYNAMIC` was always defined in `<elf.h>` headers
but used not to be included.

The change explicitly includes `<elf.h>` as a source of symbol definition.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Test Plan: build-tested on OpenBSD-6.4

Reviewers: bgamari, erikd, simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15945

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

rts/RtsSymbols.c

index 5091c90..123ee76 100644 (file)
 #include <shfolder.h> /* SHGetFolderPathW */
 #endif
 
+#if defined(openbsd_HOST_OS)
+#include <elf.h> /* _DYNAMIC */
+#endif
+
 /* -----------------------------------------------------------------------------
  * Symbols to be inserted into the RTS symbol table.
  */
 #if defined(openbsd_HOST_OS)
 #define RTS_OPENBSD_ONLY_SYMBOLS                            \
      SymE_NeedsProto(__guard_local)                         \
-     SymE_NeedsProto(_DYNAMIC)
+     SymE_HasProto(_DYNAMIC)
 #else
 #define RTS_OPENBSD_ONLY_SYMBOLS
 #endif