Fix linux build.

* Replace strlcpy with snprintf since strlcpy is not available
  in glibc.

* Replace __LINUX__ with __linux__.

llvm-svn: 211784
This commit is contained in:
Logan Chien 2014-06-26 13:56:23 +00:00
parent 3c81e46b57
commit 37be06a0c6
1 changed files with 10 additions and 8 deletions

View File

@ -32,14 +32,16 @@ namespace libunwind {
#include "Registers.hpp"
#if LIBCXXABI_ARM_EHABI
#if __LINUX__
// Emulate the BSD dl_unwind_find_exidx API when on a GNU libdl system.
typedef long unsigned int *_Unwind_Ptr;
extern "C" _Unwind_Ptr __gnu_Unwind_Find_exidx(_Unwind_Ptr targetAddr, int *length);
_Unwind_Ptr (*dl_unwind_find_exidx)(_Unwind_Ptr targetAddr, int *length) =
__gnu_Unwind_Find_exidx;
#if __linux__
typedef long unsigned int *_Unwind_Ptr;
extern "C" _Unwind_Ptr __gnu_Unwind_Find_exidx(_Unwind_Ptr addr, int *len);
// Emulate the BSD dl_unwind_find_exidx API when on a GNU libdl system.
#define dl_unwind_find_exidx __gnu_Unwind_Find_exidx
#else
#include <link.h>
#include <link.h>
#endif
#endif // LIBCXXABI_ARM_EHABI
@ -353,7 +355,7 @@ inline bool LocalAddressSpace::findFunctionName(pint_t addr, char *buf,
Dl_info dyldInfo;
if (dladdr((void *)addr, &dyldInfo)) {
if (dyldInfo.dli_sname != NULL) {
strlcpy(buf, dyldInfo.dli_sname, bufLen);
snprintf(buf, bufLen, "%s", dyldInfo.dli_sname);
*offset = (addr - (pint_t) dyldInfo.dli_saddr);
return true;
}