зеркало из https://github.com/github/ruby.git
Remove IA64 support.
This commit is contained in:
Родитель
40f8c82b96
Коммит
d17344cfc5
|
@ -917,8 +917,6 @@ strlcat.$(OBJEXT): {$(VPATH)}strlcat.c
|
|||
strlcpy.$(OBJEXT): {$(VPATH)}strlcpy.c
|
||||
strstr.$(OBJEXT): {$(VPATH)}strstr.c
|
||||
nt.$(OBJEXT): {$(VPATH)}nt.c
|
||||
ia64.$(OBJEXT): {$(VPATH)}ia64.s
|
||||
$(CC) $(CFLAGS) -c $<
|
||||
.coroutine_obj $(COROUTINE_OBJ): \
|
||||
{$(VPATH)}$(COROUTINE_H:.h=).$(ASMEXT) \
|
||||
$(COROUTINE_H:/Context.h=/.time)
|
||||
|
|
33
configure.ac
33
configure.ac
|
@ -1687,24 +1687,6 @@ AS_IF([test "x$ALLOCA" = "x"], [
|
|||
])
|
||||
AC_FUNC_MEMCMP
|
||||
|
||||
# http://sources.redhat.com/ml/libc-hacker/2005-08/msg00008.html
|
||||
# Debian GNU/Linux Etch's libc6.1 2.3.6.ds1-13etch5 has this problem.
|
||||
# Debian GNU/Linux Lenny's libc6.1 2.7-10 has no problem.
|
||||
AC_CACHE_CHECK(for broken erfc of glibc-2.3.6 on IA64, rb_cv_broken_glibc_ia64_erfc,
|
||||
[AC_TRY_RUN([
|
||||
#include <math.h>
|
||||
int
|
||||
main()
|
||||
{
|
||||
erfc(10000.0);
|
||||
return 0;
|
||||
}
|
||||
],
|
||||
rb_cv_broken_glibc_ia64_erfc=no,
|
||||
rb_cv_broken_glibc_ia64_erfc=yes,
|
||||
rb_cv_broken_glibc_ia64_erfc=no)])
|
||||
AS_CASE([$rb_cv_broken_glibc_ia64_erfc],[yes],[ac_cv_func_erf=no])
|
||||
|
||||
AS_CASE(["$target_os"],[freebsd*],[
|
||||
AC_DEFINE(BROKEN_CLOSE)
|
||||
AC_REPLACE_FUNCS(close)
|
||||
|
@ -2217,21 +2199,6 @@ AS_IF([test x"$ac_cv_func_dirfd" = xno], [
|
|||
])])
|
||||
])
|
||||
|
||||
AS_IF([test x"$target_cpu" = xia64], [
|
||||
AC_LIBOBJ([ia64])
|
||||
AC_CACHE_CHECK(for __libc_ia64_register_backing_store_base,
|
||||
rb_cv___libc_ia64_register_backing_store_base,
|
||||
[rb_cv___libc_ia64_register_backing_store_base=no
|
||||
AC_TRY_LINK(
|
||||
[extern unsigned long __libc_ia64_register_backing_store_base;],
|
||||
[unsigned long p = __libc_ia64_register_backing_store_base;
|
||||
printf("%ld\n", p);],
|
||||
[rb_cv___libc_ia64_register_backing_store_base=yes])])
|
||||
AS_IF([test $rb_cv___libc_ia64_register_backing_store_base = yes], [
|
||||
AC_DEFINE(HAVE___LIBC_IA64_REGISTER_BACKING_STORE_BASE)
|
||||
])
|
||||
])
|
||||
|
||||
AC_CACHE_CHECK(whether right shift preserve sign bit, rb_cv_rshift_sign,
|
||||
[AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([], [(-1==(-1>>1))])],
|
||||
rb_cv_rshift_sign=yes,
|
||||
|
|
93
cont.c
93
cont.c
|
@ -61,10 +61,6 @@
|
|||
/* On Solaris because resuming any Fiber caused SEGV, for some reason.
|
||||
*/
|
||||
# define FIBER_USE_NATIVE 0
|
||||
# elif defined(__ia64)
|
||||
/* At least, Linux/ia64's getcontext(3) doesn't save register window.
|
||||
*/
|
||||
# define FIBER_USE_NATIVE 0
|
||||
# elif defined(__GNU__)
|
||||
/* GNU/Hurd doesn't fully support getcontext, setcontext, makecontext
|
||||
* and swapcontext functions. Disabling their usage till support is
|
||||
|
@ -121,11 +117,6 @@ typedef struct rb_context_struct {
|
|||
VALUE *stack;
|
||||
VALUE *stack_src;
|
||||
size_t stack_size;
|
||||
#ifdef __ia64
|
||||
VALUE *register_stack;
|
||||
VALUE *register_stack_src;
|
||||
int register_stack_size;
|
||||
#endif
|
||||
} machine;
|
||||
rb_execution_context_t saved_ec;
|
||||
int free_vm_stack;
|
||||
|
@ -386,12 +377,6 @@ cont_mark(void *ptr)
|
|||
}
|
||||
}
|
||||
}
|
||||
#ifdef __ia64
|
||||
if (cont->machine.register_stack) {
|
||||
rb_gc_mark_locations(cont->machine.register_stack,
|
||||
cont->machine.register_stack + cont->machine.register_stack_size);
|
||||
}
|
||||
#endif
|
||||
|
||||
RUBY_MARK_LEAVE("cont");
|
||||
}
|
||||
|
@ -452,9 +437,6 @@ cont_free(void *ptr)
|
|||
#else /* not FIBER_USE_NATIVE */
|
||||
ruby_xfree(cont->ensure_array);
|
||||
RUBY_FREE_UNLESS_NULL(cont->machine.stack);
|
||||
#endif
|
||||
#ifdef __ia64
|
||||
RUBY_FREE_UNLESS_NULL(cont->machine.register_stack);
|
||||
#endif
|
||||
RUBY_FREE_UNLESS_NULL(cont->saved_vm_stack.ptr);
|
||||
|
||||
|
@ -485,11 +467,7 @@ cont_memsize(const void *ptr)
|
|||
if (cont->machine.stack) {
|
||||
size += cont->machine.stack_size * sizeof(*cont->machine.stack);
|
||||
}
|
||||
#ifdef __ia64
|
||||
if (cont->machine.register_stack) {
|
||||
size += cont->machine.register_stack_size * sizeof(*cont->machine.register_stack);
|
||||
}
|
||||
#endif
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
@ -598,9 +576,6 @@ cont_save_machine_stack(rb_thread_t *th, rb_context_t *cont)
|
|||
size_t size;
|
||||
|
||||
SET_MACHINE_STACK_END(&th->ec->machine.stack_end);
|
||||
#ifdef __ia64
|
||||
th->ec->machine.register_stack_end = rb_ia64_bsp();
|
||||
#endif
|
||||
|
||||
if (th->ec->machine.stack_start > th->ec->machine.stack_end) {
|
||||
size = cont->machine.stack_size = th->ec->machine.stack_start - th->ec->machine.stack_end;
|
||||
|
@ -620,20 +595,6 @@ cont_save_machine_stack(rb_thread_t *th, rb_context_t *cont)
|
|||
|
||||
FLUSH_REGISTER_WINDOWS;
|
||||
MEMCPY(cont->machine.stack, cont->machine.stack_src, VALUE, size);
|
||||
|
||||
#ifdef __ia64
|
||||
rb_ia64_flushrs();
|
||||
size = cont->machine.register_stack_size = th->ec->machine.register_stack_end - th->ec->machine.register_stack_start;
|
||||
cont->machine.register_stack_src = th->ec->machine.register_stack_start;
|
||||
if (cont->machine.register_stack) {
|
||||
REALLOC_N(cont->machine.register_stack, VALUE, size);
|
||||
}
|
||||
else {
|
||||
cont->machine.register_stack = ALLOC_N(VALUE, size);
|
||||
}
|
||||
|
||||
MEMCPY(cont->machine.register_stack, cont->machine.register_stack_src, VALUE, size);
|
||||
#endif
|
||||
}
|
||||
|
||||
static const rb_data_type_t cont_data_type = {
|
||||
|
@ -655,10 +616,6 @@ cont_save_thread(rb_context_t *cont, rb_thread_t *th)
|
|||
/* saved_ec->machine.stack_end should be NULL */
|
||||
/* because it may happen GC afterward */
|
||||
sec->machine.stack_end = NULL;
|
||||
|
||||
#ifdef __ia64
|
||||
sec->machine.register_stack_end = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -993,9 +950,6 @@ fiber_initialize_machine_stack_context(rb_fiber_t *fib, size_t size)
|
|||
sec->machine.stack_start = (VALUE*)(ptr + STACK_DIR_UPPER(0, size));
|
||||
sec->machine.stack_maxsize = size - RB_PAGE_SIZE;
|
||||
#endif
|
||||
#ifdef __ia64
|
||||
sth->machine.register_stack_maxsize = sth->machine.stack_maxsize;
|
||||
#endif
|
||||
}
|
||||
|
||||
NOINLINE(static void fiber_setcontext(rb_fiber_t *newfib, rb_fiber_t *oldfib));
|
||||
|
@ -1065,53 +1019,11 @@ cont_restore_1(rb_context_t *cont)
|
|||
VALUE, cont->machine.stack_size);
|
||||
}
|
||||
|
||||
#ifdef __ia64
|
||||
if (cont->machine.register_stack_src) {
|
||||
MEMCPY(cont->machine.register_stack_src, cont->machine.register_stack,
|
||||
VALUE, cont->machine.register_stack_size);
|
||||
}
|
||||
#endif
|
||||
|
||||
ruby_longjmp(cont->jmpbuf, 1);
|
||||
}
|
||||
|
||||
NORETURN(NOINLINE(static void cont_restore_0(rb_context_t *, VALUE *)));
|
||||
|
||||
#ifdef __ia64
|
||||
#define C(a) rse_##a##0, rse_##a##1, rse_##a##2, rse_##a##3, rse_##a##4
|
||||
#define E(a) rse_##a##0= rse_##a##1= rse_##a##2= rse_##a##3= rse_##a##4
|
||||
static volatile int C(a), C(b), C(c), C(d), C(e);
|
||||
static volatile int C(f), C(g), C(h), C(i), C(j);
|
||||
static volatile int C(k), C(l), C(m), C(n), C(o);
|
||||
static volatile int C(p), C(q), C(r), C(s), C(t);
|
||||
#if 0
|
||||
{/* the above lines make cc-mode.el confused so much */}
|
||||
#endif
|
||||
int rb_dummy_false = 0;
|
||||
NORETURN(NOINLINE(static void register_stack_extend(rb_context_t *, VALUE *, VALUE *)));
|
||||
static void
|
||||
register_stack_extend(rb_context_t *cont, VALUE *vp, VALUE *curr_bsp)
|
||||
{
|
||||
if (rb_dummy_false) {
|
||||
/* use registers as much as possible */
|
||||
E(a) = E(b) = E(c) = E(d) = E(e) =
|
||||
E(f) = E(g) = E(h) = E(i) = E(j) =
|
||||
E(k) = E(l) = E(m) = E(n) = E(o) =
|
||||
E(p) = E(q) = E(r) = E(s) = E(t) = 0;
|
||||
E(a) = E(b) = E(c) = E(d) = E(e) =
|
||||
E(f) = E(g) = E(h) = E(i) = E(j) =
|
||||
E(k) = E(l) = E(m) = E(n) = E(o) =
|
||||
E(p) = E(q) = E(r) = E(s) = E(t) = 0;
|
||||
}
|
||||
if (curr_bsp < cont->machine.register_stack_src+cont->machine.register_stack_size) {
|
||||
register_stack_extend(cont, vp, (VALUE*)rb_ia64_bsp());
|
||||
}
|
||||
cont_restore_0(cont, vp);
|
||||
}
|
||||
#undef C
|
||||
#undef E
|
||||
#endif
|
||||
|
||||
static void
|
||||
cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
|
||||
{
|
||||
|
@ -1160,9 +1072,6 @@ cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
|
|||
}
|
||||
cont_restore_1(cont);
|
||||
}
|
||||
#ifdef __ia64
|
||||
#define cont_restore_0(cont, vp) register_stack_extend((cont), (vp), (VALUE*)rb_ia64_bsp())
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Document-class: Continuation
|
||||
|
|
4
dln.c
4
dln.c
|
@ -1171,7 +1171,7 @@ dln_strerror(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(_AIX) && ! defined(_IA64)
|
||||
#if defined(_AIX)
|
||||
static void
|
||||
aix_loaderror(const char *pathname)
|
||||
{
|
||||
|
@ -1400,7 +1400,7 @@ dln_load(const char *file)
|
|||
}
|
||||
#endif /* hpux */
|
||||
|
||||
#if defined(_AIX) && ! defined(_IA64)
|
||||
#if defined(_AIX)
|
||||
#define DLN_DEFINED
|
||||
{
|
||||
void (*init_fct)();
|
||||
|
|
|
@ -754,9 +754,6 @@ etc_uname(VALUE obj)
|
|||
# ifndef PROCESSOR_ARCHITECTURE_AMD64
|
||||
# define PROCESSOR_ARCHITECTURE_AMD64 9
|
||||
# endif
|
||||
# ifndef PROCESSOR_ARCHITECTURE_IA64
|
||||
# define PROCESSOR_ARCHITECTURE_IA64 6
|
||||
# endif
|
||||
# ifndef PROCESSOR_ARCHITECTURE_INTEL
|
||||
# define PROCESSOR_ARCHITECTURE_INTEL 0
|
||||
# endif
|
||||
|
@ -768,9 +765,6 @@ etc_uname(VALUE obj)
|
|||
case PROCESSOR_ARCHITECTURE_ARM:
|
||||
mach = "ARM";
|
||||
break;
|
||||
case PROCESSOR_ARCHITECTURE_IA64:
|
||||
mach = "IA64";
|
||||
break;
|
||||
case PROCESSOR_ARCHITECTURE_INTEL:
|
||||
mach = "x86";
|
||||
break;
|
||||
|
|
25
gc.c
25
gc.c
|
@ -4324,11 +4324,7 @@ init_mark_stack(mark_stack_t *stack)
|
|||
|
||||
/* Marking */
|
||||
|
||||
#ifdef __ia64
|
||||
#define SET_STACK_END (SET_MACHINE_STACK_END(&ec->machine.stack_end), ec->machine.register_stack_end = rb_ia64_bsp())
|
||||
#else
|
||||
#define SET_STACK_END SET_MACHINE_STACK_END(&ec->machine.stack_end)
|
||||
#endif
|
||||
|
||||
#define STACK_START (ec->machine.stack_start)
|
||||
#define STACK_END (ec->machine.stack_end)
|
||||
|
@ -4384,12 +4380,7 @@ stack_check(rb_execution_context_t *ec, int water_mark)
|
|||
int ret;
|
||||
SET_STACK_END;
|
||||
ret = STACK_LENGTH > STACK_LEVEL_MAX - water_mark;
|
||||
#ifdef __ia64
|
||||
if (!ret) {
|
||||
ret = (VALUE*)rb_ia64_bsp() - ec->machine.register_stack_start >
|
||||
ec->machine.register_stack_maxsize/sizeof(VALUE) - water_mark;
|
||||
}
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
|
@ -4719,11 +4710,7 @@ mark_stack_locations(rb_objspace_t *objspace, const rb_execution_context_t *ec,
|
|||
{
|
||||
|
||||
gc_mark_locations(objspace, stack_start, stack_end);
|
||||
#ifdef __ia64
|
||||
gc_mark_locations(objspace,
|
||||
ec->machine.register_stack_start,
|
||||
ec->machine.register_stack_end);
|
||||
#endif
|
||||
|
||||
#if defined(__mc68000__)
|
||||
gc_mark_locations(objspace,
|
||||
(VALUE*)((char*)stack_start + 2),
|
||||
|
@ -7230,14 +7217,6 @@ garbage_collect_with_gvl(rb_objspace_t *objspace, int reason)
|
|||
}
|
||||
}
|
||||
|
||||
#undef Init_stack
|
||||
|
||||
void
|
||||
Init_stack(volatile VALUE *addr)
|
||||
{
|
||||
ruby_init_stack(addr);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* GC.start -> nil
|
||||
|
|
42
ia64.S
42
ia64.S
|
@ -1,42 +0,0 @@
|
|||
// rb_ia64_flushrs and rb_ia64_bsp is written in IA64 assembly language
|
||||
// because Intel Compiler for IA64 doesn't support inline assembly.
|
||||
//
|
||||
// This file is based on following C program compiled by gcc.
|
||||
//
|
||||
// void rb_ia64_flushrs(void) { __builtin_ia64_flushrs(); }
|
||||
// void *rb_ia64_bsp(void) { return __builtin_ia64_bsp(); }
|
||||
//
|
||||
// Note that rb_ia64_flushrs and rb_ia64_bsp works in its own stack frame.
|
||||
// It's because BSP is updated by br.call/brl.call (not alloc instruction).
|
||||
// So rb_ia64_flushrs flushes stack frames including caller's one.
|
||||
// rb_ia64_bsp returns the address next to caller's register stack frame.
|
||||
//
|
||||
// See also
|
||||
// Intel Itanium Architecture Software Developer's Manual
|
||||
// Volume 2: System Architecture.
|
||||
//
|
||||
.file "ia64.c"
|
||||
.text
|
||||
.align 16
|
||||
.global rb_ia64_flushrs#
|
||||
.proc rb_ia64_flushrs#
|
||||
rb_ia64_flushrs:
|
||||
.prologue
|
||||
.body
|
||||
flushrs
|
||||
;;
|
||||
nop.i 0
|
||||
br.ret.sptk.many b0
|
||||
.endp rb_ia64_flushrs#
|
||||
.align 16
|
||||
.global rb_ia64_bsp#
|
||||
.proc rb_ia64_bsp#
|
||||
rb_ia64_bsp:
|
||||
.prologue
|
||||
.body
|
||||
nop.m 0
|
||||
;;
|
||||
mov r8 = ar.bsp
|
||||
br.ret.sptk.many b0
|
||||
.endp rb_ia64_bsp#
|
||||
.ident "GCC: (GNU) 3.3.5 (Debian 1:3.3.5-13)"
|
|
@ -401,10 +401,6 @@ ruby_xrealloc2_with_location(void *ptr, size_t s1, size_t s2, const char *file,
|
|||
#if defined(__sparc)
|
||||
void rb_sparc_flush_register_windows(void);
|
||||
# define FLUSH_REGISTER_WINDOWS rb_sparc_flush_register_windows()
|
||||
#elif defined(__ia64)
|
||||
void *rb_ia64_bsp(void);
|
||||
void rb_ia64_flushrs(void);
|
||||
# define FLUSH_REGISTER_WINDOWS rb_ia64_flushrs()
|
||||
#else
|
||||
# define FLUSH_REGISTER_WINDOWS ((void)0)
|
||||
#endif
|
||||
|
|
|
@ -2669,13 +2669,7 @@ void ruby_show_copyright(void);
|
|||
ruby_init_stack(&variable_in_this_stack_frame);
|
||||
/*! @} */
|
||||
|
||||
#ifdef __ia64
|
||||
void ruby_init_stack(volatile VALUE*, void*);
|
||||
#define ruby_init_stack(addr) ruby_init_stack((addr), rb_ia64_bsp())
|
||||
#else
|
||||
void ruby_init_stack(volatile VALUE*);
|
||||
#endif
|
||||
#define Init_stack(addr) ruby_init_stack(addr)
|
||||
|
||||
int ruby_setup(void);
|
||||
int ruby_cleanup(volatile int);
|
||||
|
|
22
thread.c
22
thread.c
|
@ -148,16 +148,9 @@ static inline int blocking_region_begin(rb_thread_t *th, struct rb_blocking_regi
|
|||
rb_unblock_function_t *ubf, void *arg, int fail_if_interrupted);
|
||||
static inline void blocking_region_end(rb_thread_t *th, struct rb_blocking_region_buffer *region);
|
||||
|
||||
#ifdef __ia64
|
||||
#define RB_GC_SAVE_MACHINE_REGISTER_STACK(th) \
|
||||
do{(th)->ec->machine.register_stack_end = rb_ia64_bsp();}while(0)
|
||||
#else
|
||||
#define RB_GC_SAVE_MACHINE_REGISTER_STACK(th)
|
||||
#endif
|
||||
#define RB_GC_SAVE_MACHINE_CONTEXT(th) \
|
||||
do { \
|
||||
FLUSH_REGISTER_WINDOWS; \
|
||||
RB_GC_SAVE_MACHINE_REGISTER_STACK(th); \
|
||||
setjmp((th)->ec->machine.regs); \
|
||||
SET_MACHINE_STACK_END(&(th)->ec->machine.stack_end); \
|
||||
} while (0)
|
||||
|
@ -332,11 +325,7 @@ rb_thread_s_debug_set(VALUE self, VALUE val)
|
|||
# define PRI_THREAD_ID "p"
|
||||
#endif
|
||||
|
||||
#ifndef __ia64
|
||||
#define thread_start_func_2(th, st, rst) thread_start_func_2(th, st)
|
||||
#endif
|
||||
NOINLINE(static int thread_start_func_2(rb_thread_t *th, VALUE *stack_start,
|
||||
VALUE *register_stack_start));
|
||||
NOINLINE(static int thread_start_func_2(rb_thread_t *th, VALUE *stack_start));
|
||||
static void timer_thread_function(void);
|
||||
void ruby_sigchld_handler(rb_vm_t *); /* signal.c */
|
||||
|
||||
|
@ -608,9 +597,6 @@ thread_cleanup_func_before_exec(void *th_ptr)
|
|||
rb_thread_t *th = th_ptr;
|
||||
th->status = THREAD_KILLED;
|
||||
th->ec->machine.stack_start = th->ec->machine.stack_end = NULL;
|
||||
#ifdef __ia64
|
||||
th->ec->machine.register_stack_start = th->ec->machine.register_stack_end = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -713,7 +699,7 @@ rb_vm_push_frame(rb_execution_context_t *sec,
|
|||
int stack_max);
|
||||
|
||||
static int
|
||||
thread_start_func_2(rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_start)
|
||||
thread_start_func_2(rb_thread_t *th, VALUE *stack_start)
|
||||
{
|
||||
STACK_GROW_DIR_DETECTION;
|
||||
enum ruby_tag_type state;
|
||||
|
@ -734,9 +720,7 @@ thread_start_func_2(rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_s
|
|||
|
||||
th->ec->machine.stack_start = STACK_DIR_UPPER(vm_stack + size, vm_stack);
|
||||
th->ec->machine.stack_maxsize -= size * sizeof(VALUE);
|
||||
#ifdef __ia64
|
||||
th->ec->machine.register_stack_start = register_stack_start;
|
||||
#endif
|
||||
|
||||
thread_debug("thread start: %p\n", (void *)th);
|
||||
|
||||
gvl_acquire(th->vm, th);
|
||||
|
|
|
@ -647,51 +647,6 @@ size_t pthread_get_stacksize_np(pthread_t);
|
|||
#define STACKADDR_AVAILABLE 1
|
||||
#elif defined __HAIKU__
|
||||
#define STACKADDR_AVAILABLE 1
|
||||
#elif defined __ia64 && defined _HPUX_SOURCE
|
||||
#include <sys/dyntune.h>
|
||||
|
||||
#define STACKADDR_AVAILABLE 1
|
||||
|
||||
/*
|
||||
* Do not lower the thread's stack to PTHREAD_STACK_MIN,
|
||||
* otherwise one would receive a 'sendsig: useracc failed.'
|
||||
* and a coredump.
|
||||
*/
|
||||
#undef PTHREAD_STACK_MIN
|
||||
|
||||
#define HAVE_PTHREAD_ATTR_GET_NP 1
|
||||
#undef HAVE_PTHREAD_ATTR_GETSTACK
|
||||
|
||||
/*
|
||||
* As the PTHREAD_STACK_MIN is undefined and
|
||||
* no one touches the default stacksize,
|
||||
* it is just fine to use the default.
|
||||
*/
|
||||
#define pthread_attr_get_np(thid, attr) 0
|
||||
|
||||
/*
|
||||
* Using value of sp is very rough... To make it more real,
|
||||
* addr would need to be aligned to vps_pagesize.
|
||||
* The vps_pagesize is 'Default user page size (kBytes)'
|
||||
* and could be retrieved by gettune().
|
||||
*/
|
||||
static int
|
||||
hpux_attr_getstackaddr(const pthread_attr_t *attr, void **addr)
|
||||
{
|
||||
static uint64_t pagesize;
|
||||
size_t size;
|
||||
|
||||
if (!pagesize) {
|
||||
if (gettune("vps_pagesize", &pagesize)) {
|
||||
pagesize = 16;
|
||||
}
|
||||
pagesize *= 1024;
|
||||
}
|
||||
pthread_attr_getstacksize(attr, &size);
|
||||
*addr = (void *)((size_t)((char *)_Asm_get_sp() - size) & ~(pagesize - 1));
|
||||
return 0;
|
||||
}
|
||||
#define pthread_attr_getstackaddr(attr, addr) hpux_attr_getstackaddr(attr, addr)
|
||||
#endif
|
||||
|
||||
#ifndef MAINSTACKADDR_AVAILABLE
|
||||
|
@ -791,9 +746,6 @@ static struct {
|
|||
rb_nativethread_id_t id;
|
||||
size_t stack_maxsize;
|
||||
VALUE *stack_start;
|
||||
#ifdef __ia64
|
||||
VALUE *register_stack_start;
|
||||
#endif
|
||||
} native_main_thread;
|
||||
|
||||
#ifdef STACK_END_ADDRESS
|
||||
|
@ -879,19 +831,10 @@ reserve_stack(volatile char *limit, size_t size)
|
|||
* You must call this function before any heap allocation by Ruby implementation.
|
||||
* Or GC will break living objects */
|
||||
void
|
||||
ruby_init_stack(volatile VALUE *addr
|
||||
#ifdef __ia64
|
||||
, void *bsp
|
||||
#endif
|
||||
)
|
||||
ruby_init_stack(volatile VALUE *addr)
|
||||
{
|
||||
native_main_thread.id = pthread_self();
|
||||
#ifdef __ia64
|
||||
if (!native_main_thread.register_stack_start ||
|
||||
(VALUE*)bsp < native_main_thread.register_stack_start) {
|
||||
native_main_thread.register_stack_start = (VALUE*)bsp;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if MAINSTACKADDR_AVAILABLE
|
||||
if (native_main_thread.stack_maxsize) return;
|
||||
{
|
||||
|
@ -995,11 +938,7 @@ native_thread_init_stack(rb_thread_t *th)
|
|||
rb_raise(rb_eNotImpError, "ruby engine can initialize only in the main thread");
|
||||
#endif
|
||||
}
|
||||
#ifdef __ia64
|
||||
th->ec->machine.register_stack_start = native_main_thread.register_stack_start;
|
||||
th->ec->machine.stack_maxsize /= 2;
|
||||
th->ec->machine.register_stack_maxsize = th->ec->machine.stack_maxsize;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1027,9 +966,9 @@ thread_start_func_1(void *th_ptr)
|
|||
native_thread_init(th);
|
||||
/* run */
|
||||
#if defined USE_NATIVE_THREAD_INIT
|
||||
thread_start_func_2(th, th->ec->machine.stack_start, rb_ia64_bsp());
|
||||
thread_start_func_2(th, th->ec->machine.stack_start);
|
||||
#else
|
||||
thread_start_func_2(th, &stack_start, rb_ia64_bsp());
|
||||
thread_start_func_2(th, &stack_start);
|
||||
#endif
|
||||
}
|
||||
#if USE_THREAD_CACHE
|
||||
|
@ -1161,10 +1100,6 @@ native_thread_create(rb_thread_t *th)
|
|||
const size_t space = space_size(stack_size);
|
||||
|
||||
th->ec->machine.stack_maxsize = stack_size - space;
|
||||
#ifdef __ia64
|
||||
th->ec->machine.stack_maxsize /= 2;
|
||||
th->ec->machine.register_stack_maxsize = th->ec->machine.stack_maxsize;
|
||||
#endif
|
||||
|
||||
CHECK_ERR(pthread_attr_init(&attr));
|
||||
|
||||
|
|
|
@ -582,7 +582,7 @@ thread_start_func_1(void *th_ptr)
|
|||
thread_debug("thread created (th: %p, thid: %p, event: %p)\n", th,
|
||||
th->thread_id, th->native_thread_data.interrupt_event);
|
||||
|
||||
thread_start_func_2(th, th->ec->machine.stack_start, rb_ia64_bsp());
|
||||
thread_start_func_2(th, th->ec->machine.stack_start);
|
||||
|
||||
w32_close_handle(thread_id);
|
||||
thread_debug("thread deleted (th: %p)\n", th);
|
||||
|
|
|
@ -3,7 +3,7 @@ AC_DEFUN([RUBY_STACK_GROW_DIRECTION], [
|
|||
AS_VAR_PUSHDEF([stack_grow_dir], [rb_cv_stack_grow_dir_$1])
|
||||
AC_CACHE_CHECK(stack growing direction on $1, stack_grow_dir, [
|
||||
AS_CASE(["$1"],
|
||||
[m68*|x86*|x64|i?86|ia64|ppc*|sparc*|alpha*], [ $2=-1],
|
||||
[m68*|x86*|x64|i?86|ppc*|sparc*|alpha*], [ $2=-1],
|
||||
[hppa*], [ $2=+1],
|
||||
[
|
||||
AC_TRY_RUN([
|
||||
|
|
3
vm.c
3
vm.c
|
@ -2878,9 +2878,6 @@ mjit_pause_m(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self))
|
|||
|
||||
extern VALUE *rb_gc_stack_start;
|
||||
extern size_t rb_gc_stack_maxsize;
|
||||
#ifdef __ia64
|
||||
extern VALUE *rb_gc_register_stack_start;
|
||||
#endif
|
||||
|
||||
/* debug functions */
|
||||
|
||||
|
|
|
@ -894,11 +894,6 @@ typedef struct rb_execution_context_struct {
|
|||
VALUE *stack_start;
|
||||
VALUE *stack_end;
|
||||
size_t stack_maxsize;
|
||||
#ifdef __ia64
|
||||
VALUE *register_stack_start;
|
||||
VALUE *register_stack_end;
|
||||
size_t register_stack_maxsize;
|
||||
#endif
|
||||
RUBY_ALIGNAS(SIZEOF_VALUE) jmp_buf regs;
|
||||
} machine;
|
||||
} rb_execution_context_t;
|
||||
|
|
|
@ -649,14 +649,6 @@ dump_thread(void *arg)
|
|||
frame.AddrFrame.Offset = context.Rbp;
|
||||
frame.AddrStack.Mode = AddrModeFlat;
|
||||
frame.AddrStack.Offset = context.Rsp;
|
||||
#elif defined(_M_IA64) || defined(__ia64__)
|
||||
mac = IMAGE_FILE_MACHINE_IA64;
|
||||
frame.AddrPC.Mode = AddrModeFlat;
|
||||
frame.AddrPC.Offset = context.StIIP;
|
||||
frame.AddrBStore.Mode = AddrModeFlat;
|
||||
frame.AddrBStore.Offset = context.RsBSP;
|
||||
frame.AddrStack.Mode = AddrModeFlat;
|
||||
frame.AddrStack.Offset = context.IntSp;
|
||||
#else /* i386 */
|
||||
mac = IMAGE_FILE_MACHINE_I386;
|
||||
frame.AddrPC.Mode = AddrModeFlat;
|
||||
|
|
|
@ -399,7 +399,7 @@ RUBY = ruby
|
|||
DTRACE_EXT = dmyh
|
||||
|
||||
!if !defined(STACK)
|
||||
!if "$(ARCH)" == "x64" || "$(ARCH)" == "ia64"
|
||||
!if "$(ARCH)" == "x64"
|
||||
STACK = 0x400000
|
||||
!else
|
||||
STACK = 0x200000
|
||||
|
@ -646,7 +646,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub
|
|||
!else
|
||||
#define SIZEOF_OFF_T 4
|
||||
!endif
|
||||
!if "$(ARCH)" == "x64" || "$(ARCH)" == "ia64"
|
||||
!if "$(ARCH)" == "x64"
|
||||
#define SIZEOF_VOIDP 8
|
||||
!else
|
||||
#define SIZEOF_VOIDP 4
|
||||
|
@ -668,7 +668,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub
|
|||
#define NUM2CLOCKID(v) NUM2INT(v)
|
||||
#define SIZEOF_CLOCK_T 4
|
||||
#define SIZEOF_RLIM_T 0
|
||||
!if "$(ARCH)" == "x64" || "$(ARCH)" == "ia64"
|
||||
!if "$(ARCH)" == "x64"
|
||||
#define SIZEOF_SIZE_T 8
|
||||
#define SIZEOF_PTRDIFF_T 8
|
||||
#define SIZEOF_INTPTR_T 8
|
||||
|
@ -712,7 +712,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub
|
|||
!else
|
||||
#define PACKED_STRUCT(x) x
|
||||
!endif
|
||||
!if "$(ARCH)" == "x86" || "$(ARCH)" == "x64" || "$(ARCH)" == "ia64"
|
||||
!if "$(ARCH)" == "x86" || "$(ARCH)" == "x64"
|
||||
#define PACKED_STRUCT_UNALIGNED(x) PACKED_STRUCT(x)
|
||||
!else
|
||||
#define PACKED_STRUCT_UNALIGNED(x) x
|
||||
|
@ -778,7 +778,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub
|
|||
#define HAVE_INTPTR_T 1
|
||||
#define HAVE_UINTPTR_T 1
|
||||
#define HAVE_SSIZE_T 1
|
||||
!if "$(ARCH)" == "x64" || "$(ARCH)" == "ia64"
|
||||
!if "$(ARCH)" == "x64"
|
||||
#define ssize_t __int64
|
||||
#define PRI_PTR_PREFIX "I64"
|
||||
!else
|
||||
|
@ -868,7 +868,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub
|
|||
#define restrict /* not supported */
|
||||
!endif
|
||||
#define NEED_IO_SEEK_BETWEEN_RW 1
|
||||
!if "$(MACHINE)" == "x86" || "$(ARCH)" == "x64" || "$(ARCH)" == "ia64"
|
||||
!if "$(MACHINE)" == "x86" || "$(ARCH)" == "x64"
|
||||
#define STACK_GROW_DIRECTION -1
|
||||
!endif
|
||||
!if "$(COROUTINE_OBJ)" != ""
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
|
||||
2. Visual C++ 12.0 (2013) or later.
|
||||
|
||||
[Note] if you want to build x64 or ia64 version, use native compiler for
|
||||
x64/ia64.
|
||||
[Note] if you want to build x64 version, use native compiler for
|
||||
x64.
|
||||
|
||||
3. Please set environment variable +INCLUDE+, +LIB+, +PATH+
|
||||
to run required commands properly from the command line.
|
||||
|
|
|
@ -101,8 +101,7 @@ goto :loop ;
|
|||
:target
|
||||
echo>> ~tmp~.mak "%~2" \
|
||||
echo>>confargs.tmp --target=%2 \
|
||||
if "%~2" == "x64-mswin64" goto target2
|
||||
if NOT "%~2" == "ia64-mswin64" goto target3
|
||||
if NOT "%~2" == "x64-mswin64" goto target3
|
||||
:target2
|
||||
echo>> ~tmp~.mak "TARGET_OS=mswin64" \
|
||||
:target3
|
||||
|
|
|
@ -31,7 +31,6 @@ i586-mswin32: -prologue- -i586- -epilogue-
|
|||
i686-mswin32: -prologue- -i686- -epilogue-
|
||||
alpha-mswin32: -prologue- -alpha- -epilogue-
|
||||
x64-mswin64: -prologue- -x64- -epilogue-
|
||||
ia64-mswin64: -prologue- -ia64- -epilogue-
|
||||
|
||||
-prologue-: -basic-vars-
|
||||
-generic-: -osname-
|
||||
|
@ -178,8 +177,6 @@ RUBY_SO_NAME = $(RUBY_SO_NAME)
|
|||
@$(CPP) <<conftest.c 2>nul | findstr = >>$(MAKEFILE)
|
||||
#if defined _M_X64
|
||||
MACHINE = x64
|
||||
#elif defined _M_IA64
|
||||
MACHINE = ia64
|
||||
#else
|
||||
MACHINE = x86
|
||||
#endif
|
||||
|
@ -192,8 +189,6 @@ MACHINE = x86
|
|||
@echo MACHINE = alpha>>$(MAKEFILE)
|
||||
-x64-: -osname64-
|
||||
@echo MACHINE = x64>>$(MAKEFILE)
|
||||
-ia64-: -osname64-
|
||||
@echo MACHINE = ia64>>$(MAKEFILE)
|
||||
-ix86-: -osname32-
|
||||
@echo MACHINE = x86>>$(MAKEFILE)
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче