Example #1
0
        protected override void WriteSymbols(StreamWriter output)
        {
            if (String.IsNullOrEmpty(AndroidPackageName))
            {
                throw new InvalidOperationException("Android package name must be set");
            }

            if (UsesMonoAOT && String.IsNullOrEmpty(MonoAOTMode))
            {
                throw new InvalidOperationException("Mono AOT enabled but no AOT mode specified");
            }

            string stringLabel = GetStringLabel();

            WriteData(output, AndroidPackageName, stringLabel);

            WriteDataSection(output, "application_config");
            WriteSymbol(output, "application_config", TargetProvider.GetStructureAlignment(true), fieldAlignBytes: 4, isGlobal: true, alwaysWriteSize: true, structureWriter: () => {
                // Order of fields and their type must correspond *exactly* to that in
                // src/monodroid/jni/xamarin-app.h ApplicationConfig structure
                WriteCommentLine(output, "uses_mono_llvm");
                uint size = WriteData(output, UsesMonoLLVM);

                WriteCommentLine(output, "uses_mono_aot");
                size += WriteData(output, UsesMonoAOT);

                WriteCommentLine(output, "uses_assembly_preload");
                size += WriteData(output, UsesAssemblyPreload);

                WriteCommentLine(output, "is_a_bundled_app");
                size += WriteData(output, IsBundledApp);

                WriteCommentLine(output, "environment_variable_count");
                size += WriteData(output, environmentVariables == null ? 0 : environmentVariables.Count * 2);

                WriteCommentLine(output, "system_property_count");
                size += WriteData(output, systemProperties == null ? 0 : systemProperties.Count * 2);

                // After uses_embedded_dsos was removed, we need padding on 64-bit
                if (TargetProvider.Is64Bit)
                {
                    size += WriteDataPadding(output, 4);
                }

                WriteCommentLine(output, "android_package_name");
                size += WritePointer(output, stringLabel);

                return(size);
            });

            stringLabel = GetStringLabel();
            WriteData(output, MonoAOTMode ?? String.Empty, stringLabel);
            WriteDataSection(output, "mono_aot_mode_name");
            WritePointer(output, stringLabel, "mono_aot_mode_name", isGlobal: true);

            WriteNameValueStringArray(output, "app_environment_variables", environmentVariables);
            WriteNameValueStringArray(output, "app_system_properties", systemProperties);
        }
Example #2
0
        void WriteCompressedAssembliesStructure(StreamWriter output, uint count, string descriptorsLabel)
        {
            WriteDataSection(output, CompressedAssembliesField);
            WriteSymbol(output, CompressedAssembliesField, TargetProvider.GetStructureAlignment(true), packed: false, isGlobal: true, alwaysWriteSize: true, structureWriter: () => {
                // Order of fields and their type must correspond *exactly* to that in
                // src/monodroid/jni/xamarin-app.h CompressedAssemblies structure
                WriteCommentLine(output, "count");
                uint size = WriteData(output, count);

                WriteCommentLine(output, "descriptors");
                size += WritePointer(output, descriptorsLabel);

                return(size);
            });
        }
Example #3
0
        void WriteNameValueStringArray(StreamWriter output, string label, SortedDictionary <string, string> entries)
        {
            if (entries == null || entries.Count == 0)
            {
                WriteDataSection(output, label);
                WriteSymbol(output, label, TargetProvider.GetStructureAlignment(true), packed: false, isGlobal: true, alwaysWriteSize: true, structureWriter: null);
                return;
            }

            var entry_labels = new List <string> ();

            foreach (var kvp in entries)
            {
                string name        = kvp.Key;
                string value       = kvp.Value ?? String.Empty;
                string stringLabel = GetStringLabel();
                WriteData(output, name, stringLabel);
                entry_labels.Add(stringLabel);

                stringLabel = GetStringLabel();
                WriteData(output, value, stringLabel);
                entry_labels.Add(stringLabel);
            }

            WriteDataSection(output, label);
            WriteSymbol(output, label, TargetProvider.GetStructureAlignment(true), packed: false, isGlobal: true, alwaysWriteSize: true, structureWriter: () => {
                uint size = 0;

                foreach (string l in entry_labels)
                {
                    size += WritePointer(output, MakeLocalLabel(l));
                }

                return(size);
            });
        }
Example #4
0
        protected override void WriteSymbols(StreamWriter output)
        {
            if (String.IsNullOrEmpty(AndroidPackageName))
            {
                throw new InvalidOperationException("Android package name must be set");
            }

            if (UsesMonoAOT && String.IsNullOrEmpty(MonoAOTMode))
            {
                throw new InvalidOperationException("Mono AOT enabled but no AOT mode specified");
            }

            string stringLabel = GetStringLabel();

            WriteData(output, AndroidPackageName, stringLabel);

            WriteDataSection(output, "application_config");
            WriteSymbol(output, "application_config", TargetProvider.GetStructureAlignment(true), packed: false, isGlobal: true, alwaysWriteSize: true, structureWriter: () => {
                // Order of fields and their type must correspond *exactly* to that in
                // src/monodroid/jni/xamarin-app.h ApplicationConfig structure
                WriteCommentLine(output, "uses_mono_llvm");
                uint size = WriteData(output, UsesMonoLLVM);

                WriteCommentLine(output, "uses_mono_aot");
                size += WriteData(output, UsesMonoAOT);

                WriteCommentLine(output, "uses_assembly_preload");
                size += WriteData(output, UsesAssemblyPreload);

                WriteCommentLine(output, "is_a_bundled_app");
                size += WriteData(output, IsBundledApp);

                WriteCommentLine(output, "broken_exception_transitions");
                size += WriteData(output, BrokenExceptionTransitions);

                WriteCommentLine(output, "instant_run_enabled");
                size += WriteData(output, InstantRunEnabled);

                WriteCommentLine(output, "jni_add_native_method_registration_attribute_present");
                size += WriteData(output, JniAddNativeMethodRegistrationAttributePresent);

                WriteCommentLine(output, "have_runtime_config_blob");
                size += WriteData(output, HaveRuntimeConfigBlob);

                WriteCommentLine(output, "bound_exception_type");
                size += WriteData(output, (byte)BoundExceptionType);

                WriteCommentLine(output, "package_naming_policy");
                size += WriteData(output, (uint)PackageNamingPolicy);

                WriteCommentLine(output, "environment_variable_count");
                size += WriteData(output, environmentVariables == null ? 0 : environmentVariables.Count * 2);

                WriteCommentLine(output, "system_property_count");
                size += WriteData(output, systemProperties == null ? 0 : systemProperties.Count * 2);

                WriteCommentLine(output, "android_package_name");
                size += WritePointer(output, MakeLocalLabel(stringLabel));

                return(size);
            });

            stringLabel = GetStringLabel();
            WriteData(output, MonoAOTMode ?? String.Empty, stringLabel);
            WriteDataSection(output, "mono_aot_mode_name");
            WritePointer(output, MakeLocalLabel(stringLabel), "mono_aot_mode_name", isGlobal: true);

            WriteNameValueStringArray(output, "app_environment_variables", environmentVariables);
            WriteNameValueStringArray(output, "app_system_properties", systemProperties);
        }