Fix undefined symbols in release build of libcoreclr on Linux
authorSergiy Kuryata <sergeyk@microsoft.com>
Sat, 7 Feb 2015 23:16:27 +0000 (15:16 -0800)
committerSergiy Kuryata <sergeyk@microsoft.com>
Sat, 7 Feb 2015 23:16:27 +0000 (15:16 -0800)
commit4d41e8f6f64fcf8056ed7a7e18fa8a49f2f29314
tree1f1ad73b044a8a50564e8785e9a93f95c0a386b3
parent61469b29a796087b9d3ce22b430ff2bd81665d16
Fix undefined symbols in release build of libcoreclr on Linux

When building a release version of libcoreclr.so on Linux the LLVM toolchain makes optimizations that result in undefined symbols in libcoreclr.so which causes dlopen(“libcoreclr.so”) to fail at runtime. There were three problematic functions:

1. CQuickMemoryBase<SIZE, INCREMENT>::ReSizeNoThrow(SIZE_T iItems)
2. FixupDispatcherContext(...)
3. CodeGen::inst_set_SV_var(GenTreePtr tree); - this function is marked as inline and has the entire body under “#ifdef  DEBUG”.

To fix the problem with ReSizeNoThrow I added the “__attribute__((used))” attribute to the declaration of the function. This attribute is enabled for the llvm toolchain only. For the other two functions I have simply removed ‘inline’ since these functions are not performance critical.

[tfs-changeset: 1412107]
src/inc/corhlprpriv.h
src/jit/instr.cpp
src/vm/exceptionhandling.cpp