mozilla-ppc-ipc.patch
changeset 270 785d28fc6d4d
child 271 0cb54f456d88
equal deleted inserted replaced
269:9ec311cdd7c8 270:785d28fc6d4d
       
     1 # HG changeset patch
       
     2 # Parent f6996f95c7f8007fd7bf759092488ead6843441a
       
     3 Bug 587188 - Failed to build firefox from trunk on PPC
       
     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)