javaprims.h (_Jv_uintptr_t): New typedef similar to uintptr_t in C99.
* gcj/javaprims.h (_Jv_uintptr_t): New typedef similar to uintptr_t in C99. * include/java-stack.h: Include stdlib.h. (_Jv_AddrInfo): New structure to hold address information. * include/posix.h (_Jv_platform_dladdr): Declare. * include/win32.h (_Jv_platform_dladdr): Declare. (backtrace): Remove declaration. * posix.cc: Include dlfcn.h if available. Include java-stack.h. (_Jv_platform_dladdr): Define. * win32.cc: Include string.h. Include java-stack.h. (backtrace): Remove. (_Jv_platform_dladdr): Define. * sysdep/i386/backtrace.h (fallback_backtrace): Check that a potential frame pointer value is 32-bit word-aligned. Use operand of the CALL instruction calling the current function to find its starting address. * stacktrace.cc: Do not include dlfcn.h. Include platform.h. (_Jv_StackTrace::getLineNumberForFrame): Use _Jv_platform_dladdr() instead of dladdr(). (_Jv_StackTrace::GetStackTraceElements): Use nCodeMap even for Windows. (_Jv_StackTrace::GetClassContext): Use fallback_backtrace() for targets with SJLJ exceptions instead of using _Unwind_Backtrace(). (_Jv_StackTrace::GetFirstNonSystemClassLoader): Likewise. From-SVN: r115069
This commit is contained in:
parent
6150b60261
commit
3379268423
9 changed files with 209 additions and 58 deletions
libjava/include
|
@ -1,6 +1,6 @@
|
|||
// java-stack.h - Definitions for unwinding & inspecting the call stack.
|
||||
|
||||
/* Copyright (C) 2005 Free Software Foundation
|
||||
/* Copyright (C) 2005, 2006 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
|
@ -11,6 +11,7 @@ details. */
|
|||
#ifndef __JV_STACKTRACE_H__
|
||||
#define __JV_STACKTRACE_H__
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <unwind.h>
|
||||
|
||||
#include <gcj/cni.h>
|
||||
|
@ -126,5 +127,35 @@ public:
|
|||
|
||||
};
|
||||
|
||||
// Information about a given address.
|
||||
struct _Jv_AddrInfo
|
||||
{
|
||||
// File name of the defining module.
|
||||
const char *file_name;
|
||||
|
||||
// Base address of the loaded module.
|
||||
void *base;
|
||||
|
||||
// Name of the nearest symbol.
|
||||
const char *sym_name;
|
||||
|
||||
// Address of the nearest symbol.
|
||||
void *sym_addr;
|
||||
|
||||
~_Jv_AddrInfo (void)
|
||||
{
|
||||
// On systems with a real dladdr(), the file and symbol names given by
|
||||
// _Jv_platform_dladdr() are not dynamically allocated. On Windows,
|
||||
// they are.
|
||||
|
||||
#ifdef WIN32
|
||||
if (file_name)
|
||||
free ((void *)file_name);
|
||||
|
||||
if (sym_name)
|
||||
free ((void *)sym_name);
|
||||
#endif /* WIN32 */
|
||||
}
|
||||
};
|
||||
|
||||
#endif /* __JV_STACKTRACE_H__ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue