| Index: runtime/bin/process_impl.dart | 
| diff --git a/runtime/bin/process_impl.dart b/runtime/bin/process_impl.dart | 
| index da02ccb578e0922743b2f3bf77c98b88861f9acf..4cb462b4fe954c1cd02bd843675f3a3b678639c5 100644 | 
| --- a/runtime/bin/process_impl.dart | 
| +++ b/runtime/bin/process_impl.dart | 
| @@ -39,6 +39,13 @@ class _Process implements Process { | 
| _exitHandlerCallback = null; | 
| } | 
|  | 
| +  int _intFromBytes(List<int> bytes, int offset) { | 
| +    return (bytes[offset] + | 
| +            (bytes[offset + 1] << 8) + | 
| +            (bytes[offset + 2] << 16) + | 
| +            (bytes[offset + 3] << 24)); | 
| +  } | 
| + | 
| void start() { | 
| var status = new _ProcessStartStatus(); | 
| bool success = _start( | 
| @@ -58,17 +65,20 @@ class _Process implements Process { | 
| // Setup an exit handler to handle internal cleanup and possible | 
| // callback when a process terminates. | 
| _exitHandler.dataHandler = () { | 
| -        final int EXIT_DATA_SIZE = 8; | 
| +        final int EXIT_DATA_SIZE = 12; | 
| List<int> exitDataBuffer = new List<int>(EXIT_DATA_SIZE); | 
| InputStream input = _exitHandler.inputStream; | 
| int exitDataRead = 0; | 
|  | 
| int exitCode(List<int> ints) { | 
| -          return ints[4] + (ints[5] << 8) + (ints[6] << 16) + (ints[7] << 24); | 
| +          var code = _intFromBytes(ints, 4); | 
| +          var negative = _intFromBytes(ints, 8); | 
| +          assert(negative == 0 || negative == 1); | 
| +          return (negative == 0) ? code : -code; | 
| } | 
|  | 
| int exitPid(List<int> ints) { | 
| -          return ints[0] + (ints[1] << 8) + (ints[2] << 16) + (ints[3] << 24); | 
| +          return _intFromBytes(ints, 0); | 
| } | 
|  | 
| void handleExit() { | 
|  |