aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/suricata/src/ptxdump.py
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/suricata/src/ptxdump.py')
-rw-r--r--framework/src/suricata/src/ptxdump.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/framework/src/suricata/src/ptxdump.py b/framework/src/suricata/src/ptxdump.py
new file mode 100644
index 00000000..097e5173
--- /dev/null
+++ b/framework/src/suricata/src/ptxdump.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+from string import *
+import os, getopt, sys, platform
+
+header = '''/* Auto-generated by ptxdump.py DO NOT EDIT
+*
+* This file contains the ptx code of the Cuda kernels.
+* A kernel is identified by its name and the compute capability (e.g. _sm_10).
+*/
+'''
+
+def FormatCharHex(d):
+ s = hex(ord(d))
+ if len(s) == 3:
+ s = "0x0" + s[2]
+ return s
+
+def CleanFileName(f):
+ v = f.replace("-","_")
+ v = v.replace(".ptx","")
+ return v
+
+if not(len(sys.argv[1:]) >= 2):
+ print("Usage: ptx2c.py <output> <in.ptx ..> ")
+ print("Description: creates a header file containing the ptx files as character array" + os.linesep)
+ sys.exit(0)
+
+out_h = sys.argv[1] + ".h"
+out = open(out_h, 'w')
+
+out.writelines(header)
+out.writelines("#ifdef __SC_CUDA_SUPPORT__\n")
+out.writelines("#ifndef __ptxdump_h__\n")
+out.writelines("#define __ptxdump_h__\n\n")
+
+# write char arrays
+for file in sys.argv[2:]:
+ in_ptx = open(file, 'r')
+ source = in_ptx.read()
+ source_len = len(source)
+
+ varname = CleanFileName(file)
+
+ out.writelines("const unsigned char " + varname + "[" + str(source_len+1) + "] = {\n")
+ newlinecnt = 0
+ for i in range(0, source_len):
+ out.write(FormatCharHex(source[i]) + ", ")
+ newlinecnt += 1
+ if newlinecnt == 16:
+ newlinecnt = 0
+ out.write("\n")
+ out.write("0x00\n};\n\n")
+
+ print(sys.argv[0] + ": CUmodule " + varname + " packed successfully")
+
+# write retrieval function
+out.writelines("const unsigned char* SCCudaPtxDumpGetModule(const char* module){\n");
+for file in sys.argv[2:]:
+ out.writelines('\tif (!strcmp(module, "' + file.replace(".ptx","")+'"))\n')
+ out.writelines("\t\treturn " + CleanFileName(file)+";\n")
+out.writelines('\tSCLogError(SC_ERR_FATAL, "Error in SCCudaPtxDumpGetModule, module %s not found. Exiting...",module);\n')
+out.writelines("\texit(EXIT_FAILURE);\n")
+out.writelines("};\n")
+
+out.writelines("#endif /* __ptxdump_h__ */\n")
+out.writelines("#endif /* __SC_CUDA_SUPPORT__ */\n")
+
+print(sys.argv[0] + ": " + out_h + " written successfully")
+
+in_ptx.close()
+out.close()