On Sunday, January 25, 2004 6:46 PM, Martin Pool [mailto:[EMAIL PROTECTED] wrote > >On 23 Jan 2004, Ben Scarlet <[EMAIL PROTECTED]> wrote: >> The following patch makes the processing of arguments passed through to the >> assembler slightly less conservative. When compiling 32-bit sparc code with >> gcc-2.95.3, it is sometimes necessary to tweak assembler's notion of the >> architecture to allow for the use of some fancier instructions. (e.g. - the >> atomic operation instructions used in implementing reference counting in >> some multithread-safe implementations of the c++ class std::string). One way >> to get the appropriate information to the compiler is to use the flag >> -Wa,-xarch=v8. As of distcc version 2.12.1, this flag would erroneously >> cause distcc to refuse to distribute a compilation, because that version >> takes a very simplistic approach to detecting another assembler flag, >> -Wa,-al=foo. The following patch improves the detection of the "-al" flag >> just slightly, so as to let compiles without it but still with an '=' in an >> assembler flag get distributed. > >The basic idea is OK, but I think the implementation is still too >likely to guess wrong if there happens to be another -al in the >option. > >Since the gcc manual says the option is split at the commas then I >think we need to look for something like the regexp ,-al[=,]
I was aiming for minimal change, but if you'd prefer something more correct: Reading the info page for gnu as, actually any "-a...=foo" flag would behave similarly to -al=foo: Here's a new patch: diff -rc distcc-2.12.1/src/arg.c distcc-2.12.1-new/src/arg.c *** distcc-2.12.1/src/arg.c Wed Oct 8 01:41:49 2003 --- distcc-2.12.1-new/src/arg.c Mon Jan 26 11:53:10 2004 *************** *** 173,187 **** return EXIT_DISTCC_FAILED; } else if (str_startswith("-Wa,", a)) { /* Options passed through to the assembler. The only one we ! * need to handle so far is -al=output, which directs the ! * listing to the named file and cannot be remote. Parsing ! * all the options would be complex since you can give several ! * comma-separated assembler options after -Wa, but looking ! * for '=' should be safe. */ ! if (strchr(a, '=')) { ! rs_trace("%s needs to write out assembly listings and must be local", ! a); ! return EXIT_DISTCC_FAILED; } } else if (!strcmp(a, "-S")) { seen_opt_s = 1; --- 173,197 ---- return EXIT_DISTCC_FAILED; } else if (str_startswith("-Wa,", a)) { /* Options passed through to the assembler. The only one we ! * need to handle so far is -a with a filename, which directs the ! * listing to the named file and cannot be remote. */ ! const char *scan = a; ! ! for(;;) { ! /* find the next "-a" flag. if none is found, quit looking */ ! if (!(scan = strstr(scan, ",-a"))) break; ! ! /* find the start of the next argument or a filename, ! whichever comes first. If none is found, there's no filename ! and nothing more to do, so quit looking */ ! if (!(scan = strpbrk(scan + 3,",="))) break; ! ! /* found a filename, not another argument, so run locally */ ! if (*scan == '=') { ! rs_trace("%s needs to write out assembly listings and must be local", ! a); ! return EXIT_DISTCC_FAILED; ! } } } else if (!strcmp(a, "-S")) { seen_opt_s = 1; __ distcc mailing list http://distcc.samba.org/ To unsubscribe or change options: http://lists.samba.org/mailman/listinfo/distcc