| 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;
|
| +
|
| +// 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) {
|
|
|