]> git.pld-linux.org Git - packages/mono.git/blame - mono-x32.patch
- updated to 3.12.1 (fixes SKIP TLS and FREAK vulnerabilities)
[packages/mono.git] / mono-x32.patch
CommitLineData
29187690
JR
1diff -ur mono-3.12.0/libgc/include/private/gc_locks.h mono-3.12.0-x32/libgc/include/private/gc_locks.h
2--- mono-3.12.0/libgc/include/private/gc_locks.h 2014-10-30 23:11:01.000000000 +0100
3+++ mono-3.12.0-x32/libgc/include/private/gc_locks.h 2015-03-13 19:53:30.391221738 +0100
4@@ -437,7 +437,7 @@
5 GC_word new_val)
6 {
7 char result;
8- __asm__ __volatile__("lock; cmpxchgq %2, %0; setz %1"
9+ __asm__ __volatile__("lock; cmpxchg %2, %0; setz %1"
10 : "+m"(*(addr)), "=r"(result)
11 : "r" (new_val), "a"(old) : "memory");
12 return (GC_bool) result;
fee77e60
JB
13--- mono-3.12.1/mono/metadata/decimal.c.orig 2015-03-06 18:26:50.000000000 +0100
14+++ mono-3.12.1/mono/metadata/decimal.c 2015-03-14 07:46:21.958919177 +0100
15@@ -555,12 +555,15 @@
16 #if defined(__native_client__) && (defined(__i386__) || defined(__x86_64))
17 #define USE_X86_32BIT_INSTRUCTIONS 1
18 #endif
19+#if defined(__x86_64) && defined(__ILP32__)
20+#define ARCH_x32
21+#endif
22
23 static inline gint
24 my_g_bit_nth_msf (gsize mask)
25 {
26 /* Mask is expected to be != 0 */
27-#if (defined(__i386__) && defined(__GNUC__)) || defined(USE_X86_32BIT_INSTRUCTIONS)
28+#if (defined(__i386__) && defined(__GNUC__)) || defined(USE_X86_32BIT_INSTRUCTIONS) || defined(ARCH_x32)
29 int r;
29187690 30
fee77e60
JB
31 __asm__("bsrl %1,%0\n\t"
32--- mono-3.12.1/mono/metadata/sgen-cardtable.c.orig 2015-03-06 18:26:50.000000000 +0100
33+++ mono-3.12.1/mono/metadata/sgen-cardtable.c 2015-03-14 08:06:01.178869685 +0100
34@@ -504,7 +504,7 @@ static inline int
35 find_card_offset (mword card)
36 {
29187690 37 /*XXX Use assembly as this generates some pretty bad code */
fee77e60
JB
38-#if defined(__i386__) && defined(__GNUC__)
39+#if (defined(__i386__) || (defined(__x86_64__) && defined(__ILP32__))) && defined(__GNUC__)
29187690 40 return (__builtin_ffs (card) - 1) / 8;
fee77e60 41 #elif defined(__x86_64__) && defined(__GNUC__)
29187690 42 return (__builtin_ffsll (card) - 1) / 8;
fee77e60
JB
43--- mono-3.12.1/mono/metadata/sgen-marksweep.c.orig 2015-03-06 18:26:50.000000000 +0100
44+++ mono-3.12.1/mono/metadata/sgen-marksweep.c 2015-03-14 08:14:18.488848812 +0100
45@@ -1748,7 +1748,7 @@ initial_skip_card (guint8 *card_data)
46 if (i == CARD_WORDS_PER_BLOCK)
47 return card_data + CARDS_PER_BLOCK;
29187690 48
fee77e60
JB
49-#if defined(__i386__) && defined(__GNUC__)
50+#if (defined(__i386__) || (defined(__x86_64__) && (defined(__ILP32__))) && defined(__GNUC__)
29187690 51 return card_data + i * 4 + (__builtin_ffs (card) - 1) / 8;
fee77e60 52 #elif defined(__x86_64__) && defined(__GNUC__)
29187690 53 return card_data + i * 8 + (__builtin_ffsll (card) - 1) / 8;
29187690
JR
54diff -ur mono-3.12.0/mono/mini/mini-codegen.c mono-3.12.0-x32-2/mono/mini/mini-codegen.c
55--- mono-3.12.0/mono/mini/mini-codegen.c 2015-01-12 18:15:08.000000000 +0100
56+++ mono-3.12.0-x32-2/mono/mini/mini-codegen.c 2015-03-13 20:24:21.044619503 +0100
57@@ -164,7 +164,7 @@
58 {
59 regmask_t mask = allow & rs->ifree_mask;
60
61-#if defined(__x86_64__) && defined(__GNUC__)
62+#if defined(__x86_64__) && defined(__GNUC__) && !defined(__ILP32__)
63 {
64 guint64 i;
65
29187690
JR
66diff -ur mono-3.12.0/mono/mini/regalloc.h mono-3.12.0-x32-2/mono/mini/regalloc.h
67--- mono-3.12.0/mono/mini/regalloc.h 2014-10-30 23:11:02.000000000 +0100
68+++ mono-3.12.0-x32-2/mono/mini/regalloc.h 2015-03-13 20:23:14.031283837 +0100
69@@ -1,4 +1,4 @@
70-#if defined(__native_client__) && defined(__x86_64__)
71+#if defined(__native_client__) && defined(__x86_64__) && !defined(__ILP32__)
72 typedef guint64 regmask_t;
73 #else
74 typedef size_t regmask_t;
fee77e60
JB
75--- mono-3.12.1/mono/utils/monobitset.c.orig 2015-03-14 08:21:15.042164662 +0100
76+++ mono-3.12.1/mono/utils/monobitset.c 2015-03-14 08:21:19.602164473 +0100
77@@ -280,8 +280,11 @@ my_g_bit_nth_lsf (gsize mask, gint nth_b
78 #if defined(__native_client__) && (defined(__i386__) || defined(__x86_64))
79 #define USE_X86_32BIT_INSTRUCTIONS 1
80 #endif
81+#if defined(__x86_64) && defined(__ILP32__)
82+#define ARCH_x32
83+#endif
84
85-#if (defined(__i386__) && defined(__GNUC__)) || defined(USE_X86_32BIT_INSTRUCTIONS)
86+#if (defined(__i386__) && defined(__GNUC__)) || defined(USE_X86_32BIT_INSTRUCTIONS) || defined(ARCH_x32)
29187690 87 {
fee77e60
JB
88 int r;
89 /* This depends on mask != 0 */
90@@ -311,7 +314,7 @@ static inline gint
91 my_g_bit_nth_lsf_nomask (gsize mask)
92 {
93 /* Mask is expected to be != 0 */
94-#if (defined(__i386__) && defined(__GNUC__)) || defined(USE_X86_32BIT_INSTRUCTIONS)
95+#if (defined(__i386__) && defined(__GNUC__)) || defined(USE_X86_32BIT_INSTRUCTIONS) || defined(ARCH_x32)
96 int r;
29187690 97
29187690 98 __asm__("bsfl %1,%0\n\t"
fee77e60
JB
99--- mono-3.12.1/mono/profiler/proflog.c.orig 2015-03-06 18:26:50.000000000 +0100
100+++ mono-3.12.1/mono/profiler/proflog.c 2015-03-14 08:45:51.238769378 +0100
101@@ -1783,8 +1783,14 @@ perf_event_syscall (struct perf_event_at
102 {
103 attr->size = PERF_ATTR_SIZE_VER0;
104 //printf ("perf attr size: %d\n", attr->size);
105+#if defined(__NR_perf_event_open)
106+ return syscall(__NR_perf_event_open, attr, pid, cpu, group_fd, flags);
107 #if defined(__x86_64__)
108+# if defined(__ILP32__)
109+ return syscall(/*__NR_perf_event_open*/ 0x40000000+298, attr, pid, cpu, group_fd, flags);
110+# else
111 return syscall(/*__NR_perf_event_open*/ 298, attr, pid, cpu, group_fd, flags);
112+# endif
113 #elif defined(__i386__)
114 return syscall(/*__NR_perf_event_open*/ 336, attr, pid, cpu, group_fd, flags);
115 #elif defined(__arm__)
116========
117TODO:
118mono/metadata/mono-config.c (CPU config)
119mono/utils/mono-compiler.h (MONO_THREAD_VAR_OFFSET - needs x32 ABI knowledge)
120mono/utils/mono-context.g (MONO_CONTEXT_*)
121mono/utils/valgrind.h
122mono/mini/*-x86.* vs mono/mini/*-amd64.* ???
123mono/arch/x86 vs mono/arch/amd64 ???
This page took 0.084132 seconds and 4 git commands to generate.