OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 #if V8_TARGET_ARCH_X64 | 116 #if V8_TARGET_ARCH_X64 |
117 uint64_t rnd1 = V8::RandomPrivate(isolate); | 117 uint64_t rnd1 = V8::RandomPrivate(isolate); |
118 uint64_t rnd2 = V8::RandomPrivate(isolate); | 118 uint64_t rnd2 = V8::RandomPrivate(isolate); |
119 uint64_t raw_addr = (rnd1 << 32) ^ rnd2; | 119 uint64_t raw_addr = (rnd1 << 32) ^ rnd2; |
120 // Currently available CPUs have 48 bits of virtual addressing. Truncate | 120 // Currently available CPUs have 48 bits of virtual addressing. Truncate |
121 // the hint address to 46 bits to give the kernel a fighting chance of | 121 // the hint address to 46 bits to give the kernel a fighting chance of |
122 // fulfilling our placement request. | 122 // fulfilling our placement request. |
123 raw_addr &= V8_UINT64_C(0x3ffffffff000); | 123 raw_addr &= V8_UINT64_C(0x3ffffffff000); |
124 #else | 124 #else |
125 uint32_t raw_addr = V8::RandomPrivate(isolate); | 125 uint32_t raw_addr = V8::RandomPrivate(isolate); |
| 126 |
| 127 raw_addr &= 0x3ffff000; |
| 128 |
| 129 # ifdef __sun |
| 130 // For our Solaris/illumos mmap hint, we pick a random address in the bottom |
| 131 // half of the top half of the address space (that is, the third quarter). |
| 132 // Because we do not MAP_FIXED, this will be treated only as a hint -- the |
| 133 // system will not fail to mmap() because something else happens to already |
| 134 // be mapped at our random address. We deliberately set the hint high enough |
| 135 // to get well above the system's break (that is, the heap); Solaris and |
| 136 // illumos will try the hint and if that fails allocate as if there were |
| 137 // no hint at all. The high hint prevents the break from getting hemmed in |
| 138 // at low values, ceding half of the address space to the system heap. |
| 139 raw_addr += 0x80000000; |
| 140 # else |
126 // The range 0x20000000 - 0x60000000 is relatively unpopulated across a | 141 // The range 0x20000000 - 0x60000000 is relatively unpopulated across a |
127 // variety of ASLR modes (PAE kernel, NX compat mode, etc) and on macos | 142 // variety of ASLR modes (PAE kernel, NX compat mode, etc) and on macos |
128 // 10.6 and 10.7. | 143 // 10.6 and 10.7. |
129 raw_addr &= 0x3ffff000; | |
130 raw_addr += 0x20000000; | 144 raw_addr += 0x20000000; |
| 145 # endif |
131 #endif | 146 #endif |
132 return reinterpret_cast<void*>(raw_addr); | 147 return reinterpret_cast<void*>(raw_addr); |
133 } | 148 } |
134 return NULL; | 149 return NULL; |
135 } | 150 } |
136 | 151 |
137 | 152 |
138 // ---------------------------------------------------------------------------- | 153 // ---------------------------------------------------------------------------- |
139 // Math functions | 154 // Math functions |
140 | 155 |
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 return ntohl(value); | 664 return ntohl(value); |
650 } | 665 } |
651 | 666 |
652 | 667 |
653 Socket* OS::CreateSocket() { | 668 Socket* OS::CreateSocket() { |
654 return new POSIXSocket(); | 669 return new POSIXSocket(); |
655 } | 670 } |
656 | 671 |
657 | 672 |
658 } } // namespace v8::internal | 673 } } // namespace v8::internal |
OLD | NEW |