summaryrefslogtreecommitdiffstats
path: root/ext/dl
diff options
context:
space:
mode:
authorttate <ttate@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-05-12 19:54:10 +0000
committerttate <ttate@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-05-12 19:54:10 +0000
commit547a50d4654a3a617d003f40da4e45516d9cf948 (patch)
tree91edcbaec9aa339737731aace2289516b06b8d02 /ext/dl
parenta5b1286d26290b0b2ef2cb92f42c3e235946c870 (diff)
downloadruby-547a50d4654a3a617d003f40da4e45516d9cf948.tar.gz
ruby-547a50d4654a3a617d003f40da4e45516d9cf948.tar.xz
ruby-547a50d4654a3a617d003f40da4e45516d9cf948.zip
cast to long from char, short and int in ASM_PUSH_XXXX.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@2452 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/dl')
-rw-r--r--ext/dl/dl.h6
-rw-r--r--ext/dl/sym.c7
2 files changed, 6 insertions, 7 deletions
diff --git a/ext/dl/dl.h b/ext/dl/dl.h
index ceee8c538..5068fc6bb 100644
--- a/ext/dl/dl.h
+++ b/ext/dl/dl.h
@@ -161,9 +161,9 @@
#elif defined(USE_DLSTACK)
# define ASM_START(sym)
# define ASM_END(sym)
-# define ASM_PUSH_C(x) memcpy(sp,&x,1); sp++;
-# define ASM_PUSH_H(x) memcpy(sp,&x,sizeof(short)); sp++;
-# define ASM_PUSH_I(x) memcpy(sp,&x,sizeof(int)); sp++;
+# define ASM_PUSH_C(x) {long v=(long)x; memcpy(sp,&v,sizeof(long)); sp++;}
+# define ASM_PUSH_H(x) {long v=(long)x; memcpy(sp,&v,sizeof(long)); sp++;}
+# define ASM_PUSH_I(x) {long v=(long)x; memcpy(sp,&v,sizeof(long)); sp++;}
# define ASM_PUSH_L(x) memcpy(sp,&x,sizeof(long)); sp++;
# define ASM_PUSH_P(x) memcpy(sp,&x,sizeof(void*)); sp++;
# define ASM_PUSH_F(x) memcpy(sp,&x,sizeof(float)); sp+=sizeof(float)/sizeof(long);
diff --git a/ext/dl/sym.c b/ext/dl/sym.c
index 996831bec..5340dcb48 100644
--- a/ext/dl/sym.c
+++ b/ext/dl/sym.c
@@ -529,8 +529,10 @@ rb_dlsym_call(int argc, VALUE argv[], VALUE self)
stack[5],stack[6],stack[7],stack[8],stack[9],\
stack[10],stack[11],stack[12],stack[13],stack[14]
int stk_size;
- long *stack, *sp;
+ long stack[15];
+ long *sp;
+ sp = stack;
stk_size = stack_size(sym);
if( stk_size < 0 ){
FREE_ARGS;
@@ -539,10 +541,7 @@ rb_dlsym_call(int argc, VALUE argv[], VALUE self)
else if( stk_size > (int)(sizeof(long) * 15) ){
FREE_ARGS;
rb_raise(rb_eArgError, "too many arguments.");
- stk_size = sizeof(long) * 15;
}
- stack = (long*)alloca(stk_size);
- sp = stack;
#elif defined(USE_INLINE_ASM)
#define DLSTACK_PROTO
#define DLSTACK_ARGS