V8: Reapply floating patches
authorisaacs <i@izs.me>
Sat, 9 Feb 2013 01:18:37 +0000 (17:18 -0800)
committerisaacs <i@izs.me>
Sat, 9 Feb 2013 01:18:41 +0000 (17:18 -0800)
deps/v8/build/common.gypi
deps/v8/src/log-utils.cc
deps/v8/src/platform-posix.cc
deps/v8/src/v8utils.h

index e68ee15..44bebae 100644 (file)
           [ 'v8_use_arm_eabi_hardfloat=="true"', {
             'defines': [
               'USE_EABI_HARDFLOAT=1',
-              'CAN_USE_VFP3_INSTRUCTIONS',
+              'CAN_USE_VFP2_INSTRUCTIONS',
             ],
             'target_conditions': [
               ['_toolset=="target"', {
           }],
           ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" \
             or OS=="android"', {
-            'cflags!': [
-              '-O2',
-              '-Os',
-            ],
-            'cflags': [
-              '-fdata-sections',
-              '-ffunction-sections',
-              '-O3',
-            ],
             'conditions': [
               [ 'gcc_version==44 and clang==0', {
                 'cflags': [
index d8d92cb..a66db3d 100644 (file)
@@ -107,6 +107,9 @@ void Log::Initialize() {
                 // one character so we can escape the loop properly.
                 p--;
                 break;
+              case 'p':
+                stream.Add("%d", OS::GetCurrentProcessId());
+                break;
               case 't': {
                 // %t expands to the current time in milliseconds.
                 double time = OS::TimeCurrentMillis();
index 0016d59..e652a08 100644 (file)
@@ -109,11 +109,20 @@ void* OS::GetRandomMmapAddr() {
     raw_addr &= V8_UINT64_C(0x3ffffffff000);
 #else
     uint32_t raw_addr = V8::RandomPrivate(isolate);
-    // The range 0x20000000 - 0x60000000 is relatively unpopulated across a
-    // variety of ASLR modes (PAE kernel, NX compat mode, etc) and on macos
-    // 10.6 and 10.7.
+
+    // For our 32-bit mmap() hint, we pick a random address in the bottom
+    // half of the top half of the address space (that is, the third quarter).
+    // Because we do not MAP_FIXED, this will be treated only as a hint -- the
+    // system will not fail to mmap() because something else happens to already
+    // be mapped at our random address. We deliberately set the hint high enough
+    // to get well above the system's break (that is, the heap); systems will
+    // either try the hint and if that fails move higher (MacOS and other BSD
+    // derivatives) or try the hint and if that fails allocate as if there were
+    // no hint at all (Linux, Solaris, illumos and derivatives). The high hint
+    // prevents the break from getting hemmed in at low values, ceding half of
+    // the address space to the system heap.
     raw_addr &= 0x3ffff000;
-    raw_addr += 0x20000000;
+    raw_addr += 0x80000000;
 #endif
     return reinterpret_cast<void*>(raw_addr);
   }
index 9072b4e..111abdf 100644 (file)
@@ -209,6 +209,8 @@ INLINE(void CopyChars(sinkchar* dest, const sourcechar* src, int chars));
 
 template <typename sourcechar, typename sinkchar>
 void CopyChars(sinkchar* dest, const sourcechar* src, int chars) {
+  ASSERT(chars >= 0);
+  if (chars == 0) return;
   sinkchar* limit = dest + chars;
 #ifdef V8_HOST_CAN_READ_UNALIGNED
   if (sizeof(*dest) == sizeof(*src)) {