0.13.0 is no longer compatible with OSX 10.7 #8577

issue jonasschnelli opened this issue on August 24, 2016
  1. jonasschnelli commented at 2:09 PM on August 24, 2016: contributor

    Reported by rancor on IRC #bitcoin , reproduced on my 10.7VM. Works fine on 10.8.

    InitSanityCheck() fails, ... there is no ECC_InitSanityCheck() log output which means, glibc_sanity_test() or glibcxx_sanity_test() are failing.

    Either we analyze and fix it for 0.13.1 or we drop support for OSX 10.7.

  2. jonasschnelli added the label MacOSX on Aug 24, 2016
  3. jonasschnelli commented at 2:12 PM on August 24, 2016: contributor
  4. theuni commented at 7:45 PM on August 24, 2016: member

    Hmm, I just happened to be working on adding a debug symbols output for gitian, so I have a 0.13 gitian build handy. This actually makes for a good test of that process as well.

    Mind throwing this on the vm and trying to get a backtrace?

    https://bitcoincore.org/cfields/bitcoind-osx-0.13.0-debug.tar.gz

  5. jonasschnelli commented at 7:01 AM on August 25, 2016: contributor

    @theuni That build worked on my 10.7VM!

  6. fanquake added this to the milestone 0.13.1 on Sep 27, 2016
  7. fanquake commented at 2:15 AM on September 27, 2016: member

    @jonasschnelli Do we need to follow up here for 0.13.1, or does the test build now work fine?

  8. jonasschnelli commented at 6:14 AM on September 27, 2016: contributor

    Closing. Will make sure I'll always test release-candidates on OSX 10.7.

  9. jonasschnelli closed this on Sep 27, 2016

  10. jonasschnelli commented at 2:10 PM on October 21, 2016: contributor

    0.13.1 rc2 does not run on OSX10.7 ping @theuni <img width="484" alt="bildschirmfoto 2016-10-21 um 16 08 06" src="https://cloud.githubusercontent.com/assets/178464/19601250/cd04fdc6-97a8-11e6-8949-61dcad3238cc.png">

  11. jonasschnelli reopened this on Oct 21, 2016

  12. jonasschnelli commented at 2:11 PM on October 21, 2016: contributor

    bitcoind seems to run fine,... only bitcoin-qt failed during init. Runs fine on 10.8.

  13. theuni commented at 8:55 PM on October 21, 2016: member

    Hmm, having a look.

  14. theuni commented at 7:00 PM on October 24, 2016: member

    Finally reproduced. Tracking it down.

  15. theuni commented at 6:14 AM on October 25, 2016: member

    Ok, bad news. I ended up in the bowels of osx, but I have somewhat of a handle on this now.

    • In past releases (pre-0.13) we always used libstdc++, which works everywhere
    • libstdc++ contains only minimal c++11 support. No atomics, for example.
    • libc++ was introduced in 10.7 and made the default in 10.9. It's the only option for full c++11 support.

    From what I can tell, 10.7's runtime is buggy in several ways. Or it may be that there are some undefined conditions that it reacts to differently in 10.8+.

    Here's an example of one that crashes in 10.7 but works elsewhere. This is a simplified version of an actual failing test of ours:

    #include <assert.h>
    #include <sstream>
    
    int main()
    {
        std::istringstream text("1e10000");
        double result;
        text >> result;
        assert(text.fail());
        return 0;
    }
    

    It appears as though there are several issues relating to text conversion and localization. I didn't manage to track down the typeinfo bug that @jonasschnelli pointed out above, but I assume it comes from a small abi difference in 10.8+.

    I tried all kinds of build combinations, but we're too entrenched in c++11 to make libstdc++ work.

    I've also been able to confirm the above by grabbing my 10.11 libc++ dylibs and forcing 10.7 to use them. These are runs of the test_bitcoin from gitian, on a 10.7 vm:

    corys-MacBook-Pro:bin cory$ ./test_bitcoin 
    Running 212 test cases...
    test/uint256_tests.cpp:197: error: in "uint256_tests/methods": check ss.str() == std::string(ZeroArray,ZeroArray+32) has failed
    test/uint256_tests.cpp:199: error: in "uint256_tests/methods": check ZeroL == TmpL has failed
    test/uint256_tests.cpp:202: error: in "uint256_tests/methods": check ss.str() == std::string(MaxArray,MaxArray+32) has failed
    test/uint256_tests.cpp:204: error: in "uint256_tests/methods": check MaxL == TmpL has failed
    test/uint256_tests.cpp:237: error: in "uint256_tests/methods": check ss.str() == std::string(R1Array,R1Array+20) has failed
    test/uint256_tests.cpp:242: error: in "uint256_tests/methods": check ss.str() == std::string(ZeroArray,ZeroArray+20) has failed
    test/uint256_tests.cpp:244: error: in "uint256_tests/methods": check ZeroS == TmpS has failed
    test/uint256_tests.cpp:247: error: in "uint256_tests/methods": check ss.str() == std::string(MaxArray,MaxArray+20) has failed
    test/uint256_tests.cpp:249: error: in "uint256_tests/methods": check MaxS == TmpS has failed
    test/util_tests.cpp:466: error: in "util_tests/test_ParseDouble": check !ParseDouble("-1e10000", __null) has failed
    test/util_tests.cpp:467: error: in "util_tests/test_ParseDouble": check !ParseDouble("1e10000", __null) has failed
    
    *** 11 failures are detected in the test module "Bitcoin Test Suite"
    

    And the same binary, but with a hijacked libc++/libc++abi:

    corys-MacBook-Pro:bin cory$ DYLD_LIBRARY_PATH=`pwd` ./test_bitcoin 
    Running 212 test cases...
    
    *** No errors detected
    

    bitcoin-qt works fine that way too.

    So... I don't see any good solution here. 0.13.0 must be broken as well, so it wouldn't be a regression to release without 10.7 support. The only viable option would be to package a known-good libc++/libc++abi in the dmg, which is commonly done, but has a number of implications for us this late in the release cycle (namely signing related).

  16. jonasschnelli commented at 6:21 AM on October 25, 2016: contributor

    I'm fine with bumping to 10.8 as min OSX version (4 major versions, we are at OSX 10.12). We should just make sure, you can't start it on OSX10.7. I think there is some plist magic available... will have a look.

  17. jonasschnelli commented at 6:22 AM on October 25, 2016: contributor

    I guess...

     <key>LSEnvironment</key>
     <dict>
         <key>MinimumSystemVersion</key>
         <string>10.8</string>
     </dict>
    

    ... should work (along some doc upgrades).

  18. theuni commented at 6:28 AM on October 25, 2016: member

    Works for me.

  19. theuni referenced this in commit 339c4b6c3a on Oct 25, 2016
  20. laanwj referenced this in commit a32d7c23fc on Oct 26, 2016
  21. btcdrak commented at 9:10 AM on October 26, 2016: contributor

    can this be closed now?

  22. fanquake commented at 9:16 AM on October 26, 2016: member

    @btcdrak not quite. Needs a mention in the release notes, as well as some minor doc updates, such as here.

  23. fanquake commented at 6:12 AM on October 27, 2016: member

    Closed via #9022

  24. fanquake closed this on Oct 27, 2016

  25. jtimon referenced this in commit 5d6c087c95 on Feb 2, 2017
  26. lateminer referenced this in commit afd2d62d42 on Nov 9, 2018
  27. DrahtBot locked this on Sep 8, 2021

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-04-17 09:15 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me