[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dotgnu-pnet-commits] libjit ChangeLog configure.in jit/jit-walk.c to...
From: |
Aleksey Demakov |
Subject: |
[dotgnu-pnet-commits] libjit ChangeLog configure.in jit/jit-walk.c to... |
Date: |
Sun, 24 Sep 2006 20:36:52 +0000 |
CVSROOT: /sources/dotgnu-pnet
Module name: libjit
Changes by: Aleksey Demakov <avd> 06/09/24 20:36:52
Modified files:
. : ChangeLog configure.in
jit : jit-walk.c
tools : gen-apply.c
include/jit : Makefile.am jit-walk.h
Log message:
resolve stack-walking problem with gcc 4.1 and introduce jit-arch-*.h
headers that may contain architecture dependent code.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libjit/ChangeLog?cvsroot=dotgnu-pnet&r1=1.270&r2=1.271
http://cvs.savannah.gnu.org/viewcvs/libjit/configure.in?cvsroot=dotgnu-pnet&r1=1.24&r2=1.25
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-walk.c?cvsroot=dotgnu-pnet&r1=1.1.1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/libjit/tools/gen-apply.c?cvsroot=dotgnu-pnet&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/libjit/include/jit/Makefile.am?cvsroot=dotgnu-pnet&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/libjit/include/jit/jit-walk.h?cvsroot=dotgnu-pnet&r1=1.1.1.1&r2=1.2
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/ChangeLog,v
retrieving revision 1.270
retrieving revision 1.271
diff -u -b -r1.270 -r1.271
--- ChangeLog 15 Sep 2006 16:17:20 -0000 1.270
+++ ChangeLog 24 Sep 2006 20:36:51 -0000 1.271
@@ -1,3 +1,21 @@
+2006-09-25 Aleksey Demakov <address@hidden>
+
+ * include/jit/jit-arch-x86.h, include/jit/jit-arch-generic.h: add
+ headers for architecture-specific definitions.
+ (_JIT_ARCH_GET_CURRENT_FRAME): add macro to find the stack frame
+ pointer.
+
+ * include/jit/Makefile.am: create jit-arch.h as a symlink to one of
+ the jit-arch-*.h files depending on the JIT_ARCH value.
+ * configure.in: set JIT_ARCH according to the system architecture.
+
+ * include/jit/jit-walk.h (jit_get_current_frame):
+ * jit/jit-walk.c (jit_get_starting_frame):
+ * tools/gen-apply.c (find_return_offset, detect_frame_offsets): use
+ _JIT_ARCH_GET_CURRENT_FRAME macro if available. This resolves the
+ problem with gcc 4.1.* where __builtin_frame_address() function is
+ broken (thanks Klaus for identifing the problem).
+
2006-09-15 Radek Polak <address@hidden>
* include/jit/jit-insn.h, jit/jit-insn.c, jit/jit-debugger.c: new
Index: configure.in
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/configure.in,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -b -r1.24 -r1.25
--- configure.in 14 Sep 2006 15:13:57 -0000 1.24
+++ configure.in 24 Sep 2006 20:36:51 -0000 1.25
@@ -12,6 +12,19 @@
AC_SUBST(LIBJIT_VERSION)
LIBJIT_VERSION=0:0:0
+dnl Determine the architecture.
+AC_MSG_CHECKING([architecture])
+AC_SUBST(JIT_ARCH)
+case "$host" in
+ i[[3456789]]86-*-*)
+ JIT_ARCH=x86
+ ;;
+ *)
+ JIT_ARCH=generic
+ ;;
+esac
+AC_MSG_RESULT($JIT_ARCH)
+
dnl Turn off the cygwin library if building for Win32.
dnl Note: We have to include <stdlib.h> if we will be using "__int64"
dnl because otherwise the mingw32 compiler won't define it correctly.
Index: jit/jit-walk.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-walk.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -b -r1.1.1.1 -r1.2
--- jit/jit-walk.c 30 Apr 2004 23:30:34 -0000 1.1.1.1
+++ jit/jit-walk.c 24 Sep 2006 20:36:51 -0000 1.2
@@ -72,8 +72,21 @@
* Fetch the starting frame address if the caller did not supply it
* (probably because the caller wasn't compiled with gcc). The address
* that we want is actually one frame out from where we are at the moment.
+ *
+ * Note: some gcc vestions have broken __builtin_frame_address() so use
+ * _JIT_ARCH_GET_CURRENT_FRAME() if available.
*/
#if defined(__GNUC__)
+#if defined(_JIT_ARCH_GET_CURRENT_FRAME)
+#define jit_get_starting_frame() \
+ do { \
+ _JIT_ARCH_GET_CURRENT_FRAME(start); \
+ if(start) \
+ { \
+ start = jit_next_frame_pointer(start); \
+ } \
+ } while (0)
+#else
#define jit_get_starting_frame() \
do { \
start = __builtin_frame_address(0); \
@@ -82,6 +95,7 @@
start = jit_next_frame_pointer(start); \
} \
} while (0)
+#endif
#elif defined(_MSC_VER) && defined(_M_IX86)
#define jit_get_starting_frame() \
__asm \
Index: tools/gen-apply.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/tools/gen-apply.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- tools/gen-apply.c 13 Dec 2005 16:43:52 -0000 1.14
+++ tools/gen-apply.c 24 Sep 2006 20:36:52 -0000 1.15
@@ -18,6 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <jit/jit-arch.h>
#include <jit/jit-defs.h>
#define JIT_MEMCPY "mem_copy"
#include "jit-apply-func.h"
@@ -1329,7 +1330,13 @@
}
void find_frame_offset_outer(void *looking_for)
{
- find_frame_offset_inner(looking_for, (void
**)__builtin_frame_address(0));
+ void *frame_address;
+#if defined(_JIT_ARCH_GET_CURRENT_FRAME)
+ _JIT_ARCH_GET_CURRENT_FRAME(frame_address);
+#else
+ frame_address = __builtin_frame_address(0);
+#endif
+ find_frame_offset_inner(looking_for, (void **)frame_address);
}
void find_return_offset(void *looking_for, void **frame)
{
@@ -1357,8 +1364,13 @@
}
void detect_frame_offsets(void)
{
- void *frame_address = __builtin_frame_address(0);
- void *return_address = __builtin_return_address(0);
+ void *frame_address, *return_address;
+#if defined(_JIT_ARCH_GET_CURRENT_FRAME)
+ _JIT_ARCH_GET_CURRENT_FRAME(frame_address);
+#else
+ frame_address = __builtin_frame_address(0);
+#endif
+ return_address = __builtin_return_address(0);
find_frame_offset_outer(frame_address);
find_return_offset(return_address, frame_address);
if(parent_frame_offset == 0 && return_address_offset == 0)
Index: include/jit/Makefile.am
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/include/jit/Makefile.am,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- include/jit/Makefile.am 6 Oct 2004 05:43:15 -0000 1.4
+++ include/jit/Makefile.am 24 Sep 2006 20:36:52 -0000 1.5
@@ -1,6 +1,8 @@
+ARCH_HEADER = address@hidden@.h
libjitincludedir = $(includedir)/jit
libjitinclude_HEADERS = jit.h \
+ jit-arch.h \
jit-apply.h \
jit-block.h \
jit-common.h \
@@ -25,4 +27,10 @@
jit-value.h \
jit-walk.h
-DISTCLEANFILES = jit-defs.h
+noinst_HEADERS = jit-arch-generic.h jit-arch-x86.h
+
+DISTCLEANFILES = jit-arch.h jit-defs.h
+
+jit-arch.h: $(ARCH_HEADER)
+ rm -f $@
+ $(LN_S) $(srcdir)/$(ARCH_HEADER) $@
Index: include/jit/jit-walk.h
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/include/jit/jit-walk.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -b -r1.1.1.1 -r1.2
--- include/jit/jit-walk.h 30 Apr 2004 23:29:54 -0000 1.1.1.1
+++ include/jit/jit-walk.h 24 Sep 2006 20:36:52 -0000 1.2
@@ -21,6 +21,8 @@
#ifndef _JIT_WALK_H
#define _JIT_WALK_H
+#include <jit/jit-arch.h>
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -32,7 +34,7 @@
void *_jit_get_frame_address(void *start, unsigned int n);
#if defined(__GNUC__)
#define jit_get_frame_address(n) \
- (_jit_get_frame_address(__builtin_frame_address(0), (n)))
+ (_jit_get_frame_address(jit_get_current_frame(), (n)))
#else
#define jit_get_frame_address(n) (_jit_get_frame_address(0, (n)))
#endif
@@ -40,9 +42,21 @@
/*
* Get the frame address for the current frame. May be more efficient
* than using "jit_get_frame_address(0)".
+ *
+ * Note: some gcc vestions have broken __builtin_frame_address() so use
+ * _JIT_ARCH_GET_CURRENT_FRAME() if available.
*/
#if defined(__GNUC__)
+#if defined(_JIT_ARCH_GET_CURRENT_FRAME)
+#define jit_get_current_frame() \
+ ({ \
+ void *address; \
+ _JIT_ARCH_GET_CURRENT_FRAME(address); \
+ address; \
+ })
+#else
#define jit_get_current_frame() (__builtin_frame_address(0))
+#endif
#else
#define jit_get_current_frame() (jit_get_frame_address(0))
#endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] libjit ChangeLog configure.in jit/jit-walk.c to...,
Aleksey Demakov <=