Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

kbuild: Fix computing srcversion for modules

Recent change to fixdep:

commit b7bd182176960fdd139486cadb9962b39f8a2b50
Author: Michal Marek <mmarek@suse.cz>
Date: Thu Feb 17 15:13:54 2011 +0100

fixdep: Do not record dependency on the source file itself

changed the format of the *.cmd files without realizing that it is also
used by modpost. Put the path to the source file to the file back, in a
special variable, so that modpost sees all source files when calculating
srcversion for modules.

Reported-and-tested-by: Henrik Rydberg <rydberg@euromail.se>
Signed-off-by: Michal Marek <mmarek@suse.cz>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Michal Marek and committed by
Linus Torvalds
7840fea2 e8444a3e

+30 -8
+13 -6
scripts/basic/fixdep.c
··· 309 309 close(fd); 310 310 } 311 311 312 + /* 313 + * Important: The below generated source_foo.o and deps_foo.o variable 314 + * assignments are parsed not only by make, but also by the rather simple 315 + * parser in scripts/mod/sumversion.c. 316 + */ 312 317 static void parse_dep_file(void *map, size_t len) 313 318 { 314 319 char *m = map; ··· 328 323 exit(1); 329 324 } 330 325 memcpy(s, m, p-m); s[p-m] = 0; 331 - printf("deps_%s := \\\n", target); 332 326 m = p+1; 333 327 334 328 clear_config(); ··· 347 343 strrcmp(s, "arch/um/include/uml-config.h") && 348 344 strrcmp(s, ".ver")) { 349 345 /* 350 - * Do not output the first dependency (the 351 - * source file), so that kbuild is not confused 352 - * if a .c file is rewritten into .S or vice 353 - * versa. 346 + * Do not list the source file as dependency, so that 347 + * kbuild is not confused if a .c file is rewritten 348 + * into .S or vice versa. Storing it in source_* is 349 + * needed for modpost to compute srcversions. 354 350 */ 355 - if (!first) 351 + if (first) { 352 + printf("source_%s := %s\n\n", target, s); 353 + printf("deps_%s := \\\n", target); 354 + } else 356 355 printf(" %s \\\n", s); 357 356 do_config_file(s); 358 357 }
+17 -2
scripts/mod/sumversion.c
··· 300 300 return 0; 301 301 } 302 302 303 - /* We have dir/file.o. Open dir/.file.o.cmd, look for deps_ line to 304 - * figure out source file. */ 303 + /* We have dir/file.o. Open dir/.file.o.cmd, look for source_ and deps_ line 304 + * to figure out source files. */ 305 305 static int parse_source_files(const char *objfile, struct md4_ctx *md) 306 306 { 307 307 char *cmd, *file, *line, *dir; ··· 340 340 */ 341 341 while ((line = get_next_line(&pos, file, flen)) != NULL) { 342 342 char* p = line; 343 + 344 + if (strncmp(line, "source_", sizeof("source_")-1) == 0) { 345 + p = strrchr(line, ' '); 346 + if (!p) { 347 + warn("malformed line: %s\n", line); 348 + goto out_file; 349 + } 350 + p++; 351 + if (!parse_file(p, md)) { 352 + warn("could not open %s: %s\n", 353 + p, strerror(errno)); 354 + goto out_file; 355 + } 356 + continue; 357 + } 343 358 if (strncmp(line, "deps_", sizeof("deps_")-1) == 0) { 344 359 check_files = 1; 345 360 continue;