[runtime] Implement TLS_OP_GET_REG on linux (#3227)
authorAlexander Kyte <alexmkyte@gmail.com>
Sun, 3 Jul 2016 00:26:04 +0000 (20:26 -0400)
committerZoltan Varga <vargaz@gmail.com>
Sun, 3 Jul 2016 00:26:04 +0000 (20:26 -0400)
mono/mini/mini-llvm.c

index 79f2dbcad50b7dd51bf49528ccddfad2c99b3aa3..90f9a49ba8a987d9c6a4faee414d6f6abeb61f5f 100644 (file)
@@ -5542,7 +5542,11 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                        break;
                }
                case OP_TLS_GET_REG: {
-#if defined(TARGET_AMD64) && defined(TARGET_OSX)
+#if defined(TARGET_AMD64) && defined(__linux__)
+                       // 257 == FS segment register
+                       LLVMTypeRef ptrtype = LLVMPointerType (IntPtrType (), 257);
+                       values [ins->dreg] = LLVMBuildLoad (builder, LLVMBuildIntToPtr (builder, convert (ctx, lhs, LLVMInt64Type ()), ptrtype, ""), "");
+#elif defined(TARGET_AMD64) && defined(TARGET_OSX)
                        /* See emit_tls_get_reg () */
                        // 256 == GS segment register
                        LLVMTypeRef ptrtype = LLVMPointerType (IntPtrType (), 256);