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 }