| 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_fuchsia.cc |
| 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 |