summaryrefslogtreecommitdiff
path: root/src/cuda-sim/ptx_loader.cc
diff options
context:
space:
mode:
authorMengchi Zhang <[email protected]>2019-04-22 23:27:52 -0400
committerMengchi Zhang <[email protected]>2019-04-22 23:27:52 -0400
commitdab24b95a31bf1401e42237ae2b46ab3df22058c (patch)
tree1888e7326cf55b33ab507b6ca4466fe12585751b /src/cuda-sim/ptx_loader.cc
parentc4fe0159232673b0c75bacd33b2e96d6a68dfbaf (diff)
Move ptxinfo to reentrant
Signed-off-by: Mengchi Zhang <[email protected]>
Diffstat (limited to 'src/cuda-sim/ptx_loader.cc')
-rw-r--r--src/cuda-sim/ptx_loader.cc34
1 files changed, 27 insertions, 7 deletions
diff --git a/src/cuda-sim/ptx_loader.cc b/src/cuda-sim/ptx_loader.cc
index 8c6f361..da7c32d 100644
--- a/src/cuda-sim/ptx_loader.cc
+++ b/src/cuda-sim/ptx_loader.cc
@@ -50,9 +50,12 @@ extern int ptx__scan_string(const char*);
extern std::map<unsigned,const char*> get_duplicate();
const char *g_ptxinfo_filename;
-extern int ptxinfo_parse();
-extern int ptxinfo_debug;
-extern FILE *ptxinfo_in;
+
+typedef void * yyscan_t;
+extern int ptxinfo_lex_init(yyscan_t* scanner);
+extern void ptxinfo_set_in (FILE * _in_str ,yyscan_t yyscanner );
+extern int ptxinfo_parse(yyscan_t scanner);
+extern int ptxinfo_lex_destroy(yyscan_t scanner);
static bool g_save_embedded_ptx;
static int g_occupancy_sm_number;
@@ -347,8 +350,13 @@ void gpgpu_ptx_info_load_from_filename( const char *filename, unsigned sm_versio
}
g_ptxinfo_filename = strdup(ptxas_filename.c_str());
+ FILE *ptxinfo_in;
ptxinfo_in = fopen(g_ptxinfo_filename,"r");
- ptxinfo_parse();
+ yyscan_t scanner;
+ ptxinfo_lex_init(&scanner);
+ ptxinfo_set_in(ptxinfo_in, scanner);
+ ptxinfo_parse(scanner);
+ ptxinfo_lex_destroy(scanner);
fclose(ptxinfo_in);
}
@@ -410,9 +418,15 @@ void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num
if( result != 0 ) {
// 65280 = duplicate errors
if (result == 65280) {
+ FILE *ptxinfo_in;
ptxinfo_in = fopen(tempfile_ptxinfo,"r");
g_ptxinfo_filename = tempfile_ptxinfo;
- ptxinfo_parse();
+ yyscan_t scanner;
+ ptxinfo_lex_init(&scanner);
+ ptxinfo_set_in(ptxinfo_in, scanner);
+ ptxinfo_parse(scanner);
+ ptxinfo_lex_destroy(scanner);
+ fclose(ptxinfo_in);
fix_duplicate_errors(fname2);
snprintf(commandline,1024,"$CUDA_INSTALL_PATH/bin/ptxas %s -v %s --output-file /dev/null 2> %s",
@@ -495,9 +509,15 @@ void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num
g_ptxinfo_filename = final_tempfile_ptxinfo;
else
g_ptxinfo_filename = tempfile_ptxinfo;
+ FILE *ptxinfo_in;
ptxinfo_in = fopen(g_ptxinfo_filename,"r");
- ptxinfo_parse();
+ yyscan_t scanner;
+ ptxinfo_lex_init(&scanner);
+ ptxinfo_set_in(ptxinfo_in, scanner);
+ ptxinfo_parse(scanner);
+ ptxinfo_lex_destroy(scanner);
+ fclose(ptxinfo_in);
snprintf(commandline,1024,"rm -f *info");
if( system(commandline) != 0 ) {
@@ -515,4 +535,4 @@ void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num
exit(1);
}
}
-} \ No newline at end of file
+}