1d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 2d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant "http://www.w3.org/TR/html4/strict.dtd"> 3d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ --> 4d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<html> 5d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<head> 6d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 7d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <title>"libc++abi" C++ Standard Library Support</title> 8d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <link type="text/css" rel="stylesheet" href="menu.css"> 9d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <link type="text/css" rel="stylesheet" href="content.css"> 10d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant</head> 11d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 12d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<body> 13d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<div id="menu"> 14d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <div> 15d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <a href="http://llvm.org/">LLVM Home</a> 16d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant </div> 17d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 18d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <div class="submenu"> 19d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <label>libc++abi Info</label> 20d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <a href="/index.html">About</a> 21d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant </div> 22d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 23d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <div class="submenu"> 24d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <label>Quick Links</label> 25d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev</a> 26d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits</a> 27d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <a href="http://llvm.org/bugs/">Bug Reports</a> 28d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <a href="http://llvm.org/svn/llvm-project/libcxxabi/trunk/">Browse SVN</a> 29d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <a href="http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/">Browse ViewVC</a> 30d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant </div> 31d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant</div> 32d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 33d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant<div id="content"> 34d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--*********************************************************************--> 35d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <h1>"libc++abi" C++ Standard Library Support</h1> 36d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--*********************************************************************--> 37d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 38d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <p>libc++abi is a new implementation of low level support for a standard 39d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant C++ library.</p> 40d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 41d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <p>All of the code in libc++abi is <a 42d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant href="http://llvm.org/docs/DeveloperPolicy.html#license">dual licensed</a> 43d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant under the MIT license and the UIUC License (a BSD-like license).</p> 44d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 45d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 46d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <h2 id="goals">Features and Goals</h2> 47d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 48d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 49d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <ul> 50d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <li>Correctness as defined by the C++11 standard.</li> 51f59526da20aa9e8606881a6dc064a3981e91ff37Sylvestre Ledru <li>Provide a portable sublayer to ease the porting of <a href="http://libcxx.llvm.org/">libc++</a></li> 52628bfc461df5d87a8fbf7d10cce7325245fd7d7eHoward Hinnant <li>On Mac OS X, be ABI compatible with the existing low-level support.</li> 53d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant </ul> 54d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 55d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 56d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <h2 id="requirements">Platform Support</h2> 57d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 58d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 59d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <p>libc++abi is known to work on the following platforms, using clang.</p> 60d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 61d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <ul> 62de2b1090d44a81c97ff3f1c21fac6088a1e28465Howard Hinnant <li>Darwin</li> 63d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant </ul> 64d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 65d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 66d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <h2 id="dir-structure">Current Status</h2> 67d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 68d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 69de2b1090d44a81c97ff3f1c21fac6088a1e28465Howard Hinnant <p>libc++abi is complete. <a href="spec.html">Here</a> is a 70de2b1090d44a81c97ff3f1c21fac6088a1e28465Howard Hinnant list of functionality.</p> 71d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 72d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 73d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <h2>Get it and get involved!</h2> 74d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <!--=====================================================================--> 75d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 76d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <p>To check out the code, use:</p> 77d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 78d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <ul> 79d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <li><code>svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi</code></li> 80d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant </ul> 81d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 82d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant <p>Send discussions to the 83d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant (<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">clang mailing list</a>).</p> 84d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 85e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert <!--=====================================================================--> 86e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert <h2>Frequently asked questions</h2> 87e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert <!--=====================================================================--> 88e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert 89e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert <p>Q: Why are the destructors for the standard exception classes defined in libc++abi? 90e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert They're just empty, can't they be defined inline?</p> 91e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert <p>A: The destructors for them live in libc++abi because they are "key" functions. 92e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert The Itanium ABI describes a "key" function as the first virtual declared. 93e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert And wherever the key function is defined, that is where the <code>type_info</code> gets defined. 94e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert And in libc++ types are the same type if and only if they have the same <code>type_info</code> 95e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert (as in there must be only one type info per type in the entire application). 96e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert And on OS X, libstdc++ and libc++ share these exception types. 97e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert So to be able to throw in one dylib and catch in another (a <code>std::exception</code> for example), 98e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert there must be only one <code>std::exception type_info</code> in the entire app. 99e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert That typeinfo gets laid down beside <code>~exception()</code> in libc++abi (for both libstdc++ and libc++).</p> 100e45805f0d3f8dafef1297cc7dc49e610713f023bDan Albert <p>--Howard Hinnant</p> 101d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant 102d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant</div> 103d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant</body> 104d213ffdf3befead3b8f5a0ba12ce1c2d9949525Howard Hinnant</html> 105