From d456a651dbe2659db9fae8f6080cc41e4307c187 Mon Sep 17 00:00:00 2001 From: Paul Gofman Date: Thu, 21 Jan 2016 16:53:34 +0300 Subject: [PATCH] libmono: Fix assembly check routines for x86_64 mode. makefiles: temporary workarounds to build pure .net libs in x86_64 arch. --- mcs/build/library.make | 7 +++++-- mcs/class/corlib/Makefile | 4 ++-- mono/mini/method-to-ir.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/mcs/build/library.make b/mcs/build/library.make index c9c0124..c8f31d8 100644 --- a/mcs/build/library.make +++ b/mcs/build/library.make @@ -280,8 +280,11 @@ endif $(the_lib): $(the_libdir)/.stamp $(build_lib): $(response) $(sn) $(BUILT_SOURCES) $(build_libdir:=/.stamp) - $(LIBRARY_COMPILE) $(LIBRARY_FLAGS) $(LIB_MCS_FLAGS) $(MCS_FLAGS_RESOURCE_STRINGS) -target:library -out:$@ $(BUILT_SOURCES_cmdline) @$(response) - $(Q) $(SN) -R $@ $(LIBRARY_SNK) + echo $(LIBRARY_COMPILE) $(LIBRARY_FLAGS) $(LIB_MCS_FLAGS) $(MCS_FLAGS_RESOURCE_STRINGS) -target:library -platform:x64 -out:$@ $(BUILT_SOURCES_cmdline) @$(response) + #$(LIBRARY_COMPILE) $(LIBRARY_FLAGS) $(LIB_MCS_FLAGS) $(MCS_FLAGS_RESOURCE_STRINGS) -target:library -out:$@ $(BUILT_SOURCES_cmdline) @$(response) + $(LIBRARY_COMPILE) $(LIBRARY_FLAGS) $(LIB_MCS_FLAGS) $(MCS_FLAGS_RESOURCE_STRINGS) -target:library -platform:x64 -debug+ -out:$@ $(BUILT_SOURCES_cmdline) @$(response) + #echo $(Q) $(SN) -R $@ $(LIBRARY_SNK) + #$(Q) $(SN) -R $@ $(LIBRARY_SNK) ifdef LIBRARY_USE_INTERMEDIATE_FILE $(the_lib): $(build_lib) diff --git a/mcs/class/corlib/Makefile b/mcs/class/corlib/Makefile index 1162bf5..c9c4506 100644 --- a/mcs/class/corlib/Makefile +++ b/mcs/class/corlib/Makefile @@ -97,7 +97,7 @@ EXTRA_DISTFILES += corlib_cmp.dll.excludes CLEAN_FILES += $(cmplib) $(cmp_response) $(cmp_makefrag) $(cmppdb) $(cmplib): $(cmp_makefrag) $(cmp_response) - $(BOOT_COMPILE) $(LIBRARY_FLAGS) $(cmp_flags) -target:library -out:$@ @$(cmp_response) + $(BOOT_COMPILE) $(LIBRARY_FLAGS) $(cmp_flags) -target:library -platform:x64 -out:$@ @$(cmp_response) $(cmp_response): $(sourcefile) corlib_cmp.dll.excludes @echo Creating $@ ... @@ -148,7 +148,7 @@ test-vts: $(vtslibs) $(vtsdir)/$(PROFILE)_TestLib/BinarySerializationOverVersion $(vtsdir)/$(PROFILE)_TestLib/%/Address.dll: $(vtsdir)/VersionTolerantSerializationTestLib/%/Address.cs @mkdir -p $(dir $@) - $(CSCOMPILE) -target:library -r:$(corlib) -warn:0 -out:$@ $^ + $(CSCOMPILE) -target:library -r:$(corlib) -platform:x64 -warn:0 -out:$@ $^ $(vtsdir)/$(PROFILE)_TestLib/BinarySerializationOverVersions.exe: $(vtsdir)/BinarySerializationOverVersions.cs $(vtsdir)/$(PROFILE)_TestLib/1.0/Address.dll $(test_nunit_dep) $(CSCOMPILE) $(test_nunit_ref) -warn:0 -r:$(corlib) \ diff --git a/mono/mini/method-to-ir.c b/mono/mini/method-to-ir.c index c3cedd9..4544ee3 100644 --- a/mono/mini/method-to-ir.c +++ b/mono/mini/method-to-ir.c @@ -806,10 +806,24 @@ handle_enum: /* * The following tables are used to quickly validate the IL code in type_from_op (). */ + +#if defined(TARGET_AMD64) static const char bin_num_table [STACK_MAX] [STACK_MAX] = { {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV}, {STACK_INV, STACK_I4, STACK_INV, STACK_PTR, STACK_INV, STACK_MP, STACK_INV, STACK_INV}, + {STACK_INV, STACK_INV, STACK_I8, STACK_PTR, STACK_INV, STACK_INV, STACK_INV, STACK_INV}, + {STACK_INV, STACK_PTR, STACK_PTR, STACK_PTR, STACK_INV, STACK_MP, STACK_INV, STACK_INV}, + {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_R8, STACK_INV, STACK_INV, STACK_INV, STACK_R8}, + {STACK_INV, STACK_MP, STACK_INV, STACK_MP, STACK_INV, STACK_PTR, STACK_INV, STACK_INV}, + {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV}, + {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV}, + {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_R8, STACK_INV, STACK_INV, STACK_INV, STACK_R4} +}; +#else +bin_num_table [STACK_MAX] [STACK_MAX] = { + {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV}, + {STACK_INV, STACK_I4, STACK_INV, STACK_PTR, STACK_INV, STACK_MP, STACK_INV, STACK_INV}, {STACK_INV, STACK_INV, STACK_I8, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV}, {STACK_INV, STACK_PTR, STACK_INV, STACK_PTR, STACK_INV, STACK_MP, STACK_INV, STACK_INV}, {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_R8, STACK_INV, STACK_INV, STACK_INV, STACK_R8}, @@ -818,6 +832,7 @@ bin_num_table [STACK_MAX] [STACK_MAX] = { {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV}, {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_R8, STACK_INV, STACK_INV, STACK_INV, STACK_R4} }; +#endif static const char neg_table [] = { @@ -2335,6 +2350,18 @@ handle_enum: if (args [i]->type != STACK_I4 && args [i]->type != STACK_PTR) return 1; continue; +#if defined(TARGET_AMD64) + case MONO_TYPE_I: + case MONO_TYPE_U: + if (args [i]->type != STACK_I4 && args [i]->type != STACK_PTR && args [i]->type != STACK_MP && args [i]->type != STACK_OBJ) + return 1; + continue; + case MONO_TYPE_PTR: + case MONO_TYPE_FNPTR: + if (args [i]->type != STACK_I8 && args [i]->type != STACK_PTR && args [i]->type != STACK_MP && args [i]->type != STACK_OBJ) + return 1; + continue; +#else case MONO_TYPE_I: case MONO_TYPE_U: case MONO_TYPE_PTR: @@ -2342,6 +2369,7 @@ handle_enum: if (args [i]->type != STACK_I4 && args [i]->type != STACK_PTR && args [i]->type != STACK_MP && args [i]->type != STACK_OBJ) return 1; continue; +#endif case MONO_TYPE_CLASS: case MONO_TYPE_STRING: case MONO_TYPE_OBJECT: @@ -2352,7 +2380,11 @@ handle_enum: continue; case MONO_TYPE_I8: case MONO_TYPE_U8: +#if defined(TARGET_AMD64) + if (args [i]->type != STACK_I8 && args [i]->type != STACK_PTR) +#else if (args [i]->type != STACK_I8) +#endif return 1; continue; case MONO_TYPE_R4: -- 2.5.0