Skip to content
Browse files

Pull in patches from what SLE10 ships on top of 1.1.13.8:

2006-06-14 Neale Ferguson <neale@sinenomine.net>

       * atomic.h: Fix atomic exchange pointer operations for s390x - these
       were broken as they used 32-bit instructions rather than their 64-bit
       versions.

2006-06-09 Neale Ferguson <neale@sinenomine.net>

       * atomic.h: Fix atomic operations for s390x (not really broken
       but changed to use full 64-bit opcodes).

2006-06-09  Neale Ferguson <neale@sinenomine.net>

       * mini-exceptions.c (ves_icall_get_frame_info): Fix this function on s390/s390x.
       * mono/io-layer/atomic.h: Fix atomic operations for s390x (not really broken
       but changed to use full 64-bit opcodes).
       * mono/mini/mini-s390x.c: Correct ATOMIC operations (incorrect register for CS
       instruction).
       * mono/mini/mini-s390x.h: Simplify MCONTEXT_GET_BP.
       * mono/mini/cpu-s390x.md: Fix max. length values for a couple of instructions.

2006-08-10  Zoltan Varga  <vargaz@gmail.com>

       * mono-compiler.h: Fix TLS definitions so libmono can be loaded dynamically as a
       module. Fixes #78767.

2006-07-19  Wade Berrier <wberrier@novell.com>

       * scripts/mono-find-provides.in: Remove support for only scanning files in the gac.
       The problem is that mono apps are often broken up into subpackages, and deps can only
       be resolved if the assemblies are in the gac, even when they sometimes shouldn't be.
       (See https://bugzilla.novell.com/show_bug.cgi?id=144655)


svn path=/branches/mono-1-1-13-8/mono/; revision=66308
  • Loading branch information...
1 parent d08b6f1 commit 882a1b2ddcf65ff3d888411e2712f400617b7f30 Wade Berrier committed
View
7 ChangeLog
@@ -1,3 +1,10 @@
+2006-07-19 Wade Berrier <wberrier@novell.com>
+
+ * scripts/mono-find-provides.in: Remove support for only scanning files in the gac.
+ The problem is that mono apps are often broken up into subpackages, and deps can only
+ be resolved if the assemblies are in the gac, even when they sometimes shouldn't be.
+ (See https://bugzilla.novell.com/show_bug.cgi?id=144655)
+
2006-04-25 Wade Berrier <wberrier@novell.com>
* scripts/mono-find-provides.in: Only scan files that are in the gac.
View
11 mono/io-layer/ChangeLog
@@ -1,3 +1,14 @@
+2006-06-14 Neale Ferguson <neale@sinenomine.net>
+
+ * atomic.h: Fix atomic exchange pointer operations for s390x - these
+ were broken as they used 32-bit instructions rather than their 64-bit
+ versions.
+
+2006-06-09 Neale Ferguson <neale@sinenomine.net>
+
+ * atomic.h: Fix atomic operations for s390x (not really broken
+ but changed to use full 64-bit opcodes).
+
2006-04-26 Dick Porter <dick@ximian.com>
* sockets.c (WSAIoctl): Check the output buffer is valid before
View
78 mono/io-layer/atomic.h
@@ -286,12 +286,8 @@ InterlockedCompareExchange(volatile gint32 *dest,
gint32 old;
__asm__ __volatile__ ("\tLA\t1,%0\n"
- "0:\tL\t%1,%0\n"
- "\tCR\t%1,%3\n"
- "\tJNE\t1f\n"
+ "\tLR\t%1,%3\n"
"\tCS\t%1,%2,0(1)\n"
- "\tJNZ\t0b\n"
- "1:\n"
: "+m" (*dest), "=r" (old)
: "r" (exch), "r" (comp)
: "1", "cc");
@@ -306,12 +302,8 @@ InterlockedCompareExchangePointer(volatile gpointer *dest,
gpointer old;
__asm__ __volatile__ ("\tLA\t1,%0\n"
- "0:\tL\t%1,%0\n"
- "\tCR\t%1,%3\n"
- "\tJNE\t1f\n"
+ "\tLR\t%1,%3\n"
"\tCS\t%1,%2,0(1)\n"
- "\tJNZ\t0b\n"
- "1:\n"
: "+m" (*dest), "=r" (old)
: "r" (exch), "r" (comp)
: "1", "cc");
@@ -326,12 +318,8 @@ InterlockedCompareExchangePointer(volatile gpointer *dest,
gpointer old;
__asm__ __volatile__ ("\tLA\t1,%0\n"
- "0:\tLG\t%1,%0\n"
- "\tCGR\t%1,%3\n"
- "\tJNE\t1f\n"
+ "\tLGR\t%1,%3\n"
"\tCSG\t%1,%2,0(1)\n"
- "\tJNZ\t0b\n"
- "1:\n"
: "+m" (*dest), "=r" (old)
: "r" (exch), "r" (comp)
: "1", "cc");
@@ -340,7 +328,7 @@ InterlockedCompareExchangePointer(volatile gpointer *dest,
}
# endif
-
+# ifndef __s390x__
static inline gint32
InterlockedIncrement(volatile gint32 *val)
{
@@ -358,7 +346,27 @@ InterlockedIncrement(volatile gint32 *val)
return(tmp);
}
+# else
+static inline gint32
+InterlockedIncrement(volatile gint32 *val)
+{
+ gint32 tmp;
+
+ __asm__ __volatile__ ("\tLA\t2,%1\n"
+ "0:\tLGF\t%0,%1\n"
+ "\tLGFR\t1,%0\n"
+ "\tAGHI\t1,1\n"
+ "\tCS\t%0,1,0(2)\n"
+ "\tJNZ\t0b\n"
+ "\tLGFR\t%0,1"
+ : "=r" (tmp), "+m" (*val)
+ : : "1", "2", "cc");
+
+ return(tmp);
+}
+# endif
+# ifndef __s390x__
static inline gint32
InterlockedDecrement(volatile gint32 *val)
{
@@ -376,7 +384,25 @@ InterlockedDecrement(volatile gint32 *val)
return(tmp);
}
+# else
+static inline gint32
+InterlockedDecrement(volatile gint32 *val)
+{
+ gint32 tmp;
+
+ __asm__ __volatile__ ("\tLA\t2,%1\n"
+ "0:\tLGF\t%0,%1\n"
+ "\tLGFR\t1,%0\n"
+ "\tAGHI\t1,-1\n"
+ "\tCS\t%0,1,0(2)\n"
+ "\tJNZ\t0b\n"
+ "\tLGFR\t%0,1"
+ : "=r" (tmp), "+m" (*val)
+ : : "1", "2", "cc");
+ return(tmp);
+}
+# endif
static inline gint32
InterlockedExchange(volatile gint32 *val, gint32 new_val)
@@ -428,6 +454,7 @@ InterlockedExchangePointer(volatile gpointer *val, gpointer new_val)
}
# endif
+# ifndef __s390x__
static inline gint32
InterlockedExchangeAdd(volatile gint32 *val, gint32 add)
{
@@ -445,6 +472,25 @@ InterlockedExchangeAdd(volatile gint32 *val, gint32 add)
return(ret);
}
+# else
+static inline gint32
+InterlockedExchangeAdd(volatile gint32 *val, gint32 add)
+{
+ gint32 ret;
+
+ __asm__ __volatile__ ("\tLA\t2,%1\n"
+ "0:\tLGF\t%0,%1\n"
+ "\tLGFR\t1,%0\n"
+ "\tAGR\t1,%2\n"
+ "\tCS\t%0,1,0(2)\n"
+ "\tJNZ\t0b"
+ : "=r" (ret), "+m" (*val)
+ : "r" (add)
+ : "1", "2", "cc");
+
+ return(ret);
+}
+# endif
#elif defined(__ppc__) || defined (__powerpc__)
#define WAPI_ATOMIC_ASM
View
10 mono/mini/ChangeLog
@@ -1,3 +1,13 @@
+2006-06-09 Neale Ferguson <neale@sinenomine.net>
+
+ * mini-exceptions.c (ves_icall_get_frame_info): Fix this function on s390/s390x.
+ * mono/io-layer/atomic.h: Fix atomic operations for s390x (not really broken
+ but changed to use full 64-bit opcodes).
+ * mono/mini/mini-s390x.c: Correct ATOMIC operations (incorrect register for CS
+ instruction).
+ * mono/mini/mini-s390x.h: Simplify MCONTEXT_GET_BP.
+ * mono/mini/cpu-s390x.md: Fix max. length values for a couple of instructions.
+
2006-05-10 Zoltan Varga <vargaz@gmail.com>
* mini-x86.c (mono_arch_instrument_epilog): Fix handling of
View
2 mono/mini/cpu-s390.md
@@ -152,7 +152,7 @@ conv.r.un: dest:f src1:i len:30
conv.r4: dest:f src1:i len:4
conv.r8: dest:f src1:i len:4
conv.u1: dest:i src1:i len:8
-conv.u2: dest:i src1:i len:14
+conv.u2: dest:i src1:i len:16
conv.u4: dest:i src1:i
conv.u8:
conv.u: dest:i src1:i len:4
View
10 mono/mini/cpu-s390x.md
@@ -60,12 +60,12 @@ and_imm: dest:i src1:i len:24
aot_const: dest:i len:8
arg:
arglist:
-atomic_add_i4: src1:b src2:i dest:i len:20
+atomic_add_i4: src1:b src2:i dest:i len:28
atomic_add_i8: src1:b src2:i dest:i len:30
-atomic_add_new_i4: src1:b src2:i dest:i len:20
+atomic_add_new_i4: src1:b src2:i dest:i len:28
atomic_add_new_i8: src1:b src2:i dest:i len:30
-atomic_exchange_i4: src1:b src2:i dest:i len:14
-atomic_exchange_i8: src1:b src2:i dest:i len:20
+atomic_exchange_i4: src1:b src2:i dest:i len:18
+atomic_exchange_i8: src1:b src2:i dest:i len:24
beq.s:
beq: len:8
bge.s:
@@ -269,7 +269,7 @@ int_div_imm: dest:a src1:i len:24
int_div_un: dest:a src1:i src2:i len:16
int_div_un_imm: dest:a src1:i len:24
int_mul: dest:i src1:i src2:i len:16
-int_mul_imm: dest:i src1:i len:20
+int_mul_imm: dest:i src1:i len:24
int_mul_ovf: dest:i src1:i src2:i len:44
int_mul_ovf_un: dest:i src1:i src2:i len:22
int_neg: dest:i src1:i len:12
View
11 mono/mini/mini-exceptions.c
@@ -361,9 +361,20 @@ ves_icall_get_frame_info (gint32 skip, MonoBoolean need_file_info,
mono_arch_flush_register_windows ();
+#ifdef MONO_INIT_CONTEXT_FROM_CURRENT
+ MONO_INIT_CONTEXT_FROM_CURRENT (&ctx);
+#else
MONO_INIT_CONTEXT_FROM_FUNC (&ctx, ves_icall_get_frame_info);
+#endif
+ /*
+ * FIXME: This is needed because of the LMF stuff which doesn't exist on ia64.
+ * Probably the whole mono_find_jit_info () stuff needs to be fixed so this isn't
+ * needed even on other platforms. This is also true for s390/s390x.
+ */
+#if !defined(__ia64__) && !defined(__s390__) && !defined(__s390x__)
skip++;
+#endif
do {
ji = mono_find_jit_info (domain, jit_tls, &rji, NULL, &ctx, &new_ctx, NULL, &lmf, native_offset, NULL);
View
57 mono/mini/mini-s390.c
@@ -239,7 +239,6 @@ typedef struct {
/* P r o t o t y p e s */
/*------------------------------------------------------------------*/
-static guint8 * emit_memcpy (guint8 *, int, int, int, int, int);
static void indent (int);
static guint8 * backUpStackPtr(MonoCompile *, guint8 *, gint);
static void decodeParm (MonoType *, void *, int);
@@ -342,56 +341,6 @@ mono_arch_fregname (int reg) {
/*------------------------------------------------------------------*/
/* */
-/* Name - emit_memcpy */
-/* */
-/* Function - Emit code to move from memory-to-memory based on */
-/* the size of the variable. r0 is overwritten. */
-/* */
-/*------------------------------------------------------------------*/
-
-static guint8 *
-emit_memcpy (guint8 *code, int size, int dreg, int doffset, int sreg, int soffset)
-{
- switch (size) {
- case 4 :
- s390_l (code, s390_r0, 0, sreg, soffset);
- s390_st (code, s390_r0, 0, dreg, doffset);
- break;
-
- case 3 :
- s390_icm (code, s390_r0, 14, sreg, soffset);
- s390_stcm (code, s390_r0, 14, dreg, doffset);
- break;
-
- case 2 :
- s390_lh (code, s390_r0, 0, sreg, soffset);
- s390_sth (code, s390_r0, 0, dreg, doffset);
- break;
-
- case 1 :
- s390_ic (code, s390_r0, 0, sreg, soffset);
- s390_stc (code, s390_r0, 0, dreg, doffset);
- break;
-
- default :
- while (size > 0) {
- int len;
-
- if (size > 256)
- len = 256;
- else
- len = size;
- s390_mvc (code, len, dreg, doffset, sreg, soffset);
- size -= len;
- }
- }
- return code;
-}
-
-/*========================= End of Function ========================*/
-
-/*------------------------------------------------------------------*/
-/* */
/* Name - arch_get_argument_info */
/* */
/* Function - Gathers information on parameters such as size, */
@@ -2735,10 +2684,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
}
}
break;
- case OP_X86_TEST_NULL: {
- s390_ltr (code, ins->sreg1, ins->sreg1);
- }
- break;
case CEE_BREAK: {
mono_add_patch_info (cfg, offset, MONO_PATCH_INFO_ABS, mono_arch_break);
s390_brasl (code, s390_r14, 0);
@@ -3984,7 +3929,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
s390_lr (code, s390_r1, ins->sreg2);
s390_l (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
s390_a (code, s390_r1, 0, ins->inst_basereg, ins->inst_offset);
- s390_cs (code, s390_r0, s390_r0, ins->inst_basereg, ins->inst_offset);
+ s390_cs (code, s390_r0, s390_r1, ins->inst_basereg, ins->inst_offset);
s390_jnz (code, -7);
s390_lr (code, ins->dreg, s390_r1);
}
View
2 mono/mini/mini-s390.h
@@ -254,7 +254,7 @@ typedef struct
#define MONO_INIT_CONTEXT_FROM_FUNC(ctx,func) do { \
MonoS390StackFrame *sframe; \
- __asm__ volatile("l %0,0(15)" : "=r" (sframe)); \
+ __asm__ volatile("lr %0,15" : "=r" (sframe)); \
MONO_CONTEXT_SET_BP ((ctx), sframe->prev); \
sframe = (MonoS390StackFrame*)sframe->prev; \
MONO_CONTEXT_SET_IP ((ctx), sframe->return_address); \
View
38 mono/mini/mini-s390x.c
@@ -599,7 +599,7 @@ decodeParm(MonoType *type, void *curParm, int size)
printf("%p [%p] ",obj,curParm);
if (class == mono_defaults.string_class) {
printf("[STRING:%p:%s]",
- *obj, mono_string_to_utf8 (obj));
+ obj, mono_string_to_utf8 (obj));
} else if (class == mono_defaults.int32_class) {
printf("[INT32:%p:%d]",
obj, *(gint32 *)((char *)obj + sizeof (MonoObject)));
@@ -4111,18 +4111,18 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
case OP_ATOMIC_ADD_I8: {
s390_lgr (code, s390_r1, ins->sreg2);
s390_lg (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
- s390_ag (code, s390_r1, 0, ins->inst_basereg, ins->inst_offset);
- s390_csg (code, s390_r0, s390_r0, ins->inst_basereg, ins->inst_offset);
- s390_jnz (code, -11);
+ s390_agr (code, s390_r1, s390_r0);
+ s390_csg (code, s390_r0, s390_r1, ins->inst_basereg, ins->inst_offset);
+ s390_jnz (code, -10);
s390_lgr (code, ins->dreg, s390_r1);
}
break;
case OP_ATOMIC_ADD_NEW_I8: {
s390_lgr (code, s390_r1, ins->sreg2);
s390_lg (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
- s390_ag (code, s390_r1, 0, ins->inst_basereg, ins->inst_offset);
+ s390_agr (code, s390_r1, s390_r0);
s390_csg (code, s390_r0, s390_r1, ins->inst_basereg, ins->inst_offset);
- s390_jnz (code, -11);
+ s390_jnz (code, -10);
s390_lgr (code, ins->dreg, s390_r1);
}
break;
@@ -4134,28 +4134,28 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
}
break;
case OP_ATOMIC_ADD_I4: {
- s390_lr (code, s390_r1, ins->sreg2);
- s390_l (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
- s390_a (code, s390_r1, 0, ins->inst_basereg, ins->inst_offset);
- s390_cs (code, s390_r0, s390_r0, ins->inst_basereg, ins->inst_offset);
- s390_jnz (code, -7);
- s390_lr (code, ins->dreg, s390_r1);
+ s390_lgfr(code, s390_r1, ins->sreg2);
+ s390_lgf (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
+ s390_agr (code, s390_r1, s390_r0);
+ s390_cs (code, s390_r0, s390_r1, ins->inst_basereg, ins->inst_offset);
+ s390_jnz (code, -9);
+ s390_lgfr(code, ins->dreg, s390_r1);
}
break;
case OP_ATOMIC_ADD_NEW_I4: {
- s390_lr (code, s390_r1, ins->sreg2);
- s390_l (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
- s390_a (code, s390_r1, 0, ins->inst_basereg, ins->inst_offset);
+ s390_lgfr(code, s390_r1, ins->sreg2);
+ s390_lgf (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
+ s390_agr (code, s390_r1, s390_r0);
s390_cs (code, s390_r0, s390_r1, ins->inst_basereg, ins->inst_offset);
- s390_jnz (code, -7);
- s390_lr (code, ins->dreg, s390_r1);
+ s390_jnz (code, -9);
+ s390_lgfr(code, ins->dreg, s390_r1);
}
break;
case OP_ATOMIC_EXCHANGE_I4: {
- s390_l (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
+ s390_lg (code, s390_r0, 0, ins->inst_basereg, ins->inst_offset);
s390_cs (code, s390_r0, ins->sreg2, ins->inst_basereg, ins->inst_offset);
s390_jnz (code, -4);
- s390_lr (code, ins->dreg, s390_r0);
+ s390_lgfr(code, ins->dreg, s390_r0);
}
break;
case OP_S390_BKCHAIN: {
View
2 mono/mini/mini-s390x.h
@@ -265,7 +265,7 @@ typedef struct
#define MONO_INIT_CONTEXT_FROM_FUNC(ctx,func) do { \
MonoS390StackFrame *sframe; \
- __asm__ volatile("lg %0,0(15)" : "=r" (sframe)); \
+ __asm__ volatile("lgr %0,15" : "=r" (sframe)); \
MONO_CONTEXT_SET_BP ((ctx), sframe->prev); \
sframe = (MonoS390StackFrame*)sframe->prev; \
MONO_CONTEXT_SET_IP ((ctx), sframe->return_address); \
View
5 mono/utils/ChangeLog
@@ -1,3 +1,8 @@
+2006-08-10 Zoltan Varga <vargaz@gmail.com>
+
+ * mono-compiler.h: Fix TLS definitions so libmono can be loaded dynamically as a
+ module. Fixes #78767.
+
2006-01-04 Zoltan Varga <vargaz@gmail.com>
* mono-codeman.c (new_codechunk): Fix warnings.
View
24 mono/utils/mono-compiler.h
@@ -9,12 +9,26 @@
#ifdef HAVE_KW_THREAD
#if HAVE_TLS_MODEL_ATTR
+/*
+ * Define this if you want a faster libmono, which cannot be loaded dynamically as a
+ * module.
+ */
+//#define PIC_INITIAL_EXEC
+
#if defined (__powerpc__)
#define MONO_TLS_FAST
#elif defined(PIC)
+
+#ifdef PIC_INITIAL_EXEC
#define MONO_TLS_FAST __attribute__((tls_model("initial-exec")))
#else
+#define MONO_TLS_FAST __attribute__((tls_model("local-dynamic")))
+#endif
+
+#else
+
#define MONO_TLS_FAST __attribute__((tls_model("local-exec")))
+
#endif
#else
@@ -29,6 +43,7 @@
#endif
#elif defined(__x86_64__)
#if defined(PIC)
+// This only works if libmono is linked into the application
#define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo; __asm ("movq " #var "@GOTTPOFF(%%rip), %0" : "=r" (foo)); offset = foo; } while (0)
#else
#define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo; __asm ("movq $" #var "@TPOFF, %0" : "=r" (foo)); offset = foo; } while (0)
@@ -39,6 +54,15 @@
#define MONO_THREAD_VAR_OFFSET(var,offset) (offset) = -1
#endif
+#if defined(PIC) && !defined(PIC_INITIAL_EXEC)
+/*
+ * The above definitions do not seem to work if libmono is loaded dynamically as a module.
+ * See bug #78767.
+ */
+#undef MONO_THREAD_VAR_OFFSET
+#define MONO_THREAD_VAR_OFFSET(var,offset) (offset) = -1
+#endif
+
#else /* no HAVE_KW_THREAD */
#define MONO_THREAD_VAR_OFFSET(var,offset) (offset) = -1
View
4 scripts/mono-find-provides.in
@@ -12,10 +12,6 @@ IFS=$'\n'
filelist=($(grep -Ev '/usr/doc/|/usr/share/doc/'))
monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
-# Only include files with /gac/ in path
-# (Allows packages to contain private assemblies that don't conflict with other packages)
-monolist=($(printf "%s\n" "${monolist[@]}" | egrep "/gac/"))
-
a=`which "$0"`
d=`dirname "$a"`
View
2 scripts/mono-find-requires.in
@@ -80,7 +80,7 @@ UNIQ=$(echo "$PROVIDES
$REQUIRES" | sort | uniq -u)
#
-# Of those, only choose the ones that are in REQUIRES
+# Of those, only chose the ones that are in REQUIRES
#
echo "$UNIQ
$REQUIRES" | sort | uniq -d

0 comments on commit 882a1b2

Please sign in to comment.
Something went wrong with that request. Please try again.