mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-11 18:01:34 +08:00
re PR libgcj/21692 (unexpected java.lang.NoClassDefFoundError)
PR libgcj/21692 * sysdep/descriptor-n.h: New file. * sysdep/descriptor-y.h: New file. * sysdep/powerpc/descriptor.h: New file. * configure.host: Set $descriptor_h appropriate for the host. * configure.ac: Link it. * configure: Regenerate. * stacktrace.cc: Include sysdep/descriptor.h. (_Jv_StackTrace::UpdateNCodeMap): Use UNWRAP_FUNCTION_DESCRIPTOR. From-SVN: r100173
This commit is contained in:
parent
2f828272d8
commit
eb2925b676
@ -1,3 +1,15 @@
|
||||
2005-05-25 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR libgcj/21692
|
||||
* sysdep/descriptor-n.h: New file.
|
||||
* sysdep/descriptor-y.h: New file.
|
||||
* sysdep/powerpc/descriptor.h: New file.
|
||||
* configure.host: Set $descriptor_h appropriate for the host.
|
||||
* configure.ac: Link it.
|
||||
* configure: Regenerate.
|
||||
* stacktrace.cc: Include sysdep/descriptor.h.
|
||||
(_Jv_StackTrace::UpdateNCodeMap): Use UNWRAP_FUNCTION_DESCRIPTOR.
|
||||
|
||||
2005-05-25 Chris Burdess <dog@gnu.org>
|
||||
|
||||
* gnu/xml/dom/ls/SAXEventSink.java: Ignore XML entities in start/
|
||||
|
3
libjava/configure
vendored
3
libjava/configure
vendored
@ -8511,6 +8511,8 @@ if test -d sysdep; then true; else mkdir sysdep; fi
|
||||
|
||||
ac_config_links="$ac_config_links sysdep/backtrace.h:$fallback_backtrace_h"
|
||||
|
||||
ac_config_links="$ac_config_links sysdep/descriptor.h:$descriptor_h"
|
||||
|
||||
|
||||
HASH_SYNC_SPEC=
|
||||
# Hash synchronization is only useful with posix threads right now.
|
||||
@ -16892,6 +16894,7 @@ do
|
||||
"include/java-threads.h" ) CONFIG_LINKS="$CONFIG_LINKS include/java-threads.h:include/$THREADH" ;;
|
||||
"sysdep/locks.h" ) CONFIG_LINKS="$CONFIG_LINKS sysdep/locks.h:sysdep/$sysdeps_dir/locks.h" ;;
|
||||
"sysdep/backtrace.h" ) CONFIG_LINKS="$CONFIG_LINKS sysdep/backtrace.h:$fallback_backtrace_h" ;;
|
||||
"sysdep/descriptor.h" ) CONFIG_LINKS="$CONFIG_LINKS sysdep/descriptor.h:$descriptor_h" ;;
|
||||
"include/java-signal.h" ) CONFIG_LINKS="$CONFIG_LINKS include/java-signal.h:$SIGNAL_HANDLER" ;;
|
||||
"include/java-signal-aux.h" ) CONFIG_LINKS="$CONFIG_LINKS include/java-signal-aux.h:$SIGNAL_HANDLER_AUX" ;;
|
||||
"depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
|
||||
|
@ -707,6 +707,7 @@ AM_CONDITIONAL(USING_NO_THREADS, test "$THREADS" = none)
|
||||
if test -d sysdep; then true; else mkdir sysdep; fi
|
||||
AC_CONFIG_LINKS(sysdep/locks.h:sysdep/$sysdeps_dir/locks.h)
|
||||
AC_CONFIG_LINKS(sysdep/backtrace.h:$fallback_backtrace_h)
|
||||
AC_CONFIG_LINKS(sysdep/descriptor.h:$descriptor_h)
|
||||
|
||||
HASH_SYNC_SPEC=
|
||||
# Hash synchronization is only useful with posix threads right now.
|
||||
|
@ -32,6 +32,7 @@
|
||||
# (i.e it is broken).
|
||||
# fallback_backtrace_h Header to use for fallback backtrace implementation
|
||||
# (only for targets that don't support DWARF2 unwind)
|
||||
# descriptor_h Header to use for looking past function descriptors
|
||||
|
||||
libgcj_flags=
|
||||
libgcj_cflags=
|
||||
@ -268,6 +269,19 @@ case "${host}" in
|
||||
;;
|
||||
esac
|
||||
|
||||
case "${host}" in
|
||||
ia64-* | hppa*-*)
|
||||
descriptor_h=sysdep/descriptor-y.h
|
||||
;;
|
||||
|
||||
rs6000-* | powerpc*-*)
|
||||
descriptor_h=sysdep/powerpc/descriptor.h
|
||||
;;
|
||||
|
||||
*)
|
||||
descriptor_h=sysdep/descriptor-n.h
|
||||
;;
|
||||
esac
|
||||
|
||||
libgcj_cflags="${libgcj_cflags} ${libgcj_flags}"
|
||||
libgcj_cxxflags="${libgcj_cxxflags} ${libgcj_flags}"
|
||||
|
@ -29,6 +29,7 @@ details. */
|
||||
#include <gnu/gcj/runtime/NameFinder.h>
|
||||
|
||||
#include <sysdep/backtrace.h>
|
||||
#include <sysdep/descriptor.h>
|
||||
|
||||
using namespace java::lang;
|
||||
using namespace java::lang::reflect;
|
||||
@ -62,12 +63,12 @@ _Jv_StackTrace::UpdateNCodeMap ()
|
||||
for (int i=0; i < klass->method_count; i++)
|
||||
{
|
||||
_Jv_Method *method = &klass->methods[i];
|
||||
void *ncode = method->ncode;
|
||||
// Add non-abstract methods to ncodeMap.
|
||||
if (method->ncode)
|
||||
if (ncode)
|
||||
{
|
||||
//printf("map->put 0x%x / %s.%s\n", method->ncode, klass->name->data,
|
||||
// method->name->data);
|
||||
ncodeMap->put ((java::lang::Object *) method->ncode, klass);
|
||||
ncode = UNWRAP_FUNCTION_DESCRIPTOR (ncode);
|
||||
ncodeMap->put ((java::lang::Object *)ncode, klass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
3
libjava/sysdep/descriptor-n.h
Normal file
3
libjava/sysdep/descriptor-n.h
Normal file
@ -0,0 +1,3 @@
|
||||
// Given a function pointer, return the code address.
|
||||
|
||||
#define UNWRAP_FUNCTION_DESCRIPTOR(X) (X)
|
5
libjava/sysdep/descriptor-y.h
Normal file
5
libjava/sysdep/descriptor-y.h
Normal file
@ -0,0 +1,5 @@
|
||||
// Given a function pointer, return the code address.
|
||||
|
||||
// The function descriptor is actually multiple words,
|
||||
// but we don't care about anything except the first.
|
||||
#define UNWRAP_FUNCTION_DESCRIPTOR(X) (*(void **)(X))
|
9
libjava/sysdep/powerpc/descriptor.h
Normal file
9
libjava/sysdep/powerpc/descriptor.h
Normal file
@ -0,0 +1,9 @@
|
||||
// Given a function pointer, return the code address.
|
||||
|
||||
#ifdef _CALL_AIX
|
||||
// The function descriptor is actually multiple words,
|
||||
// but we don't care about anything except the first.
|
||||
# define UNWRAP_FUNCTION_DESCRIPTOR(X) (*(void **)(X))
|
||||
#else
|
||||
# define UNWRAP_FUNCTION_DESCRIPTOR(X) (X)
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user