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

Side by Side Diff: runtime/vm/os_fuchsia.cc

Issue 2148533002: Fuchsia: Platform specific calls needed to Initialize and Cleanup VM. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address comments Created 4 years, 5 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
« no previous file with comments | « runtime/vm/cpuinfo_fuchsia.cc ('k') | runtime/vm/virtual_memory.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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)
OLDNEW
« no previous file with comments | « runtime/vm/cpuinfo_fuchsia.cc ('k') | runtime/vm/virtual_memory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698