Mercurial > projects > dstress
comparison dstress.c @ 971:8da09834526d
* Valgrind support is now part of dstress.c instead of crashRun.c
* fixed parallel build of test cases with multiple object files
author | thomask |
---|---|
date | Thu, 20 Apr 2006 08:50:01 +0000 |
parents | 8b6d2dcf9954 |
children | 1aba99b7f01c |
comparison
equal
deleted
inserted
replaced
970:3a6109fe74c5 | 971:8da09834526d |
---|---|
153 | 153 |
154 #define TORTURE_PREFIX "torture-" | 154 #define TORTURE_PREFIX "torture-" |
155 | 155 |
156 #ifdef USE_POSIX | 156 #ifdef USE_POSIX |
157 #define CRASH_RUN "./crashRun 30 2000" | 157 #define CRASH_RUN "./crashRun 30 2000" |
158 #ifdef USE_VALGRIND | |
159 #define VALGRIND "valgrind --leak-check=no -q --suppressions=valgrind.suppress" | |
160 #else | |
161 #define VALGRIND "" | |
162 #endif | |
158 #define TMP_DIR "./obj" | 163 #define TMP_DIR "./obj" |
164 #define RM_DIR "rm -rf" | |
159 #else | 165 #else |
160 #ifdef USE_WINDOWS | 166 #ifdef USE_WINDOWS |
167 #define VALGRIND "" | |
161 #define TMP_DIR ".\\obj" | 168 #define TMP_DIR ".\\obj" |
162 #else | 169 #else |
163 #error OS dependent file names not defined | 170 #error OS dependent file names not defined |
164 #endif | 171 #endif |
165 #endif | 172 #endif |
173 | |
174 char* tmp_dir; | |
166 | 175 |
167 #ifdef USE_WINDOWS | 176 #ifdef USE_WINDOWS |
168 HANDLE originalStdout, originalStderr; | 177 HANDLE originalStdout, originalStderr; |
169 #endif | 178 #endif |
170 | 179 |
256 unsigned int genTempFileNameCount; | 265 unsigned int genTempFileNameCount; |
257 char* genTempFileName(){ | 266 char* genTempFileName(){ |
258 char* back; | 267 char* back; |
259 size_t len; | 268 size_t len; |
260 | 269 |
261 len = strlen(TMP_DIR) + 128; | 270 len = strlen(tmp_dir) + 128; |
262 back = malloc(len); | 271 back = malloc(len); |
263 | 272 |
264 #ifdef USE_POSIX | 273 #ifdef USE_POSIX |
265 snprintf(back, len, "%s/t%x-%x-%x.tmp", TMP_DIR, getpid(), rand(), ++genTempFileNameCount); | 274 snprintf(back, len, "%s/t%x-%x-%x.tmp", tmp_dir, getpid(), rand(), ++genTempFileNameCount); |
266 #else | 275 #else |
267 snprintf(back, len, "%s\\t%x-%x-%x.tmp", TMP_DIR, getpid(), rand(), ++genTempFileNameCount); | 276 snprintf(back, len, "%s\\t%x-%x-%x.tmp", tmp_dir, getpid(), rand(), ++genTempFileNameCount); |
268 #endif | 277 #endif |
269 | 278 |
270 return back; | 279 return back; |
271 } | 280 } |
272 | 281 |
453 back[end1-begin]='\x00'; | 462 back[end1-begin]='\x00'; |
454 return strip(back); | 463 return strip(back); |
455 } | 464 } |
456 } | 465 } |
457 | 466 |
458 return calloc(1,1); | 467 back = malloc(1); |
468 back[0] = 0; | |
469 return back; | |
459 } | 470 } |
460 | 471 |
461 /* check compile-time error messages */ | 472 /* check compile-time error messages */ |
462 int checkErrorMessage(const char* file, const char* line, const char* buffer){ | 473 int checkErrorMessage(const char* file, const char* line, const char* buffer){ |
463 | 474 |
785 modus); | 796 modus); |
786 exit(EXIT_FAILURE); | 797 exit(EXIT_FAILURE); |
787 } | 798 } |
788 | 799 |
789 /* gen command */ | 800 /* gen command */ |
790 bufferLen = strlen(compiler) + strlen(arguments) + strlen(TMP_DIR) | 801 bufferLen = strlen(compiler) + strlen(arguments) + strlen(tmp_dir) |
791 + strlen(case_file) + 21; | 802 + strlen(case_file) + 21; |
792 buffer = malloc(bufferLen); | 803 buffer = malloc(bufferLen); |
793 snprintf(buffer, bufferLen, "%s %s ", compiler, arguments); | 804 snprintf(buffer, bufferLen, "%s %s ", compiler, arguments); |
794 | 805 |
795 if(NULL == strstr(buffer, "-od")){ | 806 if(NULL == strstr(buffer, "-od")){ |
796 snprintf(buffer, bufferLen, "%s %s -od%s -c %s", | 807 snprintf(buffer, bufferLen, "%s %s -od%s -c %s", |
797 compiler, arguments, TMP_DIR, case_file); | 808 compiler, arguments, tmp_dir, case_file); |
798 }else{ | 809 }else{ |
799 snprintf(buffer, bufferLen, "%s %s -c %s", | 810 snprintf(buffer, bufferLen, "%s %s -c %s", |
800 compiler, arguments, case_file); | 811 compiler, arguments, case_file); |
801 } | 812 } |
802 | 813 |
875 exit(EXIT_FAILURE); | 886 exit(EXIT_FAILURE); |
876 } | 887 } |
877 | 888 |
878 /* gen command */ | 889 /* gen command */ |
879 | 890 |
880 bufferLen = strlen(compiler) + strlen(arguments) + strlen(TMP_DIR) | 891 bufferLen = strlen(compiler) + strlen(arguments) + strlen(tmp_dir) |
881 + strlen(case_file) * 2 + 64; | 892 + strlen(case_file) * 2 + 64; |
882 buffer = malloc(bufferLen); | 893 buffer = malloc(bufferLen); |
883 snprintf(buffer, bufferLen, "%s %s ", compiler, arguments); | 894 snprintf(buffer, bufferLen, "%s %s ", compiler, arguments); |
884 | 895 |
885 if(NULL == strstr(buffer, "-od")){ | 896 if(NULL == strstr(buffer, "-od")){ |
886 if(NULL == strstr(buffer, "-of")){ | 897 if(NULL == strstr(buffer, "-of")){ |
887 snprintf(buffer, bufferLen, | 898 snprintf(buffer, bufferLen, |
888 "%s %s -od%s -of%s.exe %s", | 899 "%s %s -od%s -of%s.exe %s", |
889 compiler, arguments, TMP_DIR, case_file, | 900 compiler, arguments, tmp_dir, case_file, |
890 case_file); | 901 case_file); |
891 }else{ | 902 }else{ |
892 snprintf(buffer, bufferLen, | 903 snprintf(buffer, bufferLen, |
893 "%s %s -od%s %s", | 904 "%s %s -od%s %s", |
894 compiler, arguments, TMP_DIR, case_file); | 905 compiler, arguments, tmp_dir, case_file); |
895 } | 906 } |
896 }else if(NULL == strstr(buffer, "-of")){ | 907 }else if(NULL == strstr(buffer, "-of")){ |
897 snprintf(buffer, bufferLen, | 908 snprintf(buffer, bufferLen, |
898 "%s %s -of%s.exe %s", | 909 "%s %s -of%s.exe %s", |
899 compiler, arguments, case_file, case_file); | 910 compiler, arguments, case_file, case_file); |
935 return RES_ERROR | (good_error ? 0 : RES_BAD_MSG); | 946 return RES_ERROR | (good_error ? 0 : RES_BAD_MSG); |
936 } | 947 } |
937 } | 948 } |
938 | 949 |
939 /* test 2/3 - run */ | 950 /* test 2/3 - run */ |
940 bufferLen = strlen(case_file) + 30; | 951 if(VALGRIND && VALGRIND[0]){ |
941 buffer = malloc(bufferLen); | 952 bufferLen = strlen(VALGRIND) + strlen(case_file) + 8; |
942 snprintf(buffer, bufferLen, "%s.exe", case_file); | 953 buffer = malloc(bufferLen); |
954 snprintf(buffer, bufferLen, "%s %s.exe", VALGRIND, case_file); | |
955 }else{ | |
956 bufferLen = strlen(case_file) + 8; | |
957 buffer = malloc(bufferLen); | |
958 snprintf(buffer, bufferLen, "%s.exe", case_file); | |
959 } | |
943 printf("%s\n", buffer); | 960 printf("%s\n", buffer); |
944 res=crashRun(buffer, &logFile); | 961 res=crashRun(buffer, &logFile); |
945 free(buffer); | 962 free(buffer); |
946 | 963 |
947 /* diagnostic 2/3 */ | 964 /* diagnostic 2/3 */ |
1130 torture_block_case = getCaseFlag(buffer, "__DSTRESS_TORTURE_BLOCK__"); | 1147 torture_block_case = getCaseFlag(buffer, "__DSTRESS_TORTURE_BLOCK__"); |
1131 torture_require = getCaseFlag(buffer, "__DSTRESS_TORTURE_REQUIRE__"); | 1148 torture_require = getCaseFlag(buffer, "__DSTRESS_TORTURE_REQUIRE__"); |
1132 | 1149 |
1133 free(buffer); | 1150 free(buffer); |
1134 | 1151 |
1152 /* tmp_dir */ | |
1153 if(!cmd_arg_case || !cmd_arg_case[0]){ | |
1154 tmp_dir = TMP_DIR; | |
1155 }else{ | |
1156 pid_t pid; | |
1157 pid = getpid(); | |
1158 bufferLen = strlen(TMP_DIR) + 4 + sizeof(pid_t) * 4; | |
1159 buffer = malloc(bufferLen); | |
1160 snprintf(buffer, bufferLen, "%s/_%X", TMP_DIR, pid); | |
1161 tmp_dir = cleanPathSeperator(buffer); | |
1162 if(mkdir(tmp_dir, 0770)){ | |
1163 fprintf(stderr, "failed to create tmp dir: %s (%d, %s)\n", | |
1164 tmp_dir, errno, strerror(errno)); | |
1165 return EXIT_FAILURE; | |
1166 } | |
1167 } | |
1168 | |
1135 /* set implicit source file */ | 1169 /* set implicit source file */ |
1136 if(strcmp(error_line, "")!=0 && strcmp(error_file, "")==0){ | 1170 if(strcmp(error_line, "")!=0 && strcmp(error_file, "")==0){ |
1137 error_file=case_file; | 1171 error_file=case_file; |
1138 } | 1172 } |
1139 | 1173 |
1268 printResult(torture_result[index], modus, case_file, | 1302 printResult(torture_result[index], modus, case_file, |
1269 stdout); | 1303 stdout); |
1270 printf("--------\n"); | 1304 printf("--------\n"); |
1271 } | 1305 } |
1272 }else{ | 1306 }else{ |
1273 if(torture_require){ | 1307 if(torture_require && !torture_require[0]){ |
1274 if(!cmd_arg_case){ | 1308 if(!cmd_arg_case || !cmd_arg_case[0]){ |
1275 torture_require = cmd_arg_case; | 1309 torture_require = cmd_arg_case; |
1276 }else{ | 1310 }else{ |
1277 size_t new_len = strlen(cmd_arg_case); | 1311 bufferLen = strlen(cmd_arg_case); |
1278 new_len += strlen(torture_require); | 1312 bufferLen += strlen(torture_require); |
1279 new_len++; | 1313 bufferLen += 2; |
1280 cmd_arg_case = realloc(cmd_arg_case, new_len); | 1314 buffer = malloc(bufferLen); |
1281 strcat(cmd_arg_case, " "); | 1315 snprintf(buffer, bufferLen, "%s %s", cmd_arg_case, torture_require); |
1282 strcat(cmd_arg_case, torture_require); | 1316 cmd_arg_case = buffer; |
1283 } | 1317 } |
1284 } | 1318 } |
1285 if(modus & (MODE_RUN | MODE_NORUN)){ | 1319 if(modus & (MODE_RUN | MODE_NORUN)){ |
1286 case_result = target_run(modus, compiler, cmd_arg_case, | 1320 case_result = target_run(modus, compiler, cmd_arg_case, |
1287 case_file, error_file, error_line | 1321 case_file, error_file, error_line |
1301 printf("Torture-Sub-1/" ZU "-", | 1335 printf("Torture-Sub-1/" ZU "-", |
1302 sizeof(torture)/sizeof(char*)); | 1336 sizeof(torture)/sizeof(char*)); |
1303 printResult(case_result, modus, case_file, stdout); | 1337 printResult(case_result, modus, case_file, stdout); |
1304 } | 1338 } |
1305 | 1339 |
1340 if(strcmp(TMP_DIR, tmp_dir)){ | |
1341 bufferLen = strlen(tmp_dir); | |
1342 bufferLen += strlen(RM_DIR); | |
1343 bufferLen += 2; | |
1344 buffer = malloc(bufferLen); | |
1345 snprintf(buffer, bufferLen, "%s %s", RM_DIR, tmp_dir); | |
1346 system(buffer); | |
1347 } | |
1306 exit(EXIT_SUCCESS); | 1348 exit(EXIT_SUCCESS); |
1307 } | 1349 } |