summaryrefslogtreecommitdiff
path: root/libcuda
diff options
context:
space:
mode:
authorsspenst <[email protected]>2016-05-12 14:24:05 -0700
committersspenst <[email protected]>2016-05-12 14:24:05 -0700
commit8031edb12c3585777120b141c8579d57df785941 (patch)
tree72b0b3bc4568b70fba426f584200d3aa9f4ad7fd /libcuda
parentc6a19233a5cbf3ee2f89fbd54a0a2eb9375d4ca0 (diff)
parentb2fc784cbb1c2e65736cea88d61509d08fddd83f (diff)
Merge branch 'dev' of https://github.com/ElTantawy/gpgpu-sim_distribution into dev
Diffstat (limited to 'libcuda')
-rw-r--r--libcuda/cuobjdump.l60
-rw-r--r--libcuda/cuobjdump.y30
2 files changed, 69 insertions, 21 deletions
diff --git a/libcuda/cuobjdump.l b/libcuda/cuobjdump.l
index d7086ad..c86a861 100644
--- a/libcuda/cuobjdump.l
+++ b/libcuda/cuobjdump.l
@@ -52,8 +52,11 @@ void cuobjdump_error(const char*);
%s ptxcode
%s sasscode
%s elfcode
-%s header
+%s elfheader
+%s ptxheader
%s endheader
+%s identifier
+%s identifierF
alpha [a-zA-Z]
numeric [0-9]
@@ -67,16 +70,20 @@ newlines {newline}+
"ptxasOptions"{notnewline}*{newline}
[1-9]{numeric}* yylval.string_value = strdup(yytext); return DECIMAL;
+"has debug info"{newline}
+
"Fatbin ptx code:"{newline} {
yy_push_state(ptxcode);
- yy_push_state(header);
+ yy_push_state(identifier);
+ yy_push_state(ptxheader);
yylval.string_value = strdup(yytext);
return PTXHEADER;
}
"Fatbin elf code:"{newline} {
yy_push_state(elfcode);
- yy_push_state(header);
+ yy_push_state(identifier);
+ yy_push_state(elfheader);
yylval.string_value = strdup(yytext);
return ELFHEADER;
}
@@ -94,22 +101,45 @@ newlines {newline}+
/*SASS code tokens*/
<sasscode>{notnewline}*{newline} yylval.string_value = strdup(yytext); return SASSLINE;
+<identifier>"identifier = " BEGIN(identifierF); return H_IDENTIFIER;
+<identifier>"\n" yy_pop_state();
+
+<identifierF>{notnewline}+ yylval.string_value = strdup(yytext); yy_pop_state(); return FILENAME;
+
+
+
+ /*Header tokens*/
+<elfheader>[[:alnum:]_]+ yylval.string_value = strdup(yytext); return IDENTIFIER;
+<elfheader>"================" return H_SEPARATOR;
+<elfheader>"arch = " return H_ARCH;
+<elfheader>"code version = " return H_CODEVERSION;
+<elfheader>\[{numeric},{numeric}\] return CODEVERSION;
+<elfheader>"producer = " return H_PRODUCER;
+<elfheader>"<unknown>" return H_UNKNOWN;
+<elfheader>"host = " return H_HOST;
+<elfheader>"compile_size = " BEGIN(endheader); return H_COMPILESIZE;
+
+
/*Header tokens*/
-<header>[[:alnum:]_]+ yylval.string_value = strdup(yytext); return IDENTIFIER;
-<header>"================" return H_SEPARATOR;
-<header>"arch = " return H_ARCH;
-<header>"code version = " return H_CODEVERSION;
-<header>\[{numeric},{numeric}\] return CODEVERSION;
-<header>"producer = " return H_PRODUCER;
-<header>"host = " return H_HOST;
-<header>"compile_size = " return H_COMPILESIZE;
-<header>"compressed"{newline}
-<header>"identifier = " BEGIN(endheader); return H_IDENTIFIER;
-<header>"has debug info"{newline}
+<ptxheader>[[:alnum:]_]+ yylval.string_value = strdup(yytext); return IDENTIFIER;
+<ptxheader>"================" return H_SEPARATOR;
+<ptxheader>"arch = " return H_ARCH;
+<ptxheader>"code version = " return H_CODEVERSION;
+<ptxheader>\[{numeric},{numeric}\] return CODEVERSION;
+<ptxheader>"producer = " return H_PRODUCER;
+<ptxheader>"host = " return H_HOST;
+<ptxheader>"compile_size = " return H_COMPILESIZE;
+<ptxheader>"compressed"{newline} yy_pop_state(); return H_COMPRESSED;
+
+
+
+
+
/* Looking for the identifier (filename) then the header is done */
/* <endheader>[[:alnum:]_\./]+ yylval.string_value = strdup(yytext); yy_pop_state(); return FILENAME; */
-<endheader>{notnewline}+ yylval.string_value = strdup(yytext); yy_pop_state(); return FILENAME;
+<endheader>{notnewline}+ yylval.string_value = strdup(yytext); yy_pop_state(); return IDENTIFIER;
+
{newline} return NEWLINE;
diff --git a/libcuda/cuobjdump.y b/libcuda/cuobjdump.y
index ec97283..f86d445 100644
--- a/libcuda/cuobjdump.y
+++ b/libcuda/cuobjdump.y
@@ -39,6 +39,7 @@ void setCuobjdumpelffilename(const char* filename);
void setCuobjdumpsassfilename(const char* filename);
int elfserial = 1;
int ptxserial = 1;
+int yydebug=1;
FILE *ptxfile;
FILE *elffile;
FILE *sassfile;
@@ -47,7 +48,7 @@ char filename [1024];
%union {
char* string_value;
}
-%token <string_value> H_SEPARATOR H_ARCH H_CODEVERSION H_PRODUCER H_HOST H_COMPILESIZE H_IDENTIFIER
+%token <string_value> H_SEPARATOR H_ARCH H_CODEVERSION H_PRODUCER H_HOST H_COMPILESIZE H_IDENTIFIER H_UNKNOWN H_COMPRESSED
%token <string_value> CODEVERSION
%token <string_value> STRING
%token <string_value> FILENAME
@@ -61,6 +62,7 @@ char filename [1024];
%%
+
program : {printf("######### cuobjdump parser ########\n");}
emptylines section
| program section;
@@ -73,7 +75,7 @@ section : PTXHEADER {
snprintf(filename, 1024, "_cuobjdump_%d.ptx", ptxserial++);
ptxfile = fopen(filename, "w");
setCuobjdumpptxfilename(filename);
- } headerinfo ptxcode {
+ } headerinfo identifier ptxcode {
fclose(ptxfile);
}
| ELFHEADER {
@@ -81,7 +83,8 @@ section : PTXHEADER {
snprintf(filename, 1024, "_cuobjdump_%d.elf", elfserial);
elffile = fopen(filename, "w");
setCuobjdumpelffilename(filename);
- } headerinfo elfcode {
+ } headerinfo identifier{
+ } elfcode {
fclose(elffile);
snprintf(filename, 1024, "_cuobjdump_%d.sass", elfserial++);
sassfile = fopen(filename, "w");
@@ -93,15 +96,30 @@ section : PTXHEADER {
headerinfo : H_SEPARATOR NEWLINE
H_ARCH IDENTIFIER NEWLINE
H_CODEVERSION CODEVERSION NEWLINE
+ H_PRODUCER H_UNKNOWN NEWLINE
+ H_HOST IDENTIFIER NEWLINE
+ H_COMPILESIZE IDENTIFIER emptylines {setCuobjdumparch($4);};
+ | H_SEPARATOR NEWLINE
+ H_ARCH IDENTIFIER NEWLINE
+ H_CODEVERSION CODEVERSION NEWLINE
H_PRODUCER IDENTIFIER NEWLINE
H_HOST IDENTIFIER NEWLINE
- H_COMPILESIZE IDENTIFIER NEWLINE
- H_IDENTIFIER FILENAME emptylines {setCuobjdumparch($4); setCuobjdumpidentifier($19);};
+ H_COMPILESIZE IDENTIFIER emptylines {setCuobjdumparch($4);};
+ | H_SEPARATOR NEWLINE
+ H_ARCH IDENTIFIER NEWLINE
+ H_CODEVERSION CODEVERSION NEWLINE
+ H_PRODUCER IDENTIFIER NEWLINE
+ H_HOST IDENTIFIER NEWLINE
+ H_COMPILESIZE IDENTIFIER NEWLINE
+ H_COMPRESSED emptylines {setCuobjdumparch($4);};
+
+identifier : H_IDENTIFIER FILENAME {setCuobjdumpidentifier($2);};
+ | ;
ptxcode : ptxcode PTXLINE {fprintf(ptxfile, "%s", $2);}
| ;
-elfcode : elfcode ELFLINE {fprintf(elffile, "%s", $2);}
+elfcode : elfcode ELFLINE {printf(elffile, "%s", $2);}
| ;
sasscode : sasscode SASSLINE {fprintf(sassfile, "%s", $2);}