Chromium Code Reviews| Index: runtime/bin/main.cc |
| diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc |
| index 7a1ef37f8fb338acb6840202c633925cb519926f..8d4df87bb9d98d1b26c4e8d201eeb416e3c338e8 100644 |
| --- a/runtime/bin/main.cc |
| +++ b/runtime/bin/main.cc |
| @@ -123,6 +123,12 @@ static bool parse_all = false; |
| // of assembly/shared libraries for precompilation. |
| static bool use_blobs = false; |
| +// Global flag is used to indicate that we want to obfuscate identifiers. |
| +static bool obfuscate = false; |
|
rmacnak
2017/08/24 01:00:27
Flutter will want these options on gen_snapshot.
Vyacheslav Egorov (Google)
2017/08/24 14:27:19
I have added these options to the gen_snapshot. I
|
| + |
| +// Value of the --save-obfuscation-map= flag. |
| +static const char* obfuscation_map_filename = NULL; |
| + |
| // Global flag that is used to indicate that we want to trace resolution of |
| // URIs and the loading of libraries, parts and scripts. |
| static bool trace_loading = false; |
| @@ -378,6 +384,23 @@ static bool ProcessUseBlobsOption(const char* arg, |
| return true; |
| } |
| +static bool ProcessObfuscateOption(const char* arg, |
| + CommandLineOptions* vm_options) { |
| + ASSERT(arg != NULL); |
| + if (*arg != '\0') { |
| + return false; |
| + } |
| + obfuscate = true; |
| + return true; |
| +} |
| + |
| +static bool ProcessObfuscationMapFilenameOption( |
| + const char* filename, |
| + CommandLineOptions* vm_options) { |
| + obfuscation_map_filename = filename; |
| + return true; |
| +} |
| + |
| static bool ProcessSnapshotFilenameOption(const char* filename, |
| CommandLineOptions* vm_options) { |
| snapshot_filename = filename; |
| @@ -587,6 +610,8 @@ static struct { |
| {"--snapshot-kind=", ProcessSnapshotKindOption}, |
| {"--snapshot-depfile=", ProcessSnapshotDepsFilenameOption}, |
| {"--use-blobs", ProcessUseBlobsOption}, |
| + {"--obfuscate", ProcessObfuscateOption}, |
| + {"--save-obfuscation-map=", ProcessObfuscationMapFilenameOption}, |
| {"--save-compilation-trace=", ProcessSaveCompilationTraceOption}, |
| {"--load-compilation-trace=", ProcessLoadCompilationTraceOption}, |
| {"--save-feedback=", ProcessSaveFeedbackOption}, |
| @@ -1414,6 +1439,59 @@ static void ReadFile(const char* filename, uint8_t** buffer, intptr_t* size) { |
| file->Release(); |
| } |
| +static Dart_QualifiedFunctionName standalone_entry_points[] = { |
| + // Functions. |
| + {"dart:_builtin", "::", "_getPrintClosure"}, |
| + {"dart:_builtin", "::", "_getUriBaseClosure"}, |
| + {"dart:_builtin", "::", "_libraryFilePath"}, |
| + {"dart:_builtin", "::", "_resolveInWorkingDirectory"}, |
| + {"dart:_builtin", "::", "_setPackageRoot"}, |
| + {"dart:_builtin", "::", "_setPackagesMap"}, |
| + {"dart:_builtin", "::", "_setWorkingDirectory"}, |
| + {"dart:async", "::", "_setScheduleImmediateClosure"}, |
| + {"dart:io", "::", "_getWatchSignalInternal"}, |
| + {"dart:io", "::", "_makeDatagram"}, |
| + {"dart:io", "::", "_makeUint8ListView"}, |
| + {"dart:io", "::", "_setupHooks"}, |
| + {"dart:io", "CertificateException", "CertificateException."}, |
| + {"dart:io", "Directory", "Directory."}, |
| + {"dart:io", "File", "File."}, |
| + {"dart:io", "FileSystemException", "FileSystemException."}, |
| + {"dart:io", "HandshakeException", "HandshakeException."}, |
| + {"dart:io", "Link", "Link."}, |
| + {"dart:io", "OSError", "OSError."}, |
| + {"dart:io", "TlsException", "TlsException."}, |
| + {"dart:io", "X509Certificate", "X509Certificate._"}, |
| + {"dart:io", "_ExternalBuffer", "get:end"}, |
| + {"dart:io", "_ExternalBuffer", "get:start"}, |
| + {"dart:io", "_ExternalBuffer", "set:data"}, |
| + {"dart:io", "_ExternalBuffer", "set:end"}, |
| + {"dart:io", "_ExternalBuffer", "set:start"}, |
| + {"dart:io", "_Platform", "set:_nativeScript"}, |
| + {"dart:io", "_ProcessStartStatus", "set:_errorCode"}, |
| + {"dart:io", "_ProcessStartStatus", "set:_errorMessage"}, |
| + {"dart:io", "_SecureFilterImpl", "get:ENCRYPTED_SIZE"}, |
| + {"dart:io", "_SecureFilterImpl", "get:SIZE"}, |
| + {"dart:io", "_SecureFilterImpl", "get:buffers"}, |
| + {"dart:isolate", "::", "_getIsolateScheduleImmediateClosure"}, |
| + {"dart:isolate", "::", "_setupHooks"}, |
| + {"dart:isolate", "::", "_startMainIsolate"}, |
| + {"dart:vmservice_io", "::", "main"}, |
| + // Fields |
| + {"dart:_builtin", "::", "_isolateId"}, |
| + {"dart:_builtin", "::", "_loadPort"}, |
| + {"dart:_internal", "::", "_printClosure"}, |
| + {"dart:vmservice_io", "::", "_autoStart"}, |
| + {"dart:vmservice_io", "::", "_ip"}, |
| + {"dart:vmservice_io", "::", "_isFuchsia"}, |
| + {"dart:vmservice_io", "::", "_isWindows"}, |
| + {"dart:vmservice_io", "::", "_originCheckDisabled"}, |
| + {"dart:vmservice_io", "::", "_port"}, |
| + {"dart:vmservice_io", "::", "_signalWatch"}, |
| + {"dart:vmservice_io", "::", "_traceLoading"}, |
| + {NULL, NULL, NULL} // Must be terminated with NULL entries. |
| +}; |
| + |
| bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { |
| // Call CreateIsolateAndSetup which creates an isolate and loads up |
| // the specified application script. |
| @@ -1421,9 +1499,17 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { |
| bool is_main_isolate = true; |
| int exit_code = 0; |
| char* isolate_name = BuildIsolateName(script_name, "main"); |
| + Dart_IsolateFlags flags; |
| + Dart_IsolateFlagsInitialize(&flags); |
| + |
| + if (gen_snapshot_kind == kAppAOT) { |
| + flags.obfuscate = obfuscate; |
| + flags.entry_points = standalone_entry_points; |
| + } |
| + |
| Dart_Isolate isolate = CreateIsolateAndSetupHelper( |
| is_main_isolate, script_name, "main", commandline_package_root, |
| - commandline_packages_file, NULL, &error, &exit_code); |
| + commandline_packages_file, &flags, &error, &exit_code); |
| if (isolate == NULL) { |
| delete[] isolate_name; |
| Log::PrintErr("%s\n", error); |
| @@ -1497,46 +1583,6 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { |
| } |
| if (gen_snapshot_kind == kAppAOT) { |
| - Dart_QualifiedFunctionName standalone_entry_points[] = { |
| - {"dart:_builtin", "::", "_getPrintClosure"}, |
| - {"dart:_builtin", "::", "_getUriBaseClosure"}, |
| - {"dart:_builtin", "::", "_libraryFilePath"}, |
| - {"dart:_builtin", "::", "_resolveInWorkingDirectory"}, |
| - {"dart:_builtin", "::", "_setPackageRoot"}, |
| - {"dart:_builtin", "::", "_setPackagesMap"}, |
| - {"dart:_builtin", "::", "_setWorkingDirectory"}, |
| - {"dart:async", "::", "_setScheduleImmediateClosure"}, |
| - {"dart:io", "::", "_getWatchSignalInternal"}, |
| - {"dart:io", "::", "_makeDatagram"}, |
| - {"dart:io", "::", "_makeUint8ListView"}, |
| - {"dart:io", "::", "_setupHooks"}, |
| - {"dart:io", "CertificateException", "CertificateException."}, |
| - {"dart:io", "Directory", "Directory."}, |
| - {"dart:io", "File", "File."}, |
| - {"dart:io", "FileSystemException", "FileSystemException."}, |
| - {"dart:io", "HandshakeException", "HandshakeException."}, |
| - {"dart:io", "Link", "Link."}, |
| - {"dart:io", "OSError", "OSError."}, |
| - {"dart:io", "TlsException", "TlsException."}, |
| - {"dart:io", "X509Certificate", "X509Certificate._"}, |
| - {"dart:io", "_ExternalBuffer", "get:end"}, |
| - {"dart:io", "_ExternalBuffer", "get:start"}, |
| - {"dart:io", "_ExternalBuffer", "set:data"}, |
| - {"dart:io", "_ExternalBuffer", "set:end"}, |
| - {"dart:io", "_ExternalBuffer", "set:start"}, |
| - {"dart:io", "_Platform", "set:_nativeScript"}, |
| - {"dart:io", "_ProcessStartStatus", "set:_errorCode"}, |
| - {"dart:io", "_ProcessStartStatus", "set:_errorMessage"}, |
| - {"dart:io", "_SecureFilterImpl", "get:ENCRYPTED_SIZE"}, |
| - {"dart:io", "_SecureFilterImpl", "get:SIZE"}, |
| - {"dart:io", "_SecureFilterImpl", "get:buffers"}, |
| - {"dart:isolate", "::", "_getIsolateScheduleImmediateClosure"}, |
| - {"dart:isolate", "::", "_setupHooks"}, |
| - {"dart:isolate", "::", "_startMainIsolate"}, |
| - {"dart:vmservice_io", "::", "main"}, |
| - {NULL, NULL, NULL} // Must be terminated with NULL entries. |
| - }; |
| - |
| uint8_t* feedback_buffer = NULL; |
| intptr_t feedback_length = 0; |
| if (load_feedback_filename != NULL) { |
| @@ -1558,6 +1604,14 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { |
| free(feedback_buffer); |
| } |
| CHECK_RESULT(result); |
| + |
| + if (obfuscate && obfuscation_map_filename != NULL) { |
| + uint8_t* buffer = NULL; |
| + intptr_t size = 0; |
| + result = Dart_GetObfuscationMap(&buffer, &size); |
| + CHECK_RESULT(result); |
| + WriteFile(obfuscation_map_filename, buffer, size); |
| + } |
| } |
| if (gen_snapshot_kind == kAppAOT) { |