[jit] Fix the detection of the Selector.GetHandle intrinsics, and fix the emission...
authorZoltan Varga <vargaz@gmail.com>
Tue, 14 Apr 2015 17:19:47 +0000 (13:19 -0400)
committerZoltan Varga <vargaz@gmail.com>
Tue, 14 Apr 2015 17:19:52 +0000 (13:19 -0400)
mono/mini/aot-compiler.c
mono/mini/method-to-ir.c

index cbc56aac47d467ad3b26b97206aa4d0de59f7221..1f49776e3990e9f8a1dcc2d1483507f69ddc3cf1 100644 (file)
@@ -8565,6 +8565,7 @@ static void
 emit_objc_selectors (MonoAotCompile *acfg)
 {
        int i;
+       char symbol [128];
 
        if (!acfg->objc_selectors || acfg->objc_selectors->len == 0)
                return;
@@ -8584,8 +8585,11 @@ emit_objc_selectors (MonoAotCompile *acfg)
        fprintf (acfg->fp, ".section    __DATA,__objc_selrefs,literal_pointers,no_dead_strip\n");
        fprintf (acfg->fp, ".align      3\n");
        for (i = 0; i < acfg->objc_selectors->len; ++i) {
-               fprintf (acfg->fp, "L_OBJC_SELECTOR_REFERENCES_%d:\n", i);
-               fprintf (acfg->fp, ".long       L_OBJC_METH_VAR_NAME_%d\n", i);
+               sprintf (symbol, "L_OBJC_SELECTOR_REFERENCES_%d", i);
+               emit_label (acfg, symbol);
+               sprintf (symbol, "L_OBJC_METH_VAR_NAME_%d", i);
+               emit_pointer (acfg, symbol);
+
        }
        fprintf (acfg->fp, ".section    __TEXT,__cstring,cstring_literals\n");
        for (i = 0; i < acfg->objc_selectors->len; ++i) {
index 97517739d182842f0f7db18346f796dbd76864e3..bfff6b96a9d4e8689377e91582ecc1269bb59237 100755 (executable)
@@ -5690,7 +5690,7 @@ static MonoInst*
 mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **args)
 {
        MonoInst *ins = NULL;
-       
+
        static MonoClass *runtime_helpers_class = NULL;
        if (! runtime_helpers_class)
                runtime_helpers_class = mono_class_from_name (mono_defaults.corlib,
@@ -6523,12 +6523,16 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                 * all inputs:
                 * http://everything2.com/?node_id=1051618
                 */
-       } else if ((!strcmp (cmethod->klass->image->assembly->aname.name, "MonoMac") ||
+       } else if (((!strcmp (cmethod->klass->image->assembly->aname.name, "MonoMac") ||
                    !strcmp (cmethod->klass->image->assembly->aname.name, "monotouch")) &&
-                  !strcmp (cmethod->klass->name_space, "XamCore.ObjCRuntime") &&
-                  !strcmp (cmethod->klass->name, "Selector")) {
+                               !strcmp (cmethod->klass->name_space, "XamCore.ObjCRuntime") &&
+                               !strcmp (cmethod->klass->name, "Selector")) ||
+                          (!strcmp (cmethod->klass->image->assembly->aname.name, "Xamarin.iOS") &&
+                               !strcmp (cmethod->klass->name_space, "ObjCRuntime") &&
+                               !strcmp (cmethod->klass->name, "Selector"))
+                          ) {
 #ifdef MONO_ARCH_HAVE_OBJC_GET_SELECTOR
-               if (!strcmp (cmethod->klass->name, "GetHandle") && fsig->param_count == 1 &&
+               if (!strcmp (cmethod->name, "GetHandle") && fsig->param_count == 1 &&
                    (args [0]->opcode == OP_GOT_ENTRY || args [0]->opcode == OP_AOTCONST) &&
                    cfg->compile_aot) {
                        MonoInst *pi;