diff options
Diffstat (limited to 'libcuda')
| -rw-r--r-- | libcuda/Makefile | 192 | ||||
| -rw-r--r-- | libcuda/cuobjdump.l | 96 | ||||
| -rw-r--r-- | libcuda/cuobjdump.y | 83 |
3 files changed, 288 insertions, 83 deletions
diff --git a/libcuda/Makefile b/libcuda/Makefile index b5664db..ec69c13 100644 --- a/libcuda/Makefile +++ b/libcuda/Makefile @@ -73,35 +73,58 @@ endif CPP = g++ $(SNOW) -CC = gcc &(SNOW) +CC = gcc $(SNOW) CREATELIBRARY = 1 DEBUG ?= 0 ifeq ($(DEBUG),1) CXXFLAGS += -Wall -g -fPIC $(GL) + CCFLAGS += -Wall -ggdb -fPIC else CXXFLAGS += -O3 -g -Wall -fPIC $(GL) + CCFLAGS += -Wall -fPIC endif PROG =cuda CXX_SRCS = cuda_runtime_api.cc +LEX_SRCS = cuobjdump.l +YACC_SRCS = cuobjdump.y CXXFLAGS += -DCUDART_VERSION=$(CUDART_VERSION) +LEX = flex +LEXFLAGS = -B +YACC = bison +YFLAGS = -t -d -v --report=all .PHONY: clean OUTPUT_DIR=../$(SIM_OBJ_FILES_DIR)/libcuda OBJS = $(CXX_SRCS:%.cc=$(OUTPUT_DIR)/%.o) - - +OBJS += $(LEX_SRCS:%.l=$(OUTPUT_DIR)/%_lexer.o) +OBJS += $(YACC_SRCS:%.y=$(OUTPUT_DIR)/%_parser.o) #--- Make rules --- lib$(PROG).a: $(OBJS) + echo $(OBJS) ar rcs $(OUTPUT_DIR)/lib$(PROG).a $(OBJS) $(OUTPUT_DIR)/%.o: %.cc $(CPP) $(CXXFLAGS) -I./ -I$(CUDA_INSTALL_PATH)/include -c $< -o $@ + +$(OUTPUT_DIR)/%.o: %.c + $(CC) $(CCFLAGS) -I./ -I$(CUDA_INSTALL_PATH)/include -c $< -o $@ + +%_parser.c: %.y + $(YACC) $(YFLAGS) -p $*_ -o$@ $< + +%_lexer.c: %.l %_parser.h + $(LEX) $(LEXFLAGS) -P $*_ -o$@ $< +# The next rule means just get parser.c and you will get parser.h with it +# in other words, get parser.c and do nothing to get parser.h +%_parser.h: %_parser.c + : + depend: makedepend -p$(OUTPUT_DIR)/ $(CXX_SRCS) 2> /dev/null @@ -109,85 +132,88 @@ clean: rm -f $(PROG) rm -f *.o rm -f lib$(PROG).a + rm -f *_parser.* + rm -f *_lexer.* + # DO NOT DELETE -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/stdlib.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/features.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/sys/cdefs.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/wordsize.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/gnu/stubs.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/gnu/stubs-64.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/sys/types.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/types.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/typesizes.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/time.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/endian.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/endian.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/byteswap.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/sys/select.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/select.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/sigset.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/time.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/sys/sysmacros.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/pthreadtypes.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/alloca.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/stdio.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/libio.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/_G_config.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/wchar.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/stdio_lim.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/sys_errlist.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/string.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/xlocale.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/assert.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/gpu-sim.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/abstract_hardware_model.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/addrdec.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/option_parser.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/shader.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/math.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/huge_val.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/huge_valf.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/huge_vall.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/inf.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/nan.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/mathdef.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/mathcalls.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx.tab.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/delayqueue.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/intersim/statwraper.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/gpu-misc.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/stack.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/dram.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/zlib.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/zconf.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/unistd.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/posix_opt.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/confname.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/getopt.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/scoreboard.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/mem_fetch.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/mem_fetch_status.tup -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/stats.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/gpu-cache.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/tr1_hash_map.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx_loader.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/cuda-sim/cuda-sim.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/shader.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx_sim.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/cuda-sim/opcodes.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/cuda-sim/opcodes.def -../build/debug/libcuda/cuda_runtime_api.o: ../src/cuda-sim/memory.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx_ir.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx.tab.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx_parser.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/gpgpusim_entrypoint.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/abstract_hardware_model.h -../build/debug/libcuda/cuda_runtime_api.o: ../src/stream_manager.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/pthread.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/sched.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/sched.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/signal.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/setjmp.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/semaphore.h -../build/debug/libcuda/cuda_runtime_api.o: /usr/include/bits/semaphore.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/stdlib.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/features.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/sys/cdefs.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/wordsize.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/gnu/stubs.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/gnu/stubs-64.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/sys/types.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/types.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/typesizes.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/time.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/endian.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/endian.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/byteswap.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/sys/select.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/select.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/sigset.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/time.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/sys/sysmacros.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/pthreadtypes.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/alloca.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/stdio.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/libio.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/_G_config.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/wchar.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/stdio_lim.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/sys_errlist.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/string.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/xlocale.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/assert.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/gpu-sim.h +../build/release/libcuda/cuda_runtime_api.o: ../src/abstract_hardware_model.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/addrdec.h +../build/release/libcuda/cuda_runtime_api.o: ../src/option_parser.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/shader.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/math.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/huge_val.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/huge_valf.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/huge_vall.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/inf.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/nan.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/mathdef.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/mathcalls.h +../build/release/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx.tab.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/delayqueue.h +../build/release/libcuda/cuda_runtime_api.o: ../src/intersim/statwraper.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/gpu-misc.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/stack.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/dram.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/zlib.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/zconf.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/unistd.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/posix_opt.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/confname.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/getopt.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/scoreboard.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/mem_fetch.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/mem_fetch_status.tup +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/stats.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/gpu-cache.h +../build/release/libcuda/cuda_runtime_api.o: ../src/tr1_hash_map.h +../build/release/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx_loader.h +../build/release/libcuda/cuda_runtime_api.o: ../src/cuda-sim/cuda-sim.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpu-sim/shader.h +../build/release/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx_sim.h +../build/release/libcuda/cuda_runtime_api.o: ../src/cuda-sim/opcodes.h +../build/release/libcuda/cuda_runtime_api.o: ../src/cuda-sim/opcodes.def +../build/release/libcuda/cuda_runtime_api.o: ../src/cuda-sim/memory.h +../build/release/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx_ir.h +../build/release/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx.tab.h +../build/release/libcuda/cuda_runtime_api.o: ../src/cuda-sim/ptx_parser.h +../build/release/libcuda/cuda_runtime_api.o: ../src/gpgpusim_entrypoint.h +../build/release/libcuda/cuda_runtime_api.o: ../src/abstract_hardware_model.h +../build/release/libcuda/cuda_runtime_api.o: ../src/stream_manager.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/pthread.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/sched.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/sched.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/signal.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/setjmp.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/semaphore.h +../build/release/libcuda/cuda_runtime_api.o: /usr/include/bits/semaphore.h diff --git a/libcuda/cuobjdump.l b/libcuda/cuobjdump.l new file mode 100644 index 0000000..fcd43f8 --- /dev/null +++ b/libcuda/cuobjdump.l @@ -0,0 +1,96 @@ + /*Lex file for output of cuobjdump*/ +%{ +#include <stdio.h> +#include <string.h> +#include "cuobjdump_parser.h" + +#define YY_NEVER_INTERACTIVE 1 + +#define YYDEBUG 1 + +#define yylval cuobjdump_lval + +void cuobjdump_error(const char*); +%} + +%option stack +%option noyywrap +%option yylineno + +%s ptxcode +%s sasscode +%s elfcode +%s header +%s endheader + +alpha [a-zA-Z] +numeric [0-9] +whitespace [ \t] +newline [\n] +notnewline [^\n] +newlines {newline}+ +%% + + +"ptxasOptions"{notnewline}*{newline} +[1-9]{numeric}* yylval.string_value = strdup(yytext); return DECIMAL; + + +"Fatbin ptx code:"{newline} { + yy_push_state(ptxcode); + yy_push_state(header); + yylval.string_value = strdup(yytext); + return PTXHEADER; +} +"Fatbin elf code:"{newline} { + yy_push_state(elfcode); + yy_push_state(header); + yylval.string_value = strdup(yytext); + return ELFHEADER; +} + /*PTX code tokens*/ +<ptxcode>{notnewline}*{newline} yylval.string_value = strdup(yytext); return PTXLINE; + + /*ELF code tokens*/ +<elfcode>{whitespace}*"code for sm_"{numeric}+{newline} { + BEGIN(sasscode); + yylval.string_value = strdup(yytext); + return SASSLINE; +} +<elfcode>{notnewline}*{newline} yylval.string_value = strdup(yytext); return ELFLINE; + + /*SASS code tokens*/ +<sasscode>{notnewline}*{newline} yylval.string_value = strdup(yytext); return SASSLINE; + + /*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>"identifier = " BEGIN(endheader); return H_IDENTIFIER; +<header>"has debug info"{newline} + + /* Looking for the identifier (filename) then the header is done */ +<endheader>[[:alnum:]_\.]+{newline} yylval.string_value = strdup(yytext); yy_pop_state(); return FILENAME; + + +{newline} return NEWLINE; + + /*Reached end of file*/ +<<EOF>> return 0; + + /*No other rule matched. Throw an error*/ +. cuobjdump_error("Invalid token"); + +%% +void cuobjdump_error(const char* message) +{ + printf(" "); printf(message); printf(" near \""); printf(yytext); printf("\""); + printf(" on line "); + char line[5]; sprintf(line, "%i", yylineno); printf(line); + printf("\n"); +} diff --git a/libcuda/cuobjdump.y b/libcuda/cuobjdump.y new file mode 100644 index 0000000..0b20a83 --- /dev/null +++ b/libcuda/cuobjdump.y @@ -0,0 +1,83 @@ + /*Yacc file for output of cuobjdump*/ +%{ +#include <stdio.h> + +int yylex(void); +void yyerror(const char*); +extern void addCuobjdumpSection(int sectiontype); +void setCuobjdumparch(const char* arch); +void setCuobjdumpidentifier(const char* identifier); +void setCuobjdumpptxfilename(const char* filename); +void setCuobjdumpelffilename(const char* filename); +void setCuobjdumpsassfilename(const char* filename); +int elfserial = 1; +int ptxserial = 1; +FILE *ptxfile; +FILE *elffile; +FILE *sassfile; +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> CODEVERSION +%token <string_value> STRING +%token <string_value> FILENAME +%token <string_value> DECIMAL +%token <string_value> PTXHEADER ELFHEADER +%token <string_value> PTXLINE +%token <string_value> ELFLINE +%token <string_value> SASSLINE +%token <string_value> IDENTIFIER +%token <string_value> NEWLINE + +%% + +program : emptylines section + | program section; + +emptylines : emptylines NEWLINE + | ; + +section : PTXHEADER { + addCuobjdumpSection(0); + snprintf(filename, 1024, "_cuobjdump_%d.ptx", ptxserial++); + ptxfile = fopen(filename, "w"); + setCuobjdumpptxfilename(filename); + } headerinfo ptxcode { + fclose(ptxfile); + } + | ELFHEADER { + addCuobjdumpSection(1); + snprintf(filename, 1024, "_cuobjdump_%d.elf", elfserial); + elffile = fopen(filename, "w"); + setCuobjdumpelffilename(filename); + } headerinfo elfcode { + fclose(elffile); + snprintf(filename, 1024, "_cuobjdump_%d.sass", elfserial++); + sassfile = fopen(filename, "w"); + setCuobjdumpsassfilename(filename); + } sasscode { + fclose(sassfile); + }; + +headerinfo : 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 {setCuobjdumparch($4); setCuobjdumpidentifier($19);}; + +ptxcode : ptxcode PTXLINE {fprintf(ptxfile, "%s", $2);} + | ; + +elfcode : elfcode ELFLINE {fprintf(elffile, "%s", $2);} + | ; + +sasscode : sasscode SASSLINE {fprintf(sassfile, "%s", $2)} + | ; + + +%% |
