1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are
4 // met:
5 //
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28 // Platform specific code for NULLOS goes here
29
30 // Minimal include to get access to abort, fprintf and friends for bootstrapping
31 // messages.
32 #include <stdio.h>
33 #include <stdlib.h>
34
35 #include "v8.h"
36
37 #include "platform.h"
38
39
40 namespace v8 {
41 namespace internal {
42
43 // Give V8 the opportunity to override the default ceil behaviour.
ceiling(double x)44 double ceiling(double x) {
45 UNIMPLEMENTED();
46 return 0;
47 }
48
49
50 // Give V8 the opportunity to override the default fmod behavior.
modulo(double x,double y)51 double modulo(double x, double y) {
52 UNIMPLEMENTED();
53 return 0;
54 }
55
56
57 // Initialize OS class early in the V8 startup.
Setup()58 void OS::Setup() {
59 // Seed the random number generator.
60 UNIMPLEMENTED();
61 }
62
63
64 // Returns the accumulated user time for thread.
GetUserTime(uint32_t * secs,uint32_t * usecs)65 int OS::GetUserTime(uint32_t* secs, uint32_t* usecs) {
66 UNIMPLEMENTED();
67 *secs = 0;
68 *usecs = 0;
69 return 0;
70 }
71
72
73 // Returns current time as the number of milliseconds since
74 // 00:00:00 UTC, January 1, 1970.
TimeCurrentMillis()75 double OS::TimeCurrentMillis() {
76 UNIMPLEMENTED();
77 return 0;
78 }
79
80
81 // Returns ticks in microsecond resolution.
Ticks()82 int64_t OS::Ticks() {
83 UNIMPLEMENTED();
84 return 0;
85 }
86
87
88 // Returns a string identifying the current timezone taking into
89 // account daylight saving.
LocalTimezone(double time)90 const char* OS::LocalTimezone(double time) {
91 UNIMPLEMENTED();
92 return "<none>";
93 }
94
95
96 // Returns the daylight savings offset in milliseconds for the given time.
DaylightSavingsOffset(double time)97 double OS::DaylightSavingsOffset(double time) {
98 UNIMPLEMENTED();
99 return 0;
100 }
101
102
103 // Returns the local time offset in milliseconds east of UTC without
104 // taking daylight savings time into account.
LocalTimeOffset()105 double OS::LocalTimeOffset() {
106 UNIMPLEMENTED();
107 return 0;
108 }
109
110
111 // Print (debug) message to console.
Print(const char * format,...)112 void OS::Print(const char* format, ...) {
113 UNIMPLEMENTED();
114 }
115
116
117 // Print (debug) message to console.
VPrint(const char * format,va_list args)118 void OS::VPrint(const char* format, va_list args) {
119 // Minimalistic implementation for bootstrapping.
120 vfprintf(stdout, format, args);
121 }
122
123
124 // Print error message to console.
PrintError(const char * format,...)125 void OS::PrintError(const char* format, ...) {
126 // Minimalistic implementation for bootstrapping.
127 va_list args;
128 va_start(args, format);
129 VPrintError(format, args);
130 va_end(args);
131 }
132
133
134 // Print error message to console.
VPrintError(const char * format,va_list args)135 void OS::VPrintError(const char* format, va_list args) {
136 // Minimalistic implementation for bootstrapping.
137 vfprintf(stderr, format, args);
138 }
139
140
SNPrintF(char * str,size_t size,const char * format,...)141 int OS::SNPrintF(char* str, size_t size, const char* format, ...) {
142 UNIMPLEMENTED();
143 return 0;
144 }
145
146
VSNPrintF(char * str,size_t size,const char * format,va_list args)147 int OS::VSNPrintF(char* str, size_t size, const char* format, va_list args) {
148 UNIMPLEMENTED();
149 return 0;
150 }
151
152
CpuFeaturesImpliedByPlatform()153 uint64_t OS::CpuFeaturesImpliedByPlatform() {
154 return 0;
155 }
156
157
nan_value()158 double OS::nan_value() {
159 UNIMPLEMENTED();
160 return 0;
161 }
162
163
ArmCpuHasFeature(CpuFeature feature)164 bool OS::ArmCpuHasFeature(CpuFeature feature) {
165 UNIMPLEMENTED();
166 }
167
168
IsOutsideAllocatedSpace(void * address)169 bool OS::IsOutsideAllocatedSpace(void* address) {
170 UNIMPLEMENTED();
171 return false;
172 }
173
174
AllocateAlignment()175 size_t OS::AllocateAlignment() {
176 UNIMPLEMENTED();
177 return 0;
178 }
179
180
Allocate(const size_t requested,size_t * allocated,bool executable)181 void* OS::Allocate(const size_t requested,
182 size_t* allocated,
183 bool executable) {
184 UNIMPLEMENTED();
185 return NULL;
186 }
187
188
Free(void * buf,const size_t length)189 void OS::Free(void* buf, const size_t length) {
190 // TODO(1240712): potential system call return value which is ignored here.
191 UNIMPLEMENTED();
192 }
193
194
195 #ifdef ENABLE_HEAP_PROTECTION
196
Protect(void * address,size_t size)197 void OS::Protect(void* address, size_t size) {
198 UNIMPLEMENTED();
199 }
200
201
Unprotect(void * address,size_t size,bool is_executable)202 void OS::Unprotect(void* address, size_t size, bool is_executable) {
203 UNIMPLEMENTED();
204 }
205
206 #endif
207
208
Sleep(int milliseconds)209 void OS::Sleep(int milliseconds) {
210 UNIMPLEMENTED();
211 }
212
213
Abort()214 void OS::Abort() {
215 // Minimalistic implementation for bootstrapping.
216 abort();
217 }
218
219
DebugBreak()220 void OS::DebugBreak() {
221 UNIMPLEMENTED();
222 }
223
224
create(const char * name,int size,void * initial)225 OS::MemoryMappedFile* OS::MemoryMappedFile::create(const char* name, int size,
226 void* initial) {
227 UNIMPLEMENTED();
228 return NULL;
229 }
230
231
LogSharedLibraryAddresses()232 void OS::LogSharedLibraryAddresses() {
233 UNIMPLEMENTED();
234 }
235
236
StackWalk(Vector<OS::StackFrame> frames)237 int OS::StackWalk(Vector<OS::StackFrame> frames) {
238 UNIMPLEMENTED();
239 return 0;
240 }
241
242
VirtualMemory(size_t size,void * address_hint)243 VirtualMemory::VirtualMemory(size_t size, void* address_hint) {
244 UNIMPLEMENTED();
245 }
246
247
~VirtualMemory()248 VirtualMemory::~VirtualMemory() {
249 UNIMPLEMENTED();
250 }
251
252
IsReserved()253 bool VirtualMemory::IsReserved() {
254 UNIMPLEMENTED();
255 return false;
256 }
257
258
Commit(void * address,size_t size,bool executable)259 bool VirtualMemory::Commit(void* address, size_t size, bool executable) {
260 UNIMPLEMENTED();
261 return false;
262 }
263
264
Uncommit(void * address,size_t size)265 bool VirtualMemory::Uncommit(void* address, size_t size) {
266 UNIMPLEMENTED();
267 return false;
268 }
269
270
271 class ThreadHandle::PlatformData : public Malloced {
272 public:
PlatformData(ThreadHandle::Kind kind)273 explicit PlatformData(ThreadHandle::Kind kind) {
274 UNIMPLEMENTED();
275 }
276
277 void* pd_data_;
278 };
279
280
ThreadHandle(Kind kind)281 ThreadHandle::ThreadHandle(Kind kind) {
282 UNIMPLEMENTED();
283 // Shared setup follows.
284 data_ = new PlatformData(kind);
285 }
286
287
Initialize(ThreadHandle::Kind kind)288 void ThreadHandle::Initialize(ThreadHandle::Kind kind) {
289 UNIMPLEMENTED();
290 }
291
292
~ThreadHandle()293 ThreadHandle::~ThreadHandle() {
294 UNIMPLEMENTED();
295 // Shared tear down follows.
296 delete data_;
297 }
298
299
IsSelf() const300 bool ThreadHandle::IsSelf() const {
301 UNIMPLEMENTED();
302 return false;
303 }
304
305
IsValid() const306 bool ThreadHandle::IsValid() const {
307 UNIMPLEMENTED();
308 return false;
309 }
310
311
Thread()312 Thread::Thread() : ThreadHandle(ThreadHandle::INVALID) {
313 UNIMPLEMENTED();
314 }
315
316
~Thread()317 Thread::~Thread() {
318 UNIMPLEMENTED();
319 }
320
321
Start()322 void Thread::Start() {
323 UNIMPLEMENTED();
324 }
325
326
Join()327 void Thread::Join() {
328 UNIMPLEMENTED();
329 }
330
331
CreateThreadLocalKey()332 Thread::LocalStorageKey Thread::CreateThreadLocalKey() {
333 UNIMPLEMENTED();
334 return static_cast<LocalStorageKey>(0);
335 }
336
337
DeleteThreadLocalKey(LocalStorageKey key)338 void Thread::DeleteThreadLocalKey(LocalStorageKey key) {
339 UNIMPLEMENTED();
340 }
341
342
GetThreadLocal(LocalStorageKey key)343 void* Thread::GetThreadLocal(LocalStorageKey key) {
344 UNIMPLEMENTED();
345 return NULL;
346 }
347
348
SetThreadLocal(LocalStorageKey key,void * value)349 void Thread::SetThreadLocal(LocalStorageKey key, void* value) {
350 UNIMPLEMENTED();
351 }
352
353
YieldCPU()354 void Thread::YieldCPU() {
355 UNIMPLEMENTED();
356 }
357
358
359 class NullMutex : public Mutex {
360 public:
NullMutex()361 NullMutex() : data_(NULL) {
362 UNIMPLEMENTED();
363 }
364
~NullMutex()365 virtual ~NullMutex() {
366 UNIMPLEMENTED();
367 }
368
Lock()369 virtual int Lock() {
370 UNIMPLEMENTED();
371 return 0;
372 }
373
Unlock()374 virtual int Unlock() {
375 UNIMPLEMENTED();
376 return 0;
377 }
378
379 private:
380 void* data_;
381 };
382
383
CreateMutex()384 Mutex* OS::CreateMutex() {
385 UNIMPLEMENTED();
386 return new NullMutex();
387 }
388
389
390 class NullSemaphore : public Semaphore {
391 public:
NullSemaphore(int count)392 explicit NullSemaphore(int count) : data_(NULL) {
393 UNIMPLEMENTED();
394 }
395
~NullSemaphore()396 virtual ~NullSemaphore() {
397 UNIMPLEMENTED();
398 }
399
Wait()400 virtual void Wait() {
401 UNIMPLEMENTED();
402 }
403
Signal()404 virtual void Signal() {
405 UNIMPLEMENTED();
406 }
407 private:
408 void* data_;
409 };
410
411
CreateSemaphore(int count)412 Semaphore* OS::CreateSemaphore(int count) {
413 UNIMPLEMENTED();
414 return new NullSemaphore(count);
415 }
416
417 #ifdef ENABLE_LOGGING_AND_PROFILING
418
419 class ProfileSampler::PlatformData : public Malloced {
420 public:
PlatformData()421 PlatformData() {
422 UNIMPLEMENTED();
423 }
424 };
425
426
ProfileSampler(int interval)427 ProfileSampler::ProfileSampler(int interval) {
428 UNIMPLEMENTED();
429 // Shared setup follows.
430 data_ = new PlatformData();
431 interval_ = interval;
432 active_ = false;
433 }
434
435
~ProfileSampler()436 ProfileSampler::~ProfileSampler() {
437 UNIMPLEMENTED();
438 // Shared tear down follows.
439 delete data_;
440 }
441
442
Start()443 void ProfileSampler::Start() {
444 UNIMPLEMENTED();
445 }
446
447
Stop()448 void ProfileSampler::Stop() {
449 UNIMPLEMENTED();
450 }
451
452 #endif // ENABLE_LOGGING_AND_PROFILING
453
454 } } // namespace v8::internal
455