Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(114)

Side by Side Diff: src/common/mac/arch_utilities.cc

Issue 1340543002: Fix Mac Breakpad host tools to build in Linux cross-compile (Closed) Base URL: https://chromium.googlesource.com/breakpad/breakpad.git@master
Patch Set: Move mac-headers to mac_headers Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, Google Inc. 1 // Copyright (c) 2012, Google Inc.
2 // All rights reserved. 2 // All rights reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // * Redistributions of source code must retain the above copyright 8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer. 9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above 10 // * Redistributions in binary form must reproduce the above
(...skipping 12 matching lines...) Expand all
23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 29
30 #include "common/mac/arch_utilities.h" 30 #include "common/mac/arch_utilities.h"
31 31
32 #include <mach-o/arch.h> 32 #include <mach-o/arch.h>
33 #include <mach-o/fat.h>
33 #include <stdio.h> 34 #include <stdio.h>
34 #include <string.h> 35 #include <string.h>
35 36
36 #ifndef CPU_TYPE_ARM
37 #define CPU_TYPE_ARM (static_cast<cpu_type_t>(12))
38 #endif // CPU_TYPE_ARM
39
40 #ifndef CPU_SUBTYPE_ARM_V7
41 #define CPU_SUBTYPE_ARM_V7 (static_cast<cpu_subtype_t>(9))
42 #endif // CPU_SUBTYPE_ARM_V7
43
44 #ifndef CPU_SUBTYPE_ARM_V7S 37 #ifndef CPU_SUBTYPE_ARM_V7S
45 #define CPU_SUBTYPE_ARM_V7S (static_cast<cpu_subtype_t>(11)) 38 #define CPU_SUBTYPE_ARM_V7S (static_cast<cpu_subtype_t>(11))
46 #endif // CPU_SUBTYPE_ARM_V7S 39 #endif // CPU_SUBTYPE_ARM_V7S
47 40
48 #ifndef CPU_TYPE_ARM64 41 #ifndef CPU_TYPE_ARM64
49 #define CPU_TYPE_ARM64 (static_cast<cpu_type_t>(16777228)) 42 #define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64)
50 #endif // CPU_TYPE_ARM64 43 #endif // CPU_TYPE_ARM64
51 44
52 #ifndef CPU_SUBTYPE_ARM64_ALL 45 #ifndef CPU_SUBTYPE_ARM64_ALL
53 #define CPU_SUBTYPE_ARM64_ALL (static_cast<cpu_type_t>(0)) 46 #define CPU_SUBTYPE_ARM64_ALL (static_cast<cpu_subtype_t>(0))
54 #endif // CPU_SUBTYPE_ARM64_ALL 47 #endif // CPU_SUBTYPE_ARM64_ALL
55 48
56 namespace { 49 namespace {
57 50
58 const NXArchInfo* ArchInfo_arm64() { 51 const NXArchInfo* ArchInfo_arm64() {
59 NXArchInfo* arm64 = new NXArchInfo; 52 NXArchInfo* arm64 = new NXArchInfo;
60 *arm64 = *NXGetArchInfoFromCpuType(CPU_TYPE_ARM, 53 *arm64 = *NXGetArchInfoFromCpuType(CPU_TYPE_ARM,
61 CPU_SUBTYPE_ARM_V7); 54 CPU_SUBTYPE_ARM_V7);
62 arm64->name = "arm64"; 55 arm64->name = "arm64";
63 arm64->cputype = CPU_TYPE_ARM64; 56 arm64->cputype = CPU_TYPE_ARM64;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 // TODO: Remove this when the OS knows about armv7s. 97 // TODO: Remove this when the OS knows about armv7s.
105 if (cpu_type == CPU_TYPE_ARM && cpu_subtype == CPU_SUBTYPE_ARM_V7S) { 98 if (cpu_type == CPU_TYPE_ARM && cpu_subtype == CPU_SUBTYPE_ARM_V7S) {
106 static const NXArchInfo* armv7s = ArchInfo_armv7s(); 99 static const NXArchInfo* armv7s = ArchInfo_armv7s();
107 return armv7s; 100 return armv7s;
108 } 101 }
109 102
110 return NXGetArchInfoFromCpuType(cpu_type, cpu_subtype); 103 return NXGetArchInfoFromCpuType(cpu_type, cpu_subtype);
111 } 104 }
112 105
113 } // namespace google_breakpad 106 } // namespace google_breakpad
107
108 #ifndef __APPLE__
109 namespace {
110
111 enum Architecture {
112 kArch_i386 = 0,
113 kArch_x86_64,
114 kArch_arm,
115 kArch_arm64,
116 kArch_ppc,
117 // This must be last.
118 kNumArchitectures
119 };
120
121 // enum Architecture above and kKnownArchitectures below
122 // must be kept in sync.
123 const NXArchInfo kKnownArchitectures[] = {
124 {
125 "i386",
126 CPU_TYPE_I386,
127 CPU_SUBTYPE_I386_ALL,
128 NX_LittleEndian,
129 "Intel 80x86"
130 },
131 {
132 "x86_64",
133 CPU_TYPE_X86_64,
134 CPU_SUBTYPE_X86_64_ALL,
135 NX_LittleEndian,
136 "Intel x86-64"
137 },
138 {
139 "arm",
140 CPU_TYPE_ARM,
141 CPU_SUBTYPE_ARM_ALL,
142 NX_LittleEndian,
143 "ARM"
144 },
145 {
146 "arm64",
147 CPU_TYPE_ARM64,
148 CPU_SUBTYPE_ARM64_ALL,
149 NX_LittleEndian,
150 "ARM64"
151 },
152 {
153 "ppc",
154 CPU_TYPE_POWERPC,
155 CPU_SUBTYPE_POWERPC_ALL,
156 NX_BigEndian,
157 "PowerPC"
158 }
159 };
160
161 } // namespace
162
163 const NXArchInfo *NXGetLocalArchInfo(void) {
164 Architecture arch;
165 #if defined(__i386__)
166 arch = kArch_i386;
167 #elif defined(__x86_64__)
168 arch = kArch_x86_64;
169 #elif defined(__arm64)
170 arch = kArch_arm64;
171 #elif defined(__arm__)
172 arch = kArch_arm;
173 #elif defined(__powerpc__)
174 arch = kArch_ppc;
175 #else
176 #error "Unsupported CPU architecture"
177 #endif
178 return &kKnownArchitectures[arch];
179 }
180
181 const NXArchInfo *NXGetArchInfoFromName(const char *name) {
182 for (int arch = 0; arch < kNumArchitectures; ++arch) {
183 if (strcmp(name, kKnownArchitectures[arch].name)) {
184 return &kKnownArchitectures[arch];
185 }
186 }
187 return NULL;
188 }
189
190 const NXArchInfo *NXGetArchInfoFromCpuType(cpu_type_t cputype,
191 cpu_subtype_t cpusubtype) {
192 for (int arch = 0; arch < kNumArchitectures; ++arch) {
193 if (kKnownArchitectures[arch].cputype == cputype) {
194 return &kKnownArchitectures[arch];
195 }
196 }
197 return NULL;
198 }
199
200 struct fat_arch *NXFindBestFatArch(cpu_type_t cputype,
201 cpu_subtype_t cpusubtype,
202 struct fat_arch *fat_archs,
203 uint32_t nfat_archs) {
204 for (uint32_t f = 0; f < nfat_archs; ++f) {
205 if (fat_archs[f].cputype == cputype) {
206 return &fat_archs[f];
207 }
208 }
209 return NULL;
210 }
211 #endif // !__APPLE__
OLDNEW
« no previous file with comments | « src/common/common.gyp ('k') | src/common/mac/byteswap.h » ('j') | src/common/mac/dump_syms.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698