1 # HG changeset patch |
|
2 # Parent f6996f95c7f8007fd7bf759092488ead6843441a |
|
3 Bug 587188 - Failed to build firefox from trunk on PPC (fixed m-c) |
|
4 |
|
5 diff --git a/ipc/chromium/Makefile.in b/ipc/chromium/Makefile.in |
|
6 --- a/ipc/chromium/Makefile.in |
|
7 +++ b/ipc/chromium/Makefile.in |
|
8 @@ -241,17 +241,16 @@ CPPSRCS += \ |
|
9 |
|
10 endif # } OS_MACOSX |
|
11 |
|
12 ifdef OS_LINUX # { |
|
13 |
|
14 CPPSRCS += \ |
|
15 atomicops_internals_x86_gcc.cc \ |
|
16 base_paths_linux.cc \ |
|
17 - data_pack.cc \ |
|
18 file_util_linux.cc \ |
|
19 file_version_info_linux.cc \ |
|
20 idle_timer_none.cc \ |
|
21 process_util_linux.cc \ |
|
22 time_posix.cc \ |
|
23 $(NULL) |
|
24 |
|
25 ifdef MOZ_ENABLE_GTK2 |
|
26 diff --git a/ipc/chromium/src/base/atomicops.h b/ipc/chromium/src/base/atomicops.h |
|
27 --- a/ipc/chromium/src/base/atomicops.h |
|
28 +++ b/ipc/chromium/src/base/atomicops.h |
|
29 @@ -127,13 +127,15 @@ Atomic64 Release_Load(volatile const Ato |
|
30 #if defined(OS_WIN) && defined(COMPILER_MSVC) && defined(ARCH_CPU_X86_FAMILY) |
|
31 #include "base/atomicops_internals_x86_msvc.h" |
|
32 #elif defined(OS_MACOSX) && defined(ARCH_CPU_X86_FAMILY) |
|
33 #include "base/atomicops_internals_x86_macosx.h" |
|
34 #elif defined(COMPILER_GCC) && defined(ARCH_CPU_X86_FAMILY) |
|
35 #include "base/atomicops_internals_x86_gcc.h" |
|
36 #elif defined(COMPILER_GCC) && defined(ARCH_CPU_ARM_FAMILY) |
|
37 #include "base/atomicops_internals_arm_gcc.h" |
|
38 +//#elif defined(COMPILER_GCC) && defined(ARCH_CPU_PPC_FAMILY) |
|
39 +//#include "base/atomicops_internals_ppc_gcc.h" |
|
40 #else |
|
41 #include "base/atomicops_internals_mutex.h" |
|
42 #endif |
|
43 |
|
44 #endif // BASE_ATOMICOPS_H_ |
|
45 diff --git a/ipc/chromium/src/base/atomicops_internals_ppc_gcc.h b/ipc/chromium/src/base/atomicops_internals_ppc_gcc.h |
|
46 new file mode 100644 |
|
47 --- /dev/null |
|
48 +++ b/ipc/chromium/src/base/atomicops_internals_ppc_gcc.h |
|
49 @@ -0,0 +1,148 @@ |
|
50 +// Copyright (c) 2010 JJDaNiMoTh <jjdanimoth@gmail.com>. All rights reserved. |
|
51 +// Use of this source code is governed by a BSD-style license that can be |
|
52 +// found in the LICENSE file. |
|
53 + |
|
54 +// This file is an internal atomic implementation, use base/atomicops.h instead. |
|
55 + |
|
56 +#ifndef BASE_ATOMICOPS_INTERNALS_PPC_GCC_H_ |
|
57 +#define BASE_ATOMICOPS_INTERNALS_PPC_GCC_H_ |
|
58 +#define ATOMICOPS_COMPILER_BARRIER() __asm__ __volatile__("" : : : "memory") |
|
59 + |
|
60 +#define PPC_ACQUIRE_BARRIER "\nisync\n" |
|
61 +#define PPC_RELEASE_BARRIER "\nlwsync\n" |
|
62 + |
|
63 +namespace base { |
|
64 +namespace subtle { |
|
65 + |
|
66 +// 32-bit low-level operations on any platform. |
|
67 + |
|
68 +/* |
|
69 + * Compare and exchange - if *ptr == old, set it to new, |
|
70 + * and return the old value of *p. |
|
71 + */ |
|
72 +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, |
|
73 + Atomic32 old_value, |
|
74 + Atomic32 new_value) { |
|
75 + Atomic32 prev; |
|
76 + |
|
77 + __asm__ __volatile__ ( |
|
78 + "1: lwarx %0,0,%2\n" |
|
79 + "cmpw 0,%0,%3\n" |
|
80 + "bne- 2f\n" |
|
81 + "stwcx. %4,0,%2\n" |
|
82 + "bne- 1b\n" |
|
83 + "2:\n" |
|
84 + : "=&r" (prev), "+m" (*ptr) |
|
85 + : "r" (ptr), "r" (old_value), "r" (new_value) |
|
86 + : "cc", "memory"); |
|
87 + |
|
88 + return prev; |
|
89 +} |
|
90 + |
|
91 +/* |
|
92 +* Atomic exchange |
|
93 +* |
|
94 +* Changes the memory location '*ptr' to be new_value and returns |
|
95 +* the previous value stored there. |
|
96 +*/ |
|
97 +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, |
|
98 + Atomic32 new_value) { |
|
99 + Atomic32 prev; |
|
100 + |
|
101 + __asm__ __volatile__( |
|
102 +"1: lwarx %0,0,%2 \n" |
|
103 +" stwcx. %3,0,%2 \n\ |
|
104 + bne- 1b" |
|
105 + : "=&r" (prev), "+m" (*ptr) |
|
106 + : "r" (ptr), "r" (new_value) |
|
107 + : "cc", "memory"); |
|
108 + |
|
109 + return prev; |
|
110 +} |
|
111 + |
|
112 +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, |
|
113 + Atomic32 increment) { |
|
114 + Atomic32 temp; |
|
115 + |
|
116 + __asm__ __volatile__( |
|
117 +"1: lwarx %0,0,%2\n\ |
|
118 + add %0,%1,%0\n" |
|
119 +" stwcx. %0,0,%2 \n\ |
|
120 + bne- 1b" |
|
121 + : "=&r" (temp) |
|
122 + : "r" (increment), "r" (ptr) |
|
123 + : "cc", "memory"); |
|
124 + |
|
125 + return temp; |
|
126 +} |
|
127 + |
|
128 +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, |
|
129 + Atomic32 increment) { |
|
130 + Atomic32 temp; |
|
131 + |
|
132 + __asm__ __volatile__( |
|
133 + PPC_RELEASE_BARRIER |
|
134 +"1: lwarx %0,0,%2\n\ |
|
135 + add %0,%1,%0\n" |
|
136 +" stwcx. %0,0,%2 \n\ |
|
137 + bne- 1b" |
|
138 + PPC_ACQUIRE_BARRIER |
|
139 + : "=&r" (temp) |
|
140 + : "r" (increment), "r" (ptr) |
|
141 + : "cc", "memory"); |
|
142 + |
|
143 + return temp; |
|
144 +} |
|
145 + |
|
146 +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, |
|
147 + Atomic32 old_value, |
|
148 + Atomic32 new_value) { |
|
149 + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); |
|
150 +} |
|
151 + |
|
152 +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, |
|
153 + Atomic32 old_value, |
|
154 + Atomic32 new_value) { |
|
155 + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); |
|
156 +} |
|
157 + |
|
158 +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { |
|
159 + *ptr = value; |
|
160 +} |
|
161 + |
|
162 +inline void MemoryBarrier() { |
|
163 + __asm__ __volatile__("sync" : : : "memory"); |
|
164 +} |
|
165 + |
|
166 +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { |
|
167 + *ptr = value; |
|
168 + MemoryBarrier(); |
|
169 +} |
|
170 + |
|
171 +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { |
|
172 + MemoryBarrier(); |
|
173 + *ptr = value; |
|
174 +} |
|
175 + |
|
176 +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { |
|
177 + return *ptr; |
|
178 +} |
|
179 + |
|
180 +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { |
|
181 + Atomic32 value = *ptr; |
|
182 + MemoryBarrier(); |
|
183 + return value; |
|
184 + |
|
185 +} |
|
186 + |
|
187 +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { |
|
188 + MemoryBarrier(); |
|
189 + return *ptr; |
|
190 +} |
|
191 + |
|
192 +} // namespace base::subtle |
|
193 +} // namespace base |
|
194 + |
|
195 +#undef ATOMICOPS_COMPILER_BARRIER |
|
196 + |
|
197 +#endif // BASE_ATOMICOPS_INTERNALS_PPC_GCC_H_ |
|
198 diff --git a/ipc/chromium/src/build/build_config.h b/ipc/chromium/src/build/build_config.h |
|
199 --- a/ipc/chromium/src/build/build_config.h |
|
200 +++ b/ipc/chromium/src/build/build_config.h |
|
201 @@ -52,19 +52,20 @@ |
|
202 #define ARCH_CPU_X86_FAMILY 1 |
|
203 #define ARCH_CPU_X86 1 |
|
204 #define ARCH_CPU_32_BITS 1 |
|
205 #elif defined(__ARMEL__) |
|
206 #define ARCH_CPU_ARM_FAMILY 1 |
|
207 #define ARCH_CPU_ARMEL 1 |
|
208 #define ARCH_CPU_32_BITS 1 |
|
209 #define WCHAR_T_IS_UNSIGNED 1 |
|
210 -#elif defined(__ppc__) |
|
211 +#elif defined(__ppc__) || defined(__powerpc) || defined(__PPC__) |
|
212 #define ARCH_CPU_PPC 1 |
|
213 #define ARCH_CPU_32_BITS 1 |
|
214 +#define ARCH_CPU_PPC_FAMILY 1 |
|
215 #else |
|
216 #error Please add support for your architecture in build/build_config.h |
|
217 #endif |
|
218 |
|
219 // Type detection for wchar_t. |
|
220 #ifndef CHROMIUM_MOZILLA_BUILD |
|
221 |
|
222 #if defined(OS_WIN) |
|