$ gtar zxf ruby-1.8.7-p72.tar.gz
$ cd ruby-1.8.7-p72
$ ./configure CC=xlc_r CFLAGS="-g" --enable-shared --enable-pthread
$ gmake
…
xlc_r -g -DRUBY_EXPORT -I. -I. -c eval.c
“eval.c”, line 12093.12: 1506-343 (S) Redeclaration of thread_init
differs from previous declaration on line 920 of
“/usr/include/sys/thread.h”.
“eval.c”, line 12093.12: 1506-382 (I) The type “int” of identifier
thread_init differs from previous type “void(unsigned long long,unsigned
long long)”.
gmake: *** [eval.o] Error 1
[fixed]
$ gmake
…
xlc_r -g -DRUBY_EXPORT -I. -I. -c parse.c
“intern.h”, line 28.7: 1506-166 (S) Definition of function rb_ary_new3
requires parentheses.
“intern.h”, line 28.19: 1506-276 (S) Syntax error: possible missing ‘{’?
“node.h”, line 21.5: 1506-045 (S) Undeclared identifier NODE_METHOD.
…
[fixed]
$ gmake
…
xlc_r -g -DRUBY_EXPORT -L. -bE:ruby.imp -brtl main.o
libruby-static.a -lpthread -ldl -lcrypt -lm -o miniruby
gmake: *** [.rbconfig.time] IOT/Abort trap (core dumped)
$ dbx miniruby core
(/usr/ccs/bin/dbx) where
_p_raise(??) at 0xd01242a4
raise.raise(??) at 0xd0359c70
abort.abort() at 0xd03b7f78
rb_jump_context(env = 0x2ff20d30, val = 2), line 97 in “eval.c”
rb_iterate(it_proc = 0x2001bd28, data1 = 537241180, bl_proc =
0x2001d5f4, data2 = 804381664), line 5417 in “eval.c”
enum_each_with_index(obj = 537241180), line 1508 in “enum.c”
call_cfunc(func = 0x2001bca4, recv = 537241180, len = 0, argc = 0, argv
= (nil)), line 5752 in “eval.c”
unnamed block in rb_call0(klass = 537274880, recv = 537241180, id =
3929, oid = 3929, argc = 0, argv = (nil), body = 0x200686a8, flags = 0),
line 5904 in “eval.c”
unnamed block in rb_call0(klass = 537274880, recv = 537241180, id =
3929, oid = 3929, argc = 0, argv = (nil), body = 0x200686a8, flags = 0),
line 5904 in “eval.c”
unnamed block in rb_call0(klass = 537274880, recv = 537241180, id =
3929, oid = 3929, argc = 0, argv = (nil), body = 0x200686a8, flags = 0),
line 5904 in “eval.c”
rb_call0(klass = 537274880, recv = 537241180, id = 3929, oid = 3929,
argc = 0, argv = (nil), body = 0x200686a8, flags = 0), line 5904 in
“eval.c”
rb_call(klass = 537274880, recv = 537241180, mid = 3929, argc = 0, argv
= (nil), scope = 0, self = 537300680), line 6151 in “eval.c”
unnamed block in rb_eval(self = 537300680, n = 0x20058870), line 3492 in
“eval.c”
unnamed block in rb_eval(self = 537300680, n = 0x20058870), line 3492 in
“eval.c”
rb_eval(self = 537300680, n = 0x20058870), line 3492 in “eval.c”
unnamed block in rb_eval(self = 537300680, n = 0x20058618), line 3222 in
“eval.c”
unnamed block in rb_eval(self = 537300680, n = 0x20058618), line 3222 in
“eval.c”
unnamed block in rb_eval(self = 537300680, n = 0x20058618), line 3222 in
“eval.c”
rb_eval(self = 537300680, n = 0x20058618), line 3222 in “eval.c”
eval_node(self = 537300680, node = 0x20058618), line 1436 in “eval.c”
unnamed block in rb_load(fname = 537233720, wrap = 0), line 7032 in
“eval.c”
unnamed block in rb_load(fname = 537233720, wrap = 0), line 7032 in
“eval.c”
unnamed block in rb_load(fname = 537233720, wrap = 0), line 7032 in
“eval.c”
unnamed block in rb_load(fname = 537233720, wrap = 0), line 7032 in
“eval.c”
unnamed block in rb_load(fname = 537233720, wrap = 0), line 7032 in
“eval.c”
unnamed block in rb_load(fname = 537233720, wrap = 0), line 7032 in
“eval.c”
unnamed block in rb_load(fname = 537233720, wrap = 0), line 7032 in
“eval.c”
rb_load(fname = 537233720, wrap = 0), line 7032 in “eval.c”
unnamed block in rb_require_safe(fname = 537233880, safe = 0), line 7389
in “eval.c”
unnamed block in rb_require_safe(fname = 537233880, safe = 0), line 7389
in “eval.c”
rb_require_safe(fname = 537233880, safe = 0), line 7389 in “eval.c”
rb_require(fname = “./ext/purelib.rb”), line 7429 in “eval.c”
unnamed block in rb_protect(proc = 0x2001e3bc, data = 537575944, state =
0x2ff22424), line 5526 in “eval.c”
rb_protect(proc = 0x2001e3bc, data = 537575944, state = 0x2ff22424),
line 5526 in “eval.c”
unnamed block in require_libraries(), line 387 in “ruby.c”
require_libraries(), line 387 in “ruby.c”
unnamed block in load_file(fname = “./mkconfig.rb”, script = 1), line
974 in “ruby.c”
load_file(fname = “./mkconfig.rb”, script = 1), line 974 in “ruby.c”
proc_options(argc = 4, argv = 0x2ff229c8), line 853 in “ruby.c”
ruby_process_options(argc = 10, argv = 0x2ff229b0), line 1246 in
“ruby.c”
unnamed block in ruby_options(argc = 10, argv = 0x2ff229b0), line 1532
in “eval.c”
ruby_options(argc = 10, argv = 0x2ff229b0), line 1532 in “eval.c”
unnamed block in main(argc = 10, argv = 0x2ff229b0, envp = 0x2ff229dc),
line 47 in “main.c”
main(argc = 10, argv = 0x2ff229b0, envp = 0x2ff229dc), line 47 in
“main.c”
–
albert chin (china @at@ thewrittenword .dot. com)
– snip snip
— eval.c.orig 2008-08-04 03:24:26.000000000 +0000
+++ eval.c 2008-10-16 15:52:27.000000000 +0000
@@ -12090,7 +12090,7 @@
return th;
}
-static int thread_init;
+static int rbthread_init;
#if defined(_THREAD_SAFE)
static void
@@ -12164,7 +12164,7 @@
{
struct itimerval tval;
- if (!thread_init) return;
- if (!rbthread_init) return;
tval.it_interval.tv_sec = 0;
tval.it_interval.tv_usec = 10000;
tval.it_value = tval.it_interval;
@@ -12176,7 +12176,7 @@
{
struct itimerval tval;
- if (!thread_init) return;
- if (!rbthread_init) return;
tval.it_interval.tv_sec = 0;
tval.it_interval.tv_usec = 0;
tval.it_value = tval.it_interval;
@@ -12203,8 +12203,8 @@
“can’t start a new thread (frozen ThreadGroup)”);
}
- if (!thread_init) {
- thread_init = 1;
- if (!rbthread_init) {
- rbthread_init = 1;
#if defined(HAVE_SETITIMER) || defined(_THREAD_SAFE)
#if defined(POSIX_SIGNAL)
posix_signal(SIGVTALRM, catch_timer);
— intern.h.orig 2008-07-07 03:29:28.000000000 +0000
+++ intern.h 2008-10-16 15:52:33.000000000 +0000
@@ -25,7 +25,7 @@
VALUE rb_check_array_type _((VALUE));
VALUE rb_ary_new _((void));
VALUE rb_ary_new2 _((long));
-VALUE rb_ary_new3 __((long,…));
+VALUE rb_ary_new3 _((long,…));
VALUE rb_ary_new4 _((long, const VALUE ));
VALUE rb_ary_freeze _((VALUE));
VALUE rb_ary_aref _((int, VALUE, VALUE));
@@ -141,11 +141,11 @@
VALUE rb_exc_new _((VALUE, const char*, long));
VALUE rb_exc_new2 _((VALUE, const char*));
VALUE rb_exc_new3 _((VALUE, VALUE));
-NORETURN(void rb_loaderror __((const char*, …)));
-NORETURN(void rb_name_error __((ID, const char*, …)));
+NORETURN(void rb_loaderror _((const char*, …)));
+NORETURN(void rb_name_error _((ID, const char*, …)));
NORETURN(void rb_invalid_str _((const char*, const char*)));
-void rb_compile_error __((const char*, …));
-void rb_compile_error_append __((const char*, …));
+void rb_compile_error _((const char*, …));
+void rb_compile_error_append _((const char*, …));
NORETURN(void rb_load_fail _((const char*)));
NORETURN(void rb_error_frozen _((const char*)));
void rb_check_frozen _((VALUE));
@@ -236,7 +236,7 @@
VALUE rb_thread_local_aset _((VALUE, ID, VALUE));
void rb_thread_atfork _((void));
VALUE rb_exec_recursive _((VALUE()(VALUE, VALUE, int),VALUE,VALUE));
-VALUE rb_funcall_rescue __((VALUE, ID, int, …));
+VALUE rb_funcall_rescue _((VALUE, ID, int, …));
/ file.c /
VALUE rb_file_s_expand_path _((int, VALUE ));
VALUE rb_file_expand_path _((VALUE, VALUE));
@@ -249,7 +249,7 @@
char rb_path_end _((const char ));
VALUE rb_file_directory_p _((VALUE,VALUE));
/ gc.c /
-NORETURN(void rb_memerror __((void)));
+NORETURN(void rb_memerror _((void)));
int ruby_stack_check _((void));
int ruby_stack_length _((VALUE));
int rb_during_gc _((void));
@@ -463,8 +463,8 @@
void rb_str_setter _((VALUE, ID, VALUE));
VALUE rb_str_intern _((VALUE));
/ struct.c /
-VALUE rb_struct_new __((VALUE, …));
-VALUE rb_struct_define __((const char, …));
+VALUE rb_struct_new _((VALUE, …));
+VALUE rb_struct_define _((const char*, …));
VALUE rb_struct_alloc _((VALUE, VALUE));
VALUE rb_struct_aref _((VALUE, VALUE));
VALUE rb_struct_aset _((VALUE, VALUE, VALUE));