config(8) does not add post-processing for source file with compile-with command in sys/conf/files

Paul Ambrose ambrosehua at gmail.com
Wed Oct 19 02:49:23 UTC 2011


when I digged the a PR(bin/160275), I found in_proto.c and
if_ethersubr.c ( see sys/conf/files ) does not get
${NORMAL_CTFCONVERT} post-processing in Makefile
(/usr/obj/usr/src/sys/MYKERNEL/Makefile) generated by config(8), so
the objs does not contain ctf section

In /usr/src/usr.sbin/config/mkmakefile.c, line 746

        }
        compilewith = ftp->f_compilewith;
        if (compilewith == 0) {                     // no compile-with
            const char *ftype = NULL;

            switch (ftp->f_type) {
            case NORMAL:
                ftype = "NORMAL";
                break;
            case PROFILING:
                if (!profiling)
                    continue;
                ftype = "PROFILE";
                break;
            default:
                fprintf(stderr,
                    "config: don't know rules for %s\n", np);
                break;
            }

             // only add post-processing  for  source file without compile-with

            snprintf(cmd, sizeof(cmd),
                "${%s_%c%s}\n\t@${NORMAL_CTFCONVERT}", ftype,
                toupper(och),
                ftp->f_flags & NOWERROR ? "_NOWERROR" : "");
            compilewith = cmd;
        }
        *cp = och;
        if (strlen(ftp->f_objprefix))
            fprintf(f, "\t%s $S/%s\n\n", compilewith, np);
        else
            fprintf(f, "\t%s\n\n", compilewith);
    }
}

I wonder whether it was NOT allowed to add post-processing to files
with compile-with, license or other  issues?

if not a license issue, then I wonder if this fix is OK( I test it on
8-stable with gcc, and  9-stable  with both gcc and clang)

diff --git a/usr.sbin/config/mkmakefile.c b/usr.sbin/config/mkmakefile.c
index 2372839..25a85de 100644
--- a/usr.sbin/config/mkmakefile.c
+++ b/usr.sbin/config/mkmakefile.c
@@ -767,6 +767,14 @@ do_rules(FILE *f)
ftp->f_flags & NOWERROR ? "_NOWERROR" : "");
compilewith = cmd;
}
+ //handle CTF issule with NORMAL_C and NORMAL_C_NOERROR
+ else if (!strncmp(compilewith, "${NORMAL_C",sizeof("${NORMAL_C"))) {
+      snprintf(cmd, sizeof(cmd),
+            "%s\n\t@${NORMAL_CTFCONVERT}", compilewith);
+      compilewith = cmd;
+ }


More information about the freebsd-questions mailing list