[PATCH] Fix kernel debug data emission
authorPekka Jääskeläinen <pekka.jaaskelainen@parmance.com>
Thu, 4 Oct 2018 14:20:51 +0000 (17:20 +0300)
committerAndreas Beckmann <anbe@debian.org>
Mon, 4 Feb 2019 23:39:59 +0000 (23:39 +0000)
It is now (again) generated with the OpenCL standard build option -g.

Gbp-Pq: Name 0002-Fix-kernel-debug-data-emission.patch

lib/CL/pocl_build.c
lib/CL/pocl_llvm_build.cc
lib/llvmopencl/Workgroup.cc
lib/llvmopencl/linker.cpp

index 91dd2c967dd677922a9f15c5893401d897e8ea5c..d4c93ef10061f24ff6bb230a99226605c2c38ef1 100644 (file)
@@ -273,7 +273,8 @@ process_options (const char *options, char *modded_options, char *link_options,
       else if (memcmp (token, "-g", 2) == 0)
         {
 #ifndef LLVM_OLDER_THAN_3_8
-          token = "-debug-info-kind=line-tables-only";
+          token = "-dwarf-column-info -debug-info-kind=limited " \
+           "-dwarf-version=4 -debugger-tuning=gdb";
 #endif
         }
       else if (memcmp (token, "-D", 2) == 0 || memcmp (token, "-I", 2) == 0)
index 601eb729a9419d52f46f73244085c1068c98e34e..c2b42440e37c39be407fb0afe9867a6bfd341da2 100644 (file)
@@ -537,9 +537,6 @@ int pocl_llvm_build_program(cl_program program,
 
 #ifdef LLVM_OLDER_THAN_3_9
   (*mod)->setPICLevel(PICLevel::Large);
-#else
-  (*mod)->setPICLevel(PICLevel::BigPIC);
-  (*mod)->setPIELevel(PIELevel::Large);
 #endif
 
 
@@ -635,9 +632,6 @@ int pocl_llvm_link_program(cl_program program, unsigned device_i,
     linked_module->setDataLayout(libmodule->getDataLayout());
 #ifdef LLVM_OLDER_THAN_3_9
     linked_module->setPICLevel(PICLevel::Large);
-#else
-    linked_module->setPICLevel(PICLevel::BigPIC);
-    linked_module->setPIELevel(PIELevel::Large);
 #endif
 
 #else
index f5a7f2cfbefdf00e532504dd273ce9e65048694f..413d2dd3528fde412112a7c0852ffc784b9e6a93 100644 (file)
@@ -677,6 +677,8 @@ static Function *createLauncher(Module &M, Function *F,
     replacePrintfCalls(pb, pbp, pbc, true, poclPrintf, M, L, printfCache);
   }
 
+  L->setSubprogram(F->getSubprogram());
+
   return L;
 }
 
index 4a7337953d9fcb8afb208822eed7f64143d5d188..79508564e236d1879504b2d1ad40373d46b64dab 100644 (file)
@@ -343,20 +343,21 @@ static void shared_copy(llvm::Module *program, const llvm::Module *lib,
   llvm::Module::const_named_metadata_iterator mi,me;
   for (mi=lib->named_metadata_begin(), me=lib->named_metadata_end();
        mi != me; mi++) {
-      const NamedMDNode &NMD=*mi;
-      /* This causes problems, because multiple wchar_size */
-      if (NMD.getName() == StringRef("llvm.module.flags"))
-        continue;
-      /* This causes problems with NVidia,
-       * and is regenerated by pocl-ptx-gen anyway */
-      if (NMD.getName() == StringRef("nvvm.annotations"))
-        continue;
-      DB_PRINT(" %s:\n", NMD.getName().data());
-      NamedMDNode *NewNMD=program->getOrInsertNamedMetadata(NMD.getName());
-      for (unsigned i=0, e=NMD.getNumOperands(); i != e; ++i)
-        NewNMD->addOperand(MapMetadata(NMD.getOperand(i), vvm));
+    const NamedMDNode &NMD = *mi;
+    // This causes problems with NVidia, and is regenerated by pocl-ptx-gen
+    // anyway.
+    if (NMD.getName() == StringRef("nvvm.annotations"))
+      continue;
+    DB_PRINT(" %s:\n", NMD.getName().data());
+    if (NamedMDNode *Old = program->getNamedMetadata(NMD.getName())) {
+      // Let's not overwrite existing metadata such as llvm.module.flags and
+      // opencl.ocl.version.
+      continue;
+    }
+    NamedMDNode *NewNMD = program->getOrInsertNamedMetadata(NMD.getName());
+    for (unsigned i = 0, e = NMD.getNumOperands(); i != e; ++i)
+      NewNMD->addOperand(MapMetadata(NMD.getOperand(i), vvm));
   }
-
 }
 
 int link(llvm::Module *program, const llvm::Module *lib, std::string &log) {