[PATCH][cxxabi] ARM EHABI zero-cost exception handling for libc++abi

Jonathan Roelofs jonathan at codesourcery.com
Wed Apr 16 10:05:41 PDT 2014


I've been building it for bare-metal ARM using clang (with patches that haven't 
been upstreamed yet), but the process should be similar for an arm-linux-gnu 
target, assuming you want to make a static library out of it:

Compile all the *.cpp files with:
clang++ -target $TRIPLE --sysroot=/path/to/your/targets/sysroot -funwind-tables 
-std=c++11 -stdlib=libc++ -fstrict-aliasing -Wstrict-aliasing=2 
-Wsign-conversion -Wshadow -Wconversion -Wunused-variable 
-Wmissing-field-initializers -Wchar-subscripts -Wmismatched-tags 
-Wmissing-braces -Wshorten-64-to-32 -Wsign-compare -Wstrict-aliasing=2 
-Wstrict-overflow=4 -Wunused-parameter -Wnewline-eof

And similarly, all the *.c files with:
clang -target $TRIPLE --sysroot=/path/to/your/targets/sysroot -funwind-tables 
-std=c11 -fstrict-aliasing -Wstrict-aliasing=2 -Wsign-conversion -Wshadow 
-Wconversion -Wunused-variable -Wmissing-field-initializers -Wchar-subscripts 
-Wmismatched-tags -Wmissing-braces -Wshorten-64-to-32 -Wsign-compare 
-Wstrict-aliasing=2 -Wstrict-overflow=4 -Wunused-parameter -Wnewline-eof

On bare-metal, I also build the unwinder's *.c,*.cpp, and *.S files, but on 
linux you'll want to skip that step.

Finally, archive all the *.o files into a static libarary with ar, and ranlib. 
At link time, you'll need to pull in -lgcc_s (which is for the unwinder).

I can share my modifications to the buildit & testit scripts if you think they 
would be useful to you.

As for __USING_SJLJ_EXCEPTIONS__, I checked and it is indeed a compiler builtin 
for both clang and gcc. __ARM_EABI_UNWINDER__ does not seem to be, and I don't 
see anything nearby to where I found the SJLJ one that would indicate what we 
want.  I think the right thing to check for here is:
   #if __arm__ && !defined(__USING_SJLJ_EXCEPTIONS__)


On 4/16/14, 5:11 AM, Logan Chien wrote:
> Hi all,
> Sorry for the typo.
> I was trying to build and test libc++abi from [1] but failed.  I have tried to
> build the library by compiling all the *.cpp and *.c, but it seems not working.
> May you provide some instructions to build it?
> BTW, I agree with Jonathan.  It seems that __ARM_EABI_UNWINDER__ is not
> pre-defined.
> I am not sure for __USING_SJLJ_EXCEPTIONS__ at the moment.  I will check out ASAP.
> Logan
> [1]:
> https://github.com/awong-dev/ndk/tree/use-libc%2B%2Babi/sources/cxx-stl/llvm-libc%2B%2Babi/libcxxabi
> [2] http://www.sourceware.org/ml/libc-alpha/2004-02/msg00138.html
> On Wed, Apr 16, 2014 at 7:58 PM, Logan Chien <tzuhsiang.chien at gmail.com
> <mailto:tzuhsiang.chien at gmail.com>> wrote:
>     Hi Jonathan and Nick,
>     I was trying to build libc++abi from repository but failed.  May you provide
>     some instruction to cross compile libc++abi for ARM Linux?  Thanks.
>     Logan
>     On Tue, Apr 15, 2014 at 5:23 AM, Jonathan Roelofs <jonathan at codesourcery.com
>     <mailto:jonathan at codesourcery.com>> wrote:

Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded

More information about the cfe-commits mailing list