From 6bd512ea5b8cc098903fcb2dd802e652bbed2cb4 Mon Sep 17 00:00:00 2001 From: "Andrew M. B. Boktor" Date: Wed, 2 May 2012 12:33:33 -0800 Subject: Moving things where they belong cubojdump.l/.y are used to parse the output of cuobjdump, and thus should be part of libcuda not cuobjdump_to_ptxplus Included are also modifications to Makefiles [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 12255] --- Makefile | 14 +-- cuobjdump_to_ptxplus/Makefile | 21 ++++- cuobjdump_to_ptxplus/cuobjdump.l | 96 -------------------- cuobjdump_to_ptxplus/cuobjdump.y | 83 ----------------- libcuda/Makefile | 192 ++++++++++++++++++++++----------------- libcuda/cuobjdump.l | 96 ++++++++++++++++++++ libcuda/cuobjdump.y | 83 +++++++++++++++++ 7 files changed, 314 insertions(+), 271 deletions(-) delete mode 100644 cuobjdump_to_ptxplus/cuobjdump.l delete mode 100644 cuobjdump_to_ptxplus/cuobjdump.y create mode 100644 libcuda/cuobjdump.l create mode 100644 libcuda/cuobjdump.y diff --git a/Makefile b/Makefile index 8abe321..ee64fc2 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,8 @@ else ifeq ($(NVOPENCL_INCDIR),) else TARGETS += $(SIM_LIB_DIR)/libOpenCL.so endif - TARGETS += decuda_to_ptxplus/decuda_to_ptxplus +# TARGETS += decuda_to_ptxplus/decuda_to_ptxplus + TARGETS += cuobjdump_to_ptxplus/cuobjdump_to_ptxplus gpgpusim: makedirs $(TARGETS) @@ -75,8 +76,6 @@ $(SIM_LIB_DIR)/libcudart.so: $(LIBS) cudalib $(SIM_OBJ_FILES_DIR)/gpgpu-sim/*.o \ $(SIM_OBJ_FILES_DIR)/intersim/*.o \ $(SIM_OBJ_FILES_DIR)/*.o -lm -lz -lGL -pthread \ - $(GPGPUSIM_ROOT)/cuobjdump_to_ptxplus/cuobjdump_parser.o \ - $(GPGPUSIM_ROOT)/cuobjdump_to_ptxplus/cuobjdump_lexer.o \ -o $(SIM_LIB_DIR)/libcudart.so if [ ! -f $(SIM_LIB_DIR)/libcudart.so.2 ]; then ln -s libcudart.so $(SIM_LIB_DIR)/libcudart.so.2; fi if [ ! -f $(SIM_LIB_DIR)/libcudart.so.3 ]; then ln -s libcudart.so $(SIM_LIB_DIR)/libcudart.so.3; fi @@ -90,8 +89,6 @@ $(SIM_LIB_DIR)/libcudart.dylib: $(LIBS) cudalib $(SIM_OBJ_FILES_DIR)/gpgpu-sim/*.o \ $(SIM_OBJ_FILES_DIR)/intersim/*.o \ $(SIM_OBJ_FILES_DIR)/*.o -lm -lz -pthread \ - $(GPGPUSIM_ROOT)/cuobjdump_to_ptxplus/cuobjdump_parser.o \ - $(GPGPUSIM_ROOT)/cuobjdump_to_ptxplus/cuobjdump_lexer.o \ -o $(SIM_LIB_DIR)/libcudart.dylib $(SIM_LIB_DIR)/libOpenCL.so: $(LIBS) opencllib @@ -109,7 +106,6 @@ $(SIM_LIB_DIR)/libOpenCL.so: $(LIBS) opencllib cudalib: cuda-sim $(MAKE) -C ./libcuda/ depend $(MAKE) -C ./libcuda/ - $(MAKE) -C cuobjdump_to_ptxplus/ cuda-sim: $(MAKE) -C ./src/cuda-sim/ depend @@ -134,6 +130,10 @@ decuda_to_ptxplus/decuda_to_ptxplus: $(MAKE) -C ./decuda_to_ptxplus/ depend $(MAKE) -C ./decuda_to_ptxplus/ +cuobjdump_to_ptxplus/cuobjdump_to_ptxplus: + $(MAKE) -C ./cuobjdump_to_ptxplus/ depend + $(MAKE) -C ./cuobjdump_to_ptxplus/ + makedirs: if [ ! -d $(SIM_LIB_DIR) ]; then mkdir -p $(SIM_LIB_DIR); fi; if [ ! -d $(SIM_OBJ_FILES_DIR)/libcuda ]; then mkdir -p $(SIM_OBJ_FILES_DIR)/libcuda; fi; @@ -165,7 +165,7 @@ endif $(MAKE) clean -C ./src/cuda-sim/ $(MAKE) clean -C ./src/gpgpu-sim/ $(MAKE) clean -C ./src/ - $(MAKE) clean -C ./decuda_to_ptxplus/ +# $(MAKE) clean -C ./decuda_to_ptxplus/ $(MAKE) clean -C ./cuobjdump_to_ptxplus/ rm -rf $(SIM_LIB_DIR) rm -rf $(SIM_OBJ_FILES_DIR) diff --git a/cuobjdump_to_ptxplus/Makefile b/cuobjdump_to_ptxplus/Makefile index f58a0fd..2f3c202 100644 --- a/cuobjdump_to_ptxplus/Makefile +++ b/cuobjdump_to_ptxplus/Makefile @@ -12,7 +12,6 @@ LD = g++ LDFLAGS = ${CCFLAGS} -CUOBJDUMP_PARSER_OBJECTS = cuobjdump_parser.o cuobjdump_lexer.o SASS_PARSER_OBJECTS = sass_lexer.o sass_parser.o ELF_PARSER_OBJECTS = elf_lexer.o elf_parser.o HEADER_PARSER_OBJECTS = headerParser.o headerLexer.o @@ -20,7 +19,7 @@ PTX_PARSER_OBJECTS = ptx.tab.o lex.ptx_.o all: cuobjdump_to_ptxplus -cuobjdump_to_ptxplus: stringList.o decudaInst.o decudaInstList.o cuobjdumpInst.o cuobjdumpInstList.o cuobjdump_to_ptxplus.o $(PTX_PARSER_OBJECTS) $(SASS_PARSER_OBJECTS) $(ELF_PARSER_OBJECTS) $(HEADER_PARSER_OBJECTS) $(CUOBJDUMP_PARSER_OBJECTS) +cuobjdump_to_ptxplus: stringList.o decudaInst.o decudaInstList.o cuobjdumpInst.o cuobjdumpInstList.o cuobjdump_to_ptxplus.o $(PTX_PARSER_OBJECTS) $(SASS_PARSER_OBJECTS) $(ELF_PARSER_OBJECTS) $(HEADER_PARSER_OBJECTS) ${LD} ${LDFLAGS} -ocuobjdump_to_ptxplus stringList.o decudaInst.o decudaInstList.o headerParser.o headerLexer.o cuobjdumpInst.o cuobjdumpInstList.o cuobjdump_to_ptxplus.o lex.ptx_.o ptx.tab.o $(SASS_PARSER_OBJECTS) $(ELF_PARSER_OBJECTS) stringList.o: ../decuda_to_ptxplus/stringList.cc ../decuda_to_ptxplus/stringList.h @@ -129,6 +128,11 @@ cuobjdump_lexer.o: cuobjdump_lexer.c %.o: %.cpp $(CXX) ${CXXFLAGS} -c -o $@ $< +SRCS = $(shell ls *.cc) + +depend: + makedepend $(SRCS) 2> /dev/null + clean: rm -f ./opcodes.def ./opcodes.h rm -f ./lex.ptx_.c ./ptx.tab.c ./ptx.tab.h ./lex.ptx_.o ./ptx.tab.o ptx.output @@ -143,3 +147,16 @@ clean: rm -f ./cuobjdump_parser.o ./cuobjdump_parser.c ./cuobjdump_parser.output ./cuobjdump_parser.h rm -f ./cuobjdump_lexer.o ./cuobjdump_lexer.c rm -f ./elf_lexer.o ./elf_parser.o ./elf_lexer.cpp ./elf_parser.cpp ./elf_parser.hpp ./elf_parser.output +# DO NOT DELETE + +cuobjdumpInst.o: cuobjdumpInst.h +cuobjdumpInstList.o: cuobjdumpInstList.h cuobjdumpInst.h +cuobjdump_to_ptxplus.o: cuobjdumpInstList.h cuobjdumpInst.h +cuobjdump_to_ptxplus.o: /usr/include/stdio.h /usr/include/features.h +cuobjdump_to_ptxplus.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +cuobjdump_to_ptxplus.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +cuobjdump_to_ptxplus.o: /usr/include/bits/types.h +cuobjdump_to_ptxplus.o: /usr/include/bits/typesizes.h /usr/include/libio.h +cuobjdump_to_ptxplus.o: /usr/include/_G_config.h /usr/include/wchar.h +cuobjdump_to_ptxplus.o: /usr/include/bits/stdio_lim.h +cuobjdump_to_ptxplus.o: /usr/include/bits/sys_errlist.h diff --git a/cuobjdump_to_ptxplus/cuobjdump.l b/cuobjdump_to_ptxplus/cuobjdump.l deleted file mode 100644 index fcd43f8..0000000 --- a/cuobjdump_to_ptxplus/cuobjdump.l +++ /dev/null @@ -1,96 +0,0 @@ - /*Lex file for output of cuobjdump*/ -%{ -#include -#include -#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*/ -{notnewline}*{newline} yylval.string_value = strdup(yytext); return PTXLINE; - - /*ELF code tokens*/ -{whitespace}*"code for sm_"{numeric}+{newline} { - BEGIN(sasscode); - yylval.string_value = strdup(yytext); - return SASSLINE; -} -{notnewline}*{newline} yylval.string_value = strdup(yytext); return ELFLINE; - - /*SASS code tokens*/ -{notnewline}*{newline} yylval.string_value = strdup(yytext); return SASSLINE; - - /*Header tokens*/ -
[[:alnum:]_]+ yylval.string_value = strdup(yytext); return IDENTIFIER; -
"================" return H_SEPARATOR; -
"arch = " return H_ARCH; -
"code version = " return H_CODEVERSION; -
\[{numeric},{numeric}\] return CODEVERSION; -
"producer = " return H_PRODUCER; -
"host = " return H_HOST; -
"compile_size = " return H_COMPILESIZE; -
"identifier = " BEGIN(endheader); return H_IDENTIFIER; -
"has debug info"{newline} - - /* Looking for the identifier (filename) then the header is done */ -[[:alnum:]_\.]+{newline} yylval.string_value = strdup(yytext); yy_pop_state(); return FILENAME; - - -{newline} return NEWLINE; - - /*Reached end of file*/ -<> 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/cuobjdump_to_ptxplus/cuobjdump.y b/cuobjdump_to_ptxplus/cuobjdump.y deleted file mode 100644 index 0b20a83..0000000 --- a/cuobjdump_to_ptxplus/cuobjdump.y +++ /dev/null @@ -1,83 +0,0 @@ - /*Yacc file for output of cuobjdump*/ -%{ -#include - -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 H_SEPARATOR H_ARCH H_CODEVERSION H_PRODUCER H_HOST H_COMPILESIZE H_IDENTIFIER -%token CODEVERSION -%token STRING -%token FILENAME -%token DECIMAL -%token PTXHEADER ELFHEADER -%token PTXLINE -%token ELFLINE -%token SASSLINE -%token IDENTIFIER -%token 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)} - | ; - - -%% 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 +#include +#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*/ +{notnewline}*{newline} yylval.string_value = strdup(yytext); return PTXLINE; + + /*ELF code tokens*/ +{whitespace}*"code for sm_"{numeric}+{newline} { + BEGIN(sasscode); + yylval.string_value = strdup(yytext); + return SASSLINE; +} +{notnewline}*{newline} yylval.string_value = strdup(yytext); return ELFLINE; + + /*SASS code tokens*/ +{notnewline}*{newline} yylval.string_value = strdup(yytext); return SASSLINE; + + /*Header tokens*/ +
[[:alnum:]_]+ yylval.string_value = strdup(yytext); return IDENTIFIER; +
"================" return H_SEPARATOR; +
"arch = " return H_ARCH; +
"code version = " return H_CODEVERSION; +
\[{numeric},{numeric}\] return CODEVERSION; +
"producer = " return H_PRODUCER; +
"host = " return H_HOST; +
"compile_size = " return H_COMPILESIZE; +
"identifier = " BEGIN(endheader); return H_IDENTIFIER; +
"has debug info"{newline} + + /* Looking for the identifier (filename) then the header is done */ +[[:alnum:]_\.]+{newline} yylval.string_value = strdup(yytext); yy_pop_state(); return FILENAME; + + +{newline} return NEWLINE; + + /*Reached end of file*/ +<> 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 + +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 H_SEPARATOR H_ARCH H_CODEVERSION H_PRODUCER H_HOST H_COMPILESIZE H_IDENTIFIER +%token CODEVERSION +%token STRING +%token FILENAME +%token DECIMAL +%token PTXHEADER ELFHEADER +%token PTXLINE +%token ELFLINE +%token SASSLINE +%token IDENTIFIER +%token 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)} + | ; + + +%% -- cgit v1.3