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:
Ranjit Mathew 2006-06-29 14:57:39 +00:00
parent 6150b60261
commit 3379268423
9 changed files with 209 additions and 58 deletions
libjava/include

View file

@ -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__ */