Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWade Berrier <wade@mono-cvs.ximian.com>2006-10-05 23:28:16 +0400
committerWade Berrier <wade@mono-cvs.ximian.com>2006-10-05 23:28:16 +0400
commit882a1b2ddcf65ff3d888411e2712f400617b7f30 (patch)
tree8fb03ba03c4d54d9b79d7d3161253da9f1af129a
parentd08b6f1e9cda542f2580fa3670408371bf3865a8 (diff)
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
-rw-r--r--ChangeLog7
-rw-r--r--mono/io-layer/ChangeLog11
-rw-r--r--mono/io-layer/atomic.h78
-rw-r--r--mono/mini/ChangeLog10
-rw-r--r--mono/mini/cpu-s390.md2
-rw-r--r--mono/mini/cpu-s390x.md10
-rw-r--r--mono/mini/mini-exceptions.c11
-rw-r--r--mono/mini/mini-s390.c57
-rw-r--r--mono/mini/mini-s390.h2
-rw-r--r--mono/mini/mini-s390x.c38
-rw-r--r--mono/mini/mini-s390x.h2
-rw-r--r--mono/utils/ChangeLog5
-rw-r--r--mono/utils/mono-compiler.h24
-rw-r--r--scripts/mono-find-provides.in4
-rw-r--r--scripts/mono-find-requires.in2
15 files changed, 159 insertions, 104 deletions
diff --git a/ChangeLog b/ChangeLog
index ca2b391d754..9ea426b8e38 100644
--- a/ChangeLog
+++ b/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.
diff --git a/mono/io-layer/ChangeLog b/mono/io-layer/ChangeLog
index 4e767b613b0..fe8a7e2a768 100644
--- a/mono/io-layer/ChangeLog
+++ b/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
diff --git a/mono/io-layer/atomic.h b/mono/io-layer/atomic.h
index 72067efd306..a03ff433a22 100644
--- a/mono/io-layer/atomic.h
+++ b/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
diff --git a/mono/mini/ChangeLog b/mono/mini/ChangeLog
index d04f0f7d43a..808f01d57c5 100644
--- a/mono/mini/ChangeLog
+++ b/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
diff --git a/mono/mini/cpu-s390.md b/mono/mini/cpu-s390.md
index add887b0786..7834c03fb2e 100644
--- a/mono/mini/cpu-s390.md
+++ b/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
diff --git a/mono/mini/cpu-s390x.md b/mono/mini/cpu-s390x.md
index 2fb2dcb2ce5..fe5d7f3f25e 100644
--- a/mono/mini/cpu-s390x.md
+++ b/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
diff --git a/mono/mini/mini-exceptions.c b/mono/mini/mini-exceptions.c
index 5e381ba01fd..1cb1399cee5 100644
--- a/mono/mini/mini-exceptions.c
+++ b/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);
diff --git a/mono/mini/mini-s390.c b/mono/mini/mini-s390.c
index f19dab98024..5b2ca89330c 100644
--- a/mono/mini/mini-s390.c
+++ b/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);
}
diff --git a/mono/mini/mini-s390.h b/mono/mini/mini-s390.h
index cc29d1d508a..69e9a571986 100644
--- a/mono/mini/mini-s390.h
+++ b/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); \
diff --git a/mono/mini/mini-s390x.c b/mono/mini/mini-s390x.c
index fbf1fd92d18..651ee2f210e 100644
--- a/mono/mini/mini-s390x.c
+++ b/mono/mini/mini-s390x.c
@@ -599,7 +599,7 @@ enum_parmtype:
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: {
diff --git a/mono/mini/mini-s390x.h b/mono/mini/mini-s390x.h
index 885e4d69c28..1e592ac93a4 100644
--- a/mono/mini/mini-s390x.h
+++ b/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); \
diff --git a/mono/utils/ChangeLog b/mono/utils/ChangeLog
index 194c8073af1..d889719fa9a 100644
--- a/mono/utils/ChangeLog
+++ b/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.
diff --git a/mono/utils/mono-compiler.h b/mono/utils/mono-compiler.h
index 6d435e6f3c0..9d5133bbf0b 100644
--- a/mono/utils/mono-compiler.h
+++ b/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
diff --git a/scripts/mono-find-provides.in b/scripts/mono-find-provides.in
index ff649639f47..ba46722ae67 100644
--- a/scripts/mono-find-provides.in
+++ b/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"`
diff --git a/scripts/mono-find-requires.in b/scripts/mono-find-requires.in
index a721f23997f..446d9fcfd2d 100644
--- a/scripts/mono-find-requires.in
+++ b/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