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

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

Issue 221133002: Begins work on ARM64, first assembler test. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: adds files Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/object_test.cc ('k') | runtime/vm/raw_object_snapshot.cc » ('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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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_LINUX) 6 #if defined(TARGET_OS_LINUX)
7 7
8 #include "vm/os.h" 8 #include "vm/os.h"
9 9
10 #include <errno.h> // NOLINT 10 #include <errno.h> // NOLINT
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 return; 52 return;
53 } 53 }
54 const char* filename = "v8.log.ll"; 54 const char* filename = "v8.log.ll";
55 log_file_ = (*file_open)(filename, true); 55 log_file_ = (*file_open)(filename, true);
56 #if defined(TARGET_ARCH_IA32) 56 #if defined(TARGET_ARCH_IA32)
57 const char arch[] = "ia32"; 57 const char arch[] = "ia32";
58 #elif defined(TARGET_ARCH_X64) 58 #elif defined(TARGET_ARCH_X64)
59 const char arch[] = "x64"; 59 const char arch[] = "x64";
60 #elif defined(TARGET_ARCH_ARM) 60 #elif defined(TARGET_ARCH_ARM)
61 const char arch[] = "arm"; 61 const char arch[] = "arm";
62 #elif defined(TARGET_ARCH_ARM64)
63 const char arch[] = "arm64";
62 #elif defined(TARGET_ARCH_MIPS) 64 #elif defined(TARGET_ARCH_MIPS)
63 const char arch[] = "mips"; 65 const char arch[] = "mips";
64 #else 66 #else
65 #error Unknown architecture. 67 #error Unknown architecture.
66 #endif 68 #endif
67 LowLevelLogWriteBytes(arch, sizeof(arch)); 69 LowLevelLogWriteBytes(arch, sizeof(arch));
68 } 70 }
69 71
70 ~LowLevelProfileCodeObserver() { 72 ~LowLevelProfileCodeObserver() {
71 Dart_FileCloseCallback file_close = Isolate::file_close_callback(); 73 Dart_FileCloseCallback file_close = Isolate::file_close_callback();
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 bool optimized) { 350 bool optimized) {
349 WriteCodeLoad(name, base, prologue_offset, size, optimized); 351 WriteCodeLoad(name, base, prologue_offset, size, optimized);
350 } 352 }
351 353
352 private: 354 private:
353 static const uint32_t kJitHeaderMagic = 0x4F74496A; 355 static const uint32_t kJitHeaderMagic = 0x4F74496A;
354 static const uint32_t kJitHeaderVersion = 0x2; 356 static const uint32_t kJitHeaderVersion = 0x2;
355 static const uint32_t kElfMachIA32 = 3; 357 static const uint32_t kElfMachIA32 = 3;
356 static const uint32_t kElfMachX64 = 62; 358 static const uint32_t kElfMachX64 = 62;
357 static const uint32_t kElfMachARM = 40; 359 static const uint32_t kElfMachARM = 40;
360 // TODO(zra): Find the right ARM64 constant.
361 static const uint32_t kElfMachARM64 = 40;
358 static const uint32_t kElfMachMIPS = 10; 362 static const uint32_t kElfMachMIPS = 10;
359 static const int kInvalidClockId = -1; 363 static const int kInvalidClockId = -1;
360 364
361 struct jitheader { 365 struct jitheader {
362 uint32_t magic; 366 uint32_t magic;
363 uint32_t version; 367 uint32_t version;
364 uint32_t total_size; 368 uint32_t total_size;
365 uint32_t elf_mach; 369 uint32_t elf_mach;
366 uint32_t pad1; 370 uint32_t pad1;
367 uint32_t pid; 371 uint32_t pid;
(...skipping 30 matching lines...) Expand all
398 return buffer; 402 return buffer;
399 } 403 }
400 404
401 uint32_t GetElfMach() { 405 uint32_t GetElfMach() {
402 #if defined(TARGET_ARCH_IA32) 406 #if defined(TARGET_ARCH_IA32)
403 return kElfMachIA32; 407 return kElfMachIA32;
404 #elif defined(TARGET_ARCH_X64) 408 #elif defined(TARGET_ARCH_X64)
405 return kElfMachX64; 409 return kElfMachX64;
406 #elif defined(TARGET_ARCH_ARM) 410 #elif defined(TARGET_ARCH_ARM)
407 return kElfMachARM; 411 return kElfMachARM;
412 #elif defined(TARGET_ARCH_ARM64)
413 return kElfMachARM64;
408 #elif defined(TARGET_ARCH_MIPS) 414 #elif defined(TARGET_ARCH_MIPS)
409 return kElfMachMIPS; 415 return kElfMachMIPS;
410 #else 416 #else
411 #error Unknown architecture. 417 #error Unknown architecture.
412 #endif 418 #endif
413 } 419 }
414 420
415 pid_t gettid() { 421 pid_t gettid() {
416 // libc doesn't wrap the Linux-specific gettid system call. 422 // libc doesn't wrap the Linux-specific gettid system call.
417 // Note that this thread id is not the same as the posix thread id. 423 // Note that this thread id is not the same as the posix thread id.
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 569
564 570
565 void OS::AlignedFree(void* ptr) { 571 void OS::AlignedFree(void* ptr) {
566 free(ptr); 572 free(ptr);
567 } 573 }
568 574
569 575
570 // TODO(5411554): May need to hoist these architecture dependent code 576 // TODO(5411554): May need to hoist these architecture dependent code
571 // into a architecture specific file e.g: os_ia32_linux.cc 577 // into a architecture specific file e.g: os_ia32_linux.cc
572 word OS::ActivationFrameAlignment() { 578 word OS::ActivationFrameAlignment() {
573 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) 579 #if defined(TARGET_ARCH_IA32) || \
580 defined(TARGET_ARCH_X64) || \
581 defined(TARGET_ARCH_ARM64)
574 const int kMinimumAlignment = 16; 582 const int kMinimumAlignment = 16;
575 #elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_MIPS) 583 #elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_MIPS)
576 const int kMinimumAlignment = 8; 584 const int kMinimumAlignment = 8;
577 #else 585 #else
578 #error Unsupported architecture. 586 #error Unsupported architecture.
579 #endif 587 #endif
580 word alignment = kMinimumAlignment; 588 word alignment = kMinimumAlignment;
581 // TODO(5411554): Allow overriding default stack alignment for 589 // TODO(5411554): Allow overriding default stack alignment for
582 // testing purposes. 590 // testing purposes.
583 // Flags::DebugIsInt("stackalign", &alignment); 591 // Flags::DebugIsInt("stackalign", &alignment);
584 ASSERT(Utils::IsPowerOfTwo(alignment)); 592 ASSERT(Utils::IsPowerOfTwo(alignment));
585 ASSERT(alignment >= kMinimumAlignment); 593 ASSERT(alignment >= kMinimumAlignment);
586 return alignment; 594 return alignment;
587 } 595 }
588 596
589 597
590 word OS::PreferredCodeAlignment() { 598 word OS::PreferredCodeAlignment() {
591 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) 599 #if defined(TARGET_ARCH_IA32) || \
600 defined(TARGET_ARCH_X64) || \
601 defined(TARGET_ARCH_ARM64)
592 const int kMinimumAlignment = 32; 602 const int kMinimumAlignment = 32;
593 #elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_MIPS) 603 #elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_MIPS)
594 const int kMinimumAlignment = 16; 604 const int kMinimumAlignment = 16;
595 #else 605 #else
596 #error Unsupported architecture. 606 #error Unsupported architecture.
597 #endif 607 #endif
598 word alignment = kMinimumAlignment; 608 word alignment = kMinimumAlignment;
599 // TODO(5411554): Allow overriding default code alignment for 609 // TODO(5411554): Allow overriding default code alignment for
600 // testing purposes. 610 // testing purposes.
601 // Flags::DebugIsInt("codealign", &alignment); 611 // Flags::DebugIsInt("codealign", &alignment);
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 } 779 }
770 780
771 781
772 void OS::Exit(int code) { 782 void OS::Exit(int code) {
773 exit(code); 783 exit(code);
774 } 784 }
775 785
776 } // namespace dart 786 } // namespace dart
777 787
778 #endif // defined(TARGET_OS_LINUX) 788 #endif // defined(TARGET_OS_LINUX)
OLDNEW
« no previous file with comments | « runtime/vm/object_test.cc ('k') | runtime/vm/raw_object_snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698