link unwind into mzscheme, though it's not used, yet (another step toward x86_64 backtraces)
svn: r12620
This commit is contained in:
parent
961d459a7d
commit
84f52ab704
|
@ -1348,7 +1348,7 @@ FOREIGN_USED_OBJSLIB = $(FOREIGN_OBJSLIB)
|
||||||
FOREIGN_NOT_USED_LIB =
|
FOREIGN_NOT_USED_LIB =
|
||||||
FOREIGN_NOT_USED_OBJSLIB =
|
FOREIGN_NOT_USED_OBJSLIB =
|
||||||
|
|
||||||
EXTRA_MZ_OBJS = ../../mzscheme/src/gmp.@LTO@ $(@FOREIGN_IF_USED@_OBJSLIB)
|
EXTRA_MZ_OBJS = ../../mzscheme/src/gmp.@LTO@ ../../mzscheme/src/unwind.@LTO@ $(@FOREIGN_IF_USED@_OBJSLIB)
|
||||||
|
|
||||||
LIBMREDLIBS_a =
|
LIBMREDLIBS_a =
|
||||||
LIBMREDLIBS_la = $(LDFLAGS) $(LDLIBS) $(@WXVARIANT@_LIBS)
|
LIBMREDLIBS_la = $(LDFLAGS) $(LDLIBS) $(@WXVARIANT@_LIBS)
|
||||||
|
|
|
@ -351,8 +351,8 @@ FOREIGN_USED_OBJSLIB = $(FOREIGN_OBJSLIB)
|
||||||
FOREIGN_NOT_USED_LIB =
|
FOREIGN_NOT_USED_LIB =
|
||||||
FOREIGN_NOT_USED_OBJSLIB =
|
FOREIGN_NOT_USED_OBJSLIB =
|
||||||
|
|
||||||
EXTRA_OBJS_T = ../src/gmp.@LTO@ $(@FOREIGN_IF_USED@_LIB)
|
EXTRA_OBJS_T = ../src/gmp.@LTO@ ../src/unwind.@LTO@ $(@FOREIGN_IF_USED@_LIB)
|
||||||
EXTRA_OBJS_L = ../src/gmp.@LTO@ $(@FOREIGN_IF_USED@_OBJSLIB)
|
EXTRA_OBJS_L = ../src/gmp.@LTO@ ../src/unwind.@LTO@ $(@FOREIGN_IF_USED@_OBJSLIB)
|
||||||
|
|
||||||
../libmzscheme3m.@LIBSFX@: $(OBJS) $(EXTRA_OBJS_T) jit.@LTO@ gc2.@LTO@
|
../libmzscheme3m.@LIBSFX@: $(OBJS) $(EXTRA_OBJS_T) jit.@LTO@ gc2.@LTO@
|
||||||
$(AR) $(ARFLAGS) ../libmzscheme3m.@LIBSFX@ $(OBJS) $(EXTRA_OBJS_L) jit.@LTO@ gc2.@LTO@
|
$(AR) $(ARFLAGS) ../libmzscheme3m.@LIBSFX@ $(OBJS) $(EXTRA_OBJS_L) jit.@LTO@ gc2.@LTO@
|
||||||
|
|
|
@ -51,6 +51,7 @@ OBJS = salloc.@LTO@ \
|
||||||
syntax.@LTO@ \
|
syntax.@LTO@ \
|
||||||
thread.@LTO@ \
|
thread.@LTO@ \
|
||||||
type.@LTO@ \
|
type.@LTO@ \
|
||||||
|
unwind.@LTO@ \
|
||||||
vector.@LTO@ @EXTRA_GMP_OBJ@
|
vector.@LTO@ @EXTRA_GMP_OBJ@
|
||||||
|
|
||||||
SRCS = $(srcdir)/salloc.c \
|
SRCS = $(srcdir)/salloc.c \
|
||||||
|
@ -92,6 +93,7 @@ SRCS = $(srcdir)/salloc.c \
|
||||||
$(srcdir)/syntax.c \
|
$(srcdir)/syntax.c \
|
||||||
$(srcdir)/thread.c \
|
$(srcdir)/thread.c \
|
||||||
$(srcdir)/type.c \
|
$(srcdir)/type.c \
|
||||||
|
$(srcdir)/unwind/libunwind.c \
|
||||||
$(srcdir)/vector.c
|
$(srcdir)/vector.c
|
||||||
|
|
||||||
wrong:
|
wrong:
|
||||||
|
@ -222,6 +224,8 @@ thread.@LTO@: $(srcdir)/thread.c
|
||||||
$(CC) $(CFLAGS) -c $(srcdir)/thread.c -o thread.@LTO@
|
$(CC) $(CFLAGS) -c $(srcdir)/thread.c -o thread.@LTO@
|
||||||
type.@LTO@: $(srcdir)/type.c
|
type.@LTO@: $(srcdir)/type.c
|
||||||
$(CC) $(CFLAGS) -c $(srcdir)/type.c -o type.@LTO@
|
$(CC) $(CFLAGS) -c $(srcdir)/type.c -o type.@LTO@
|
||||||
|
unwind.@LTO@: $(srcdir)/unwind/libunwind.c $(srcdir)/unwind/libunwind.h $(srcdir)/unwind/libunwind_i.h
|
||||||
|
$(CC) $(CFLAGS) -c $(srcdir)/unwind/libunwind.c -o unwind.@LTO@
|
||||||
vector.@LTO@: $(srcdir)/vector.c
|
vector.@LTO@: $(srcdir)/vector.c
|
||||||
$(CC) $(CFLAGS) -c $(srcdir)/vector.c -o vector.@LTO@
|
$(CC) $(CFLAGS) -c $(srcdir)/vector.c -o vector.@LTO@
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,10 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
|
|
||||||
|
#include "../../sconfig.h"
|
||||||
|
|
||||||
|
#ifdef USE_DWARF_LIBUNWIND
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include "libunwind_i.h"
|
#include "libunwind_i.h"
|
||||||
|
|
||||||
|
@ -2467,3 +2471,5 @@ unw_word_t unw_get_ip(unw_cursor_t *c)
|
||||||
{
|
{
|
||||||
return tdep_get_ip(((struct cursor *)c));
|
return tdep_get_ip(((struct cursor *)c));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -87,6 +87,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
# define unlikely(x) (x)
|
# define unlikely(x) (x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#undef HIDDEN
|
||||||
|
#define HIDDEN static
|
||||||
|
|
||||||
#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
|
#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
|
||||||
|
|
||||||
/* Make it easy to write thread-safe code which may or may not be
|
/* Make it easy to write thread-safe code which may or may not be
|
||||||
|
@ -618,37 +621,37 @@ struct dwarf_rs_cache
|
||||||
#define dwarf_read_encoded_pointer UNW_OBJ (dwarf_read_encoded_pointer)
|
#define dwarf_read_encoded_pointer UNW_OBJ (dwarf_read_encoded_pointer)
|
||||||
#define dwarf_step UNW_OBJ (dwarf_step)
|
#define dwarf_step UNW_OBJ (dwarf_step)
|
||||||
|
|
||||||
extern int dwarf_init (void);
|
HIDDEN int dwarf_init (void);
|
||||||
extern int dwarf_find_proc_info (unw_addr_space_t as, unw_word_t ip,
|
HIDDEN int dwarf_find_proc_info (unw_addr_space_t as, unw_word_t ip,
|
||||||
unw_proc_info_t *pi,
|
unw_proc_info_t *pi,
|
||||||
int need_unwind_info, void *arg);
|
int need_unwind_info, void *arg);
|
||||||
extern int dwarf_search_unwind_table (unw_addr_space_t as,
|
HIDDEN int dwarf_search_unwind_table (unw_addr_space_t as,
|
||||||
unw_word_t ip,
|
unw_word_t ip,
|
||||||
unw_dyn_info_t *di,
|
unw_dyn_info_t *di,
|
||||||
unw_proc_info_t *pi,
|
unw_proc_info_t *pi,
|
||||||
int need_unwind_info, void *arg);
|
int need_unwind_info, void *arg);
|
||||||
extern void dwarf_put_unwind_info (unw_addr_space_t as,
|
HIDDEN void dwarf_put_unwind_info (unw_addr_space_t as,
|
||||||
unw_proc_info_t *pi, void *arg);
|
unw_proc_info_t *pi, void *arg);
|
||||||
extern int dwarf_eval_expr (struct dwarf_cursor *c, unw_word_t *addr,
|
HIDDEN int dwarf_eval_expr (struct dwarf_cursor *c, unw_word_t *addr,
|
||||||
unw_word_t len, unw_word_t *valp,
|
unw_word_t len, unw_word_t *valp,
|
||||||
int *is_register);
|
int *is_register);
|
||||||
extern int dwarf_extract_proc_info_from_fde (unw_addr_space_t as,
|
HIDDEN int dwarf_extract_proc_info_from_fde (unw_addr_space_t as,
|
||||||
unw_accessors_t *a,
|
unw_accessors_t *a,
|
||||||
unw_word_t *fde_addr,
|
unw_word_t *fde_addr,
|
||||||
unw_proc_info_t *pi,
|
unw_proc_info_t *pi,
|
||||||
int need_unwind_info,
|
int need_unwind_info,
|
||||||
void *arg);
|
void *arg);
|
||||||
extern int dwarf_find_save_locs (struct dwarf_cursor *c);
|
HIDDEN int dwarf_find_save_locs (struct dwarf_cursor *c);
|
||||||
extern int dwarf_create_state_record (struct dwarf_cursor *c,
|
HIDDEN int dwarf_create_state_record (struct dwarf_cursor *c,
|
||||||
dwarf_state_record_t *sr);
|
dwarf_state_record_t *sr);
|
||||||
extern int dwarf_make_proc_info (struct dwarf_cursor *c);
|
HIDDEN int dwarf_make_proc_info (struct dwarf_cursor *c);
|
||||||
extern int dwarf_read_encoded_pointer (unw_addr_space_t as,
|
HIDDEN int dwarf_read_encoded_pointer (unw_addr_space_t as,
|
||||||
unw_accessors_t *a,
|
unw_accessors_t *a,
|
||||||
unw_word_t *addr,
|
unw_word_t *addr,
|
||||||
unsigned char encoding,
|
unsigned char encoding,
|
||||||
const unw_proc_info_t *pi,
|
const unw_proc_info_t *pi,
|
||||||
unw_word_t *valp, void *arg);
|
unw_word_t *valp, void *arg);
|
||||||
extern int dwarf_step (struct dwarf_cursor *c);
|
HIDDEN int dwarf_step (struct dwarf_cursor *c);
|
||||||
|
|
||||||
/*XXXXXXXXXXXXXXXXXXXXXXXXX End dwarf.h XXXXXXXXXXXXXXXXXXXXXXXXXX*/
|
/*XXXXXXXXXXXXXXXXXXXXXXXXX End dwarf.h XXXXXXXXXXXXXXXXXXXXXXXXXX*/
|
||||||
|
|
||||||
|
@ -768,7 +771,7 @@ extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg,
|
||||||
|
|
||||||
#define dwarf_to_unw_regnum_map UNW_OBJ (dwarf_to_unw_regnum_map)
|
#define dwarf_to_unw_regnum_map UNW_OBJ (dwarf_to_unw_regnum_map)
|
||||||
|
|
||||||
int dwarf_to_unw_regnum(int reg);
|
HIDDEN int dwarf_to_unw_regnum(int reg);
|
||||||
|
|
||||||
/* In the local-only case, we can let the compiler directly access
|
/* In the local-only case, we can let the compiler directly access
|
||||||
memory and don't need to worry about differing byte-order. */
|
memory and don't need to worry about differing byte-order. */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user