OLD | NEW |
---|---|
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/globals.h" | 5 #include "vm/globals.h" |
6 #if defined(TARGET_OS_FUCHSIA) | 6 #if defined(TARGET_OS_FUCHSIA) |
7 | 7 |
8 #include "vm/os.h" | 8 #include "vm/os.h" |
9 | 9 |
10 #include <magenta/syscalls.h> | 10 #include <magenta/syscalls.h> |
11 #include <magenta/types.h> | 11 #include <magenta/types.h> |
12 | 12 |
13 #include "platform/assert.h" | 13 #include "platform/assert.h" |
14 #include "vm/zone.h" | |
14 | 15 |
15 namespace dart { | 16 namespace dart { |
16 | 17 |
17 const char* OS::Name() { | 18 const char* OS::Name() { |
18 return "fuchsia"; | 19 return "fuchsia"; |
19 } | 20 } |
20 | 21 |
21 | 22 |
22 intptr_t OS::ProcessId() { | 23 intptr_t OS::ProcessId() { |
23 UNIMPLEMENTED(); | 24 UNIMPLEMENTED(); |
(...skipping 23 matching lines...) Expand all Loading... | |
47 return GetCurrentTimeMicros() / 1000; | 48 return GetCurrentTimeMicros() / 1000; |
48 } | 49 } |
49 | 50 |
50 | 51 |
51 int64_t OS::GetCurrentTimeMicros() { | 52 int64_t OS::GetCurrentTimeMicros() { |
52 return _magenta_current_time() / 1000; | 53 return _magenta_current_time() / 1000; |
53 } | 54 } |
54 | 55 |
55 | 56 |
56 int64_t OS::GetCurrentMonotonicTicks() { | 57 int64_t OS::GetCurrentMonotonicTicks() { |
57 UNIMPLEMENTED(); | 58 return _magenta_current_time(); |
58 return 0; | |
59 } | 59 } |
60 | 60 |
61 | 61 |
62 int64_t OS::GetCurrentMonotonicFrequency() { | 62 int64_t OS::GetCurrentMonotonicFrequency() { |
63 UNIMPLEMENTED(); | 63 return kNanosecondsPerSecond; |
64 return 0; | |
65 } | 64 } |
66 | 65 |
67 | 66 |
68 int64_t OS::GetCurrentMonotonicMicros() { | 67 int64_t OS::GetCurrentMonotonicMicros() { |
69 UNIMPLEMENTED(); | 68 int64_t ticks = GetCurrentMonotonicTicks(); |
70 return 0; | 69 ASSERT(GetCurrentMonotonicFrequency() == kNanosecondsPerSecond); |
70 return ticks / kNanosecondsPerMicrosecond; | |
71 } | 71 } |
72 | 72 |
73 | 73 |
74 int64_t OS::GetCurrentThreadCPUMicros() { | 74 int64_t OS::GetCurrentThreadCPUMicros() { |
75 UNIMPLEMENTED(); | 75 UNIMPLEMENTED(); |
76 return 0; | 76 return 0; |
77 } | 77 } |
78 | 78 |
79 | 79 |
80 void* OS::AlignedAllocate(intptr_t size, intptr_t alignment) { | 80 void* OS::AlignedAllocate(intptr_t size, intptr_t alignment) { |
81 UNIMPLEMENTED(); | 81 UNIMPLEMENTED(); |
82 return NULL; | 82 return NULL; |
83 } | 83 } |
84 | 84 |
85 | 85 |
86 void OS::AlignedFree(void* ptr) { | 86 void OS::AlignedFree(void* ptr) { |
87 UNIMPLEMENTED(); | 87 UNIMPLEMENTED(); |
88 } | 88 } |
89 | 89 |
90 | 90 |
91 // TODO(5411554): May need to hoist these architecture dependent code | 91 // TODO(5411554): May need to hoist these architecture dependent code |
92 // into a architecture specific file e.g: os_ia32_linux.cc | 92 // into a architecture specific file e.g: os_ia32_linux.cc |
siva
2016/07/13 00:27:16
the comment seems inaccurate (os_ia32_fuschia.cc)
zra
2016/07/13 16:04:33
Done.
| |
93 intptr_t OS::ActivationFrameAlignment() { | 93 intptr_t OS::ActivationFrameAlignment() { |
94 UNIMPLEMENTED(); | 94 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) || \ |
95 return 0; | 95 defined(TARGET_ARCH_ARM64) |
96 const int kMinimumAlignment = 16; | |
97 #elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_DBC) | |
98 const int kMinimumAlignment = 8; | |
99 #else | |
100 #error Unsupported architecture. | |
101 #endif | |
102 intptr_t alignment = kMinimumAlignment; | |
103 // TODO(5411554): Allow overriding default stack alignment for | |
104 // testing purposes. | |
105 // Flags::DebugIsInt("stackalign", &alignment); | |
106 ASSERT(Utils::IsPowerOfTwo(alignment)); | |
107 ASSERT(alignment >= kMinimumAlignment); | |
108 return alignment; | |
96 } | 109 } |
97 | 110 |
98 | 111 |
99 intptr_t OS::PreferredCodeAlignment() { | 112 intptr_t OS::PreferredCodeAlignment() { |
100 UNIMPLEMENTED(); | 113 #if defined(TARGET_ARCH_IA32) || \ |
101 return 0; | 114 defined(TARGET_ARCH_X64) || \ |
115 defined(TARGET_ARCH_ARM64) || \ | |
116 defined(TARGET_ARCH_DBC) | |
117 const int kMinimumAlignment = 32; | |
118 #elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_MIPS) | |
119 const int kMinimumAlignment = 16; | |
120 #else | |
121 #error Unsupported architecture. | |
122 #endif | |
123 intptr_t alignment = kMinimumAlignment; | |
124 // TODO(5411554): Allow overriding default code alignment for | |
125 // testing purposes. | |
126 // Flags::DebugIsInt("codealign", &alignment); | |
127 ASSERT(Utils::IsPowerOfTwo(alignment)); | |
128 ASSERT(alignment >= kMinimumAlignment); | |
129 ASSERT(alignment <= OS::kMaxPreferredCodeAlignment); | |
130 return alignment; | |
102 } | 131 } |
103 | 132 |
104 | 133 |
105 bool OS::AllowStackFrameIteratorFromAnotherThread() { | 134 bool OS::AllowStackFrameIteratorFromAnotherThread() { |
106 UNIMPLEMENTED(); | 135 UNIMPLEMENTED(); |
107 return false; | 136 return false; |
108 } | 137 } |
109 | 138 |
110 | 139 |
111 int OS::NumberOfAvailableProcessors() { | 140 int OS::NumberOfAvailableProcessors() { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
146 } | 175 } |
147 | 176 |
148 | 177 |
149 void OS::VFPrint(FILE* stream, const char* format, va_list args) { | 178 void OS::VFPrint(FILE* stream, const char* format, va_list args) { |
150 vfprintf(stream, format, args); | 179 vfprintf(stream, format, args); |
151 fflush(stream); | 180 fflush(stream); |
152 } | 181 } |
153 | 182 |
154 | 183 |
155 int OS::SNPrint(char* str, size_t size, const char* format, ...) { | 184 int OS::SNPrint(char* str, size_t size, const char* format, ...) { |
156 UNIMPLEMENTED(); | 185 va_list args; |
157 return 0; | 186 va_start(args, format); |
187 int retval = VSNPrint(str, size, format, args); | |
188 va_end(args); | |
189 return retval; | |
158 } | 190 } |
159 | 191 |
160 | 192 |
161 int OS::VSNPrint(char* str, size_t size, const char* format, va_list args) { | 193 int OS::VSNPrint(char* str, size_t size, const char* format, va_list args) { |
162 UNIMPLEMENTED(); | 194 int retval = vsnprintf(str, size, format, args); |
163 return 0; | 195 if (retval < 0) { |
196 FATAL1("Fatal error in OS::VSNPrint with format '%s'", format); | |
197 } | |
198 return retval; | |
164 } | 199 } |
165 | 200 |
166 | 201 |
167 char* OS::SCreate(Zone* zone, const char* format, ...) { | 202 char* OS::SCreate(Zone* zone, const char* format, ...) { |
168 UNIMPLEMENTED(); | 203 va_list args; |
169 return NULL; | 204 va_start(args, format); |
205 char* buffer = VSCreate(zone, format, args); | |
206 va_end(args); | |
207 return buffer; | |
170 } | 208 } |
171 | 209 |
172 | 210 |
173 char* OS::VSCreate(Zone* zone, const char* format, va_list args) { | 211 char* OS::VSCreate(Zone* zone, const char* format, va_list args) { |
174 UNIMPLEMENTED(); | 212 // Measure. |
175 return NULL; | 213 va_list measure_args; |
214 va_copy(measure_args, args); | |
215 intptr_t len = VSNPrint(NULL, 0, format, measure_args); | |
216 va_end(measure_args); | |
217 | |
218 char* buffer; | |
219 if (zone) { | |
220 buffer = zone->Alloc<char>(len + 1); | |
221 } else { | |
222 buffer = reinterpret_cast<char*>(malloc(len + 1)); | |
223 } | |
224 ASSERT(buffer != NULL); | |
225 | |
226 // Print. | |
227 va_list print_args; | |
228 va_copy(print_args, args); | |
229 VSNPrint(buffer, len + 1, format, print_args); | |
230 va_end(print_args); | |
231 return buffer; | |
176 } | 232 } |
177 | 233 |
178 | 234 |
179 bool OS::StringToInt64(const char* str, int64_t* value) { | 235 bool OS::StringToInt64(const char* str, int64_t* value) { |
180 UNIMPLEMENTED(); | 236 UNIMPLEMENTED(); |
181 return false; | 237 return false; |
182 } | 238 } |
183 | 239 |
184 | 240 |
185 void OS::RegisterCodeObservers() { | 241 void OS::RegisterCodeObservers() { |
(...skipping 28 matching lines...) Expand all Loading... | |
214 } | 270 } |
215 | 271 |
216 | 272 |
217 void OS::Exit(int code) { | 273 void OS::Exit(int code) { |
218 UNIMPLEMENTED(); | 274 UNIMPLEMENTED(); |
219 } | 275 } |
220 | 276 |
221 } // namespace dart | 277 } // namespace dart |
222 | 278 |
223 #endif // defined(TARGET_OS_FUCHSIA) | 279 #endif // defined(TARGET_OS_FUCHSIA) |
OLD | NEW |