* [PATCH 22/46] kbuild: do not warn when unwind sections references .init/.exit sections [not found] <11429580554104-git-send-email-sam@ravnborg.org> @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 23/46] kbuild: version.h should depend on .kernelrelease Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg Andrew Morton reported a number of false positives for ia64 - like these: WARNING: drivers/acpi/button.o - Section mismatch: reference to .init.text: from .IA_64.unwind.init.text after '' (at offset 0x0) WARNING: drivers/acpi/button.o - Section mismatch: reference to .exit.text: from .IA_64.unwind.exit.text after '' (at offset 0x0) WARNING: drivers/acpi/processor.o - Section mismatch: reference to .init.text: from .IA_64.unwind after '' (at offset 0x1e8) They are all false positives - or at least the .c code looks OK. It is not known why sometimes a section name is appended and sometimes not. Fix is to accept references from all sections that includes "unwind." in the name. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/mod/modpost.c | 18 +++++++++++++++++- 1 files changed, 17 insertions(+), 1 deletions(-) 6e10133fa4b2366e8ef18bc2ce34afe727b1c4ba diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 5b076ef..7f25354 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -671,13 +671,21 @@ static int init_section_ref_ok(const cha ".debug", NULL }; - + /* part of section name */ + const char *namelist3 [] = { + ".unwind", /* sample: IA_64.unwind.init.text */ + NULL + }; + for (s = namelist1; *s; s++) if (strcmp(*s, name) == 0) return 1; for (s = namelist2; *s; s++) if (strncmp(*s, name, strlen(*s)) == 0) return 1; + for (s = namelist3; *s; s++) + if (strstr(*s, name) != NULL) + return 1; return 0; } @@ -727,6 +735,11 @@ static int exit_section_ref_ok(const cha ".debug", NULL }; + /* part of section name */ + const char *namelist3 [] = { + ".unwind", /* Sample: IA_64.unwind.exit.text */ + NULL + }; for (s = namelist1; *s; s++) if (strcmp(*s, name) == 0) @@ -734,6 +747,9 @@ static int exit_section_ref_ok(const cha for (s = namelist2; *s; s++) if (strncmp(*s, name, strlen(*s)) == 0) return 1; + for (s = namelist3; *s; s++) + if (strstr(*s, name) != NULL) + return 1; return 0; } -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 23/46] kbuild: version.h should depend on .kernelrelease 2006-03-21 16:20 ` [PATCH 22/46] kbuild: do not warn when unwind sections references .init/.exit sections Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 24/46] kbuild: Add copyright to modpost.c Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Jan Beulich, Sam Ravnborg Rebuilding a previously built tree while using make's -j options from time to time results in the version.h check running at the same time as the updating of .kernelrelease, resulting in UTS_RELEASE remaining an empty string (and as a side effect causing the entire kernel to be rebuilt). Signed-Off-By: Jan Beulich <jbeulich@novell.com> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- Makefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) c3f9da90b6e63c968070aa72057fe15356b3f7b5 diff --git a/Makefile b/Makefile index 7a95f4f..ce2bfbd 100644 --- a/Makefile +++ b/Makefile @@ -852,7 +852,7 @@ define filechk_version.h ) endef -include/linux/version.h: $(srctree)/Makefile .config FORCE +include/linux/version.h: $(srctree)/Makefile .config .kernelrelease FORCE $(call filechk,version.h) # --------------------------------------------------------------------------- -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 24/46] kbuild: Add copyright to modpost.c 2006-03-21 16:20 ` [PATCH 23/46] kbuild: version.h should depend on .kernelrelease Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 25/46] kbuild: ignore all generated files for make allmodconfig (x86_64) Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg It seems popular to protect your work with copyright, so I decided to do so for modpost which I patch a great deal atm. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/mod/modpost.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) 382168f4791822de7d44d9c634fbfdf8bc08c91b diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 7f25354..de0a9ee 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -2,7 +2,7 @@ * * Copyright 2003 Kai Germaschewski * Copyright 2002-2004 Rusty Russell, IBM Corporation - * + * Copyright 2006 Sam Ravnborg * Based in part on module-init-tools/depmod.c,file2alias * * This software may be used and distributed according to the terms -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 25/46] kbuild: ignore all generated files for make allmodconfig (x86_64) 2006-03-21 16:20 ` [PATCH 24/46] kbuild: Add copyright to modpost.c Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 26/46] kbuild: whitelist false section mismatch warnings Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg With following patch we now ignore all generated files for make allmodconfig for x86_64. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- drivers/atm/.gitignore | 5 +++++ sound/oss/.gitignore | 4 ++++ 2 files changed, 9 insertions(+), 0 deletions(-) create mode 100644 drivers/atm/.gitignore create mode 100644 sound/oss/.gitignore cc006288fb538005a14ca4297250abbf0beeb0b9 diff --git a/drivers/atm/.gitignore b/drivers/atm/.gitignore new file mode 100644 index 0000000..a165b71 --- /dev/null +++ b/drivers/atm/.gitignore @@ -0,0 +1,5 @@ +# Ignore generated files +fore200e_mkfirm +fore200e_pca_fw.c +pca200e.bin + diff --git a/sound/oss/.gitignore b/sound/oss/.gitignore new file mode 100644 index 0000000..7efb12b --- /dev/null +++ b/sound/oss/.gitignore @@ -0,0 +1,4 @@ +#Ignore generated files +maui_boot.h +pss_boot.h +trix_boot.h -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 26/46] kbuild: whitelist false section mismatch warnings 2006-03-21 16:20 ` [PATCH 25/46] kbuild: ignore all generated files for make allmodconfig (x86_64) Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 27/46] kbuild: make namespace.pl CROSS_COMPILE happy Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg In several cases the section mismatch check triggered false warnings. Following patch introduce a whitelist to 'false positives' are not warned of. Two types of patterns are recognised: 1) Typical case when a module parameter is _initdata 2) When a function pointer is assigned to a driver structure In both patterns we rely on the actual name of the variable assigned Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/mod/modpost.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 89 insertions(+), 0 deletions(-) 4c8fbca5836aaafd165aa8732d92ab5d4f3a6841 diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index de0a9ee..663b1ef 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -452,6 +452,89 @@ static char *get_modinfo(void *modinfo, } /** + * Test if string s ends in string sub + * return 0 if match + **/ +static int strrcmp(const char *s, const char *sub) +{ + int slen, sublen; + + if (!s || !sub) + return 1; + + slen = strlen(s); + sublen = strlen(sub); + + if ((slen == 0) || (sublen == 0)) + return 1; + + if (sublen > slen) + return 1; + + return memcmp(s + slen - sublen, sub, sublen); +} + +/** + * Whitelist to allow certain references to pass with no warning. + * Pattern 1: + * If a module parameter is declared __initdata and permissions=0 + * then this is legal despite the warning generated. + * We cannot see value of permissions here, so just ignore + * this pattern. + * The pattern is identified by: + * tosec = .init.data + * fromsec = .data + * atsym =__param* + * + * Pattern 2: + * Many drivers utilise a *_driver container with references to + * add, remove, probe functions etc. + * These functions may often be marked __init and we do not want to + * warn here. + * the pattern is identified by: + * tosec = .init.text | .exit.text + * fromsec = .data + * atsym = *_driver, *_ops, *_probe, *probe_one + **/ +static int secref_whitelist(const char *tosec, const char *fromsec, + const char *atsym) +{ + int f1 = 1, f2 = 1; + const char **s; + const char *pat2sym[] = { + "_driver", + "_ops", + "_probe", + "_probe_one", + NULL + }; + + /* Check for pattern 1 */ + if (strcmp(tosec, ".init.data") != 0) + f1 = 0; + if (strcmp(fromsec, ".data") != 0) + f1 = 0; + if (strncmp(atsym, "__param", strlen("__param")) != 0) + f1 = 0; + + if (f1) + return f1; + + /* Check for pattern 2 */ + if ((strcmp(tosec, ".init.text") != 0) && + (strcmp(tosec, ".exit.text") != 0)) + f2 = 0; + if (strcmp(fromsec, ".data") != 0) + f2 = 0; + + for (s = pat2sym; *s; s++) + if (strrcmp(atsym, *s) == 0) + f1 = 1; + + return f1 && f2; +} + +/** * Find symbol based on relocation record info. * In some cases the symbol supplied is a valid symbol so * return refsym. If st_name != 0 we assume this is a valid symbol. @@ -518,6 +601,7 @@ static void find_symbols_between(struct /** * Print a warning about a section mismatch. * Try to find symbols near it so user can find it. + * Check whitelist before warning - it may be a false positive. **/ static void warn_sec_mismatch(const char *modname, const char *fromsec, struct elf_info *elf, Elf_Sym *sym, Elf_Rela r) @@ -536,6 +620,11 @@ static void warn_sec_mismatch(const char refsym = find_elf_symbol(elf, r.r_addend, sym); if (refsym && strlen(elf->strtab + refsym->st_name)) refsymname = elf->strtab + refsym->st_name; + + /* check whitelist - we may ignore it */ + if (before && + secref_whitelist(secname, fromsec, elf->strtab + before->st_name)) + return; if (before && after) { warn("%s - Section mismatch: reference to %s:%s from %s " -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 27/46] kbuild: make namespace.pl CROSS_COMPILE happy 2006-03-21 16:20 ` [PATCH 26/46] kbuild: whitelist false section mismatch warnings Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 28/46] kbuild: small update of allnoconfig description Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Aaron Brooks, Sam Ravnborg Using the fixed path to /usr/bin/{nm,objdump} does not allow CROSS_COMPILE environments to use namespace.pl. This patch causes namespace.pl to use $NM and $OBJDUMP if defined or fall back to the nm and objdump found in the path. Signed-off-by: Aaron Brooks <aaron.brooks@sicortex.com> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/namespace.pl | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) 3a25f0b19f2eefd158955ab809c8947ed8feadf1 diff --git a/scripts/namespace.pl b/scripts/namespace.pl index 88e30e8..f343738 100644 --- a/scripts/namespace.pl +++ b/scripts/namespace.pl @@ -66,8 +66,8 @@ require 5; # at least perl 5 use strict; use File::Find; -my $nm = "/usr/bin/nm -p"; -my $objdump = "/usr/bin/objdump -s -j .comment"; +my $nm = ($ENV{'NM'} || "nm") . " -p"; +my $objdump = ($ENV{'OBJDUMP'} || "objdump") . " -s -j .comment"; my $srctree = ""; my $objtree = ""; $srctree = "$ENV{'srctree'}/" if (exists($ENV{'srctree'})); -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 28/46] kbuild: small update of allnoconfig description 2006-03-21 16:20 ` [PATCH 27/46] kbuild: make namespace.pl CROSS_COMPILE happy Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 29/46] kbuild: kill trailing whitespace in modpost & friends Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Jesper Juhl, Sam Ravnborg 'allnoconfig' is described by 'make help' as a "minimal config", that's not strictly correct. To be pedantic, a minimal config would be one where EMBEDDED was set to Y and most things therein disabled etc. Simply answering 'no' to all options does not give a minimal config. A better description of allnoconfig is that it answers all options with 'no'. This patch updates the description. Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/kconfig/Makefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) e11f04962cee8f7fb0dc14983a7a461ade8f71c3 diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile index 5760e05..5280945 100644 --- a/scripts/kconfig/Makefile +++ b/scripts/kconfig/Makefile @@ -78,7 +78,7 @@ help: @echo ' defconfig - New config with default answer to all options' @echo ' allmodconfig - New config selecting modules when possible' @echo ' allyesconfig - New config where all options are accepted with yes' - @echo ' allnoconfig - New minimal config' + @echo ' allnoconfig - New config where all options are answered with no' # =========================================================================== # Shared Makefile for the various kconfig executables: -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 29/46] kbuild: kill trailing whitespace in modpost & friends 2006-03-21 16:20 ` [PATCH 28/46] kbuild: small update of allnoconfig description Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 30/46] kbuild: kill false positives from section mismatch warnings for powerpc Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/mod/file2alias.c | 4 +-- scripts/mod/mk_elfconfig.c | 4 +-- scripts/mod/modpost.c | 70 ++++++++++++++++++++++---------------------- scripts/mod/modpost.h | 8 +++-- 4 files changed, 43 insertions(+), 43 deletions(-) 62070fa42c4ac23d1d71146a4c14702302b80245 diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 1346223..e7b5350 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c @@ -34,7 +34,7 @@ typedef uint16_t __u16; typedef unsigned char __u8; /* Big exception to the "don't include kernel headers into userspace, which - * even potentially has different endianness and word sizes, since + * even potentially has different endianness and word sizes, since * we handle those differences explicitly below */ #include "../../include/linux/mod_devicetable.h" #include "../../include/linux/input.h" @@ -228,7 +228,7 @@ static int do_pci_entry(const char *file return 1; } -/* looks like: "ccw:tNmNdtNdmN" */ +/* looks like: "ccw:tNmNdtNdmN" */ static int do_ccw_entry(const char *filename, struct ccw_device_id *id, char *alias) { diff --git a/scripts/mod/mk_elfconfig.c b/scripts/mod/mk_elfconfig.c index de2aabf..3c92c83 100644 --- a/scripts/mod/mk_elfconfig.c +++ b/scripts/mod/mk_elfconfig.c @@ -6,7 +6,7 @@ int main(int argc, char **argv) { - unsigned char ei[EI_NIDENT]; + unsigned char ei[EI_NIDENT]; union { short s; char c[2]; } endian_test; if (argc != 2) { @@ -57,7 +57,7 @@ main(int argc, char **argv) if ((strcmp(argv[1], "v850") == 0) || (strcmp(argv[1], "h8300") == 0)) printf("#define MODULE_SYMBOL_PREFIX \"_\"\n"); - else + else printf("#define MODULE_SYMBOL_PREFIX \"\"\n"); return 0; diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 663b1ef..5de3c63 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -85,7 +85,7 @@ static struct module *new_module(char *m { struct module *mod; char *p, *s; - + mod = NOFAIL(malloc(sizeof(*mod))); memset(mod, 0, sizeof(*mod)); p = NOFAIL(strdup(modname)); @@ -320,9 +320,9 @@ static void parse_elf(struct elf_info *i continue; info->symtab_start = (void *)hdr + sechdrs[i].sh_offset; - info->symtab_stop = (void *)hdr + sechdrs[i].sh_offset + info->symtab_stop = (void *)hdr + sechdrs[i].sh_offset + sechdrs[i].sh_size; - info->strtab = (void *)hdr + + info->strtab = (void *)hdr + sechdrs[sechdrs[i].sh_link].sh_offset; } if (!info->symtab_start) { @@ -387,15 +387,15 @@ static void handle_modversions(struct mo /* Ignore register directives. */ if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER) break; - if (symname[0] == '.') { - char *munged = strdup(symname); - munged[0] = '_'; - munged[1] = toupper(munged[1]); - symname = munged; - } + if (symname[0] == '.') { + char *munged = strdup(symname); + munged[0] = '_'; + munged[1] = toupper(munged[1]); + symname = munged; + } } #endif - + if (memcmp(symname, MODULE_SYMBOL_PREFIX, strlen(MODULE_SYMBOL_PREFIX)) == 0) mod->unres = alloc_symbol(symname + @@ -458,13 +458,13 @@ static char *get_modinfo(void *modinfo, static int strrcmp(const char *s, const char *sub) { int slen, sublen; - + if (!s || !sub) return 1; - + slen = strlen(s); sublen = strlen(sub); - + if ((slen == 0) || (sublen == 0)) return 1; @@ -485,7 +485,7 @@ static int strrcmp(const char *s, const * tosec = .init.data * fromsec = .data * atsym =__param* - * + * * Pattern 2: * Many drivers utilise a *_driver container with references to * add, remove, probe functions etc. @@ -508,7 +508,7 @@ static int secref_whitelist(const char * "_probe_one", NULL }; - + /* Check for pattern 1 */ if (strcmp(tosec, ".init.data") != 0) f1 = 0; @@ -521,7 +521,7 @@ static int secref_whitelist(const char * return f1; /* Check for pattern 2 */ - if ((strcmp(tosec, ".init.text") != 0) && + if ((strcmp(tosec, ".init.text") != 0) && (strcmp(tosec, ".exit.text") != 0)) f2 = 0; if (strcmp(fromsec, ".data") != 0) @@ -570,7 +570,7 @@ static void find_symbols_between(struct Elf_Addr afterdiff = ~0; const char *secstrings = (void *)hdr + elf->sechdrs[hdr->e_shstrndx].sh_offset; - + *before = NULL; *after = NULL; @@ -614,7 +614,7 @@ static void warn_sec_mismatch(const char const char *secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; const char *secname = secstrings + sechdrs[sym->st_shndx].sh_name; - + find_symbols_between(elf, r.r_offset, fromsec, &before, &after); refsym = find_elf_symbol(elf, r.r_addend, sym); @@ -622,10 +622,10 @@ static void warn_sec_mismatch(const char refsymname = elf->strtab + refsym->st_name; /* check whitelist - we may ignore it */ - if (before && + if (before && secref_whitelist(secname, fromsec, elf->strtab + before->st_name)) return; - + if (before && after) { warn("%s - Section mismatch: reference to %s:%s from %s " "between '%s' (at offset 0x%llx) and '%s'\n", @@ -636,13 +636,13 @@ static void warn_sec_mismatch(const char } else if (before) { warn("%s - Section mismatch: reference to %s:%s from %s " "after '%s' (at offset 0x%llx)\n", - modname, secname, refsymname, fromsec, + modname, secname, refsymname, fromsec, elf->strtab + before->st_name, (long long)r.r_offset); } else if (after) { warn("%s - Section mismatch: reference to %s:%s from %s " "before '%s' (at offset -0x%llx)\n", - modname, secname, refsymname, fromsec, + modname, secname, refsymname, fromsec, elf->strtab + before->st_name, (long long)r.r_offset); } else { @@ -676,7 +676,7 @@ static void check_sec_ref(struct module Elf_Shdr *sechdrs = elf->sechdrs; const char *secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; - + /* Walk through all sections */ for (i = 0; i < hdr->e_shnum; i++) { Elf_Rela *rela; @@ -724,13 +724,13 @@ static int init_section(const char *name /** * Identify sections from which references to a .init section is OK. - * + * * Unfortunately references to read only data that referenced .init * sections had to be excluded. Almost all of these are false * positives, they are created by gcc. The downside of excluding rodata * is that there really are some user references from rodata to * init code, e.g. drivers/video/vgacon.c: - * + * * const struct consw vga_con = { * con_startup: vgacon_startup, * @@ -769,10 +769,10 @@ static int init_section_ref_ok(const cha for (s = namelist1; *s; s++) if (strcmp(*s, name) == 0) return 1; - for (s = namelist2; *s; s++) + for (s = namelist2; *s; s++) if (strncmp(*s, name, strlen(*s)) == 0) return 1; - for (s = namelist3; *s; s++) + for (s = namelist3; *s; s++) if (strstr(*s, name) != NULL) return 1; return 0; @@ -792,12 +792,12 @@ static int exit_section(const char *name if (strcmp(name, ".exit.data") == 0) return 1; return 0; - + } /* * Identify sections from which references to a .exit section is OK. - * + * * [OPD] Keith Ownes <kaos@sgi.com> commented: * For our future {in}sanity, add a comment that this is the ppc .opd * section, not the ia64 .opd section. @@ -829,14 +829,14 @@ static int exit_section_ref_ok(const cha ".unwind", /* Sample: IA_64.unwind.exit.text */ NULL }; - + for (s = namelist1; *s; s++) if (strcmp(*s, name) == 0) return 1; - for (s = namelist2; *s; s++) + for (s = namelist2; *s; s++) if (strncmp(*s, name, strlen(*s)) == 0) return 1; - for (s = namelist3; *s; s++) + for (s = namelist3; *s; s++) if (strstr(*s, name) != NULL) return 1; return 0; @@ -900,7 +900,7 @@ void __attribute__((format(printf, 2, 3) char tmp[SZ]; int len; va_list ap; - + va_start(ap, fmt); len = vsnprintf(tmp, SZ, fmt, ap); if (buf->size - buf->pos < len + 1) { @@ -1129,7 +1129,7 @@ static int dump_sym(struct symbol *sym) return 0; return 1; } - + static void write_dump(const char *fname) { struct buffer buf = { }; @@ -1141,7 +1141,7 @@ static void write_dump(const char *fname while (symbol) { if (dump_sym(symbol)) buf_printf(&buf, "0x%08x\t%s\t%s\n", - symbol->crc, symbol->name, + symbol->crc, symbol->name, symbol->module->name); symbol = symbol->next; } diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h index 3b5319d..b14255c 100644 --- a/scripts/mod/modpost.h +++ b/scripts/mod/modpost.h @@ -13,8 +13,8 @@ #if KERNEL_ELFCLASS == ELFCLASS32 -#define Elf_Ehdr Elf32_Ehdr -#define Elf_Shdr Elf32_Shdr +#define Elf_Ehdr Elf32_Ehdr +#define Elf_Shdr Elf32_Shdr #define Elf_Sym Elf32_Sym #define Elf_Addr Elf32_Addr #define Elf_Section Elf32_Section @@ -26,8 +26,8 @@ #define ELF_R_TYPE ELF32_R_TYPE #else -#define Elf_Ehdr Elf64_Ehdr -#define Elf_Shdr Elf64_Shdr +#define Elf_Ehdr Elf64_Ehdr +#define Elf_Shdr Elf64_Shdr #define Elf_Sym Elf64_Sym #define Elf_Addr Elf64_Addr #define Elf_Section Elf64_Section -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 30/46] kbuild: kill false positives from section mismatch warnings for powerpc 2006-03-21 16:20 ` [PATCH 29/46] kbuild: kill trailing whitespace in modpost & friends Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 31/46] kbuild: fix section mismatch check for unwind on IA64 Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg Building an allmodconfig kernel for ppc64 revealed a number of false positives - originally reported by Andrew Morton. This patch removes most if not all false positives for ppc64: Section .opd The .opd section contains function descriptors at least for ppc64. So ignore it for .init.text (was ignored for .exit.text). See description of function descriptors here: http://www.linuxbase.org/spec/ELF/ppc64/PPC-elf64abi-1.7.html Section .toc1 ppc64 places some static variables in .toc1 - ignore the. Section __bug_tabe BUG() and friends uses __bug_table. Ignore warnings from that section. Module parameters are placed in .data.rel for ppc64, for adjust pattern to match on section named .data* Tested with gcc: 3.4.0 and binutils 2.15.90.0.3 Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/mod/modpost.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) 9209aed0726c77ad13b8d83e73a3cf9f59a8c2b2 diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 5de3c63..c4dc1d7 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -483,7 +483,7 @@ static int strrcmp(const char *s, const * this pattern. * The pattern is identified by: * tosec = .init.data - * fromsec = .data + * fromsec = .data* * atsym =__param* * * Pattern 2: @@ -512,7 +512,7 @@ static int secref_whitelist(const char * /* Check for pattern 1 */ if (strcmp(tosec, ".init.data") != 0) f1 = 0; - if (strcmp(fromsec, ".data") != 0) + if (strncmp(fromsec, ".data", strlen(".data")) != 0) f1 = 0; if (strncmp(atsym, "__param", strlen("__param")) != 0) f1 = 0; @@ -743,9 +743,12 @@ static int init_section_ref_ok(const cha /* Absolute section names */ const char *namelist1[] = { ".init", + ".opd", /* see comment [OPD] at exit_section_ref_ok() */ + ".toc1", /* used by ppc64 */ ".stab", ".rodata", ".text.lock", + "__bug_table", /* used by powerpc for BUG() */ ".pci_fixup_header", ".pci_fixup_final", ".pdr", @@ -812,8 +815,10 @@ static int exit_section_ref_ok(const cha ".exit.data", ".init.text", ".opd", /* See comment [OPD] */ + ".toc1", /* used by ppc64 */ ".altinstructions", ".pdr", + "__bug_table", /* used by powerpc for BUG() */ ".exitcall.exit", ".eh_frame", ".stab", -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 31/46] kbuild: fix section mismatch check for unwind on IA64 2006-03-21 16:20 ` [PATCH 30/46] kbuild: kill false positives from section mismatch warnings for powerpc Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 32/46] kbuild: in the section mismatch check try harder to find symbols Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg Parameters to strstr() was reversed. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/mod/modpost.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) e835a39c1c1f023ef443f735b0e98b08660ae0e4 diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index c4dc1d7..3b570b1 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -776,7 +776,7 @@ static int init_section_ref_ok(const cha if (strncmp(*s, name, strlen(*s)) == 0) return 1; for (s = namelist3; *s; s++) - if (strstr(*s, name) != NULL) + if (strstr(name, *s) != NULL) return 1; return 0; } @@ -842,7 +842,7 @@ static int exit_section_ref_ok(const cha if (strncmp(*s, name, strlen(*s)) == 0) return 1; for (s = namelist3; *s; s++) - if (strstr(*s, name) != NULL) + if (strstr(name, *s) != NULL) return 1; return 0; } -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 32/46] kbuild: in the section mismatch check try harder to find symbols 2006-03-21 16:20 ` [PATCH 31/46] kbuild: fix section mismatch check for unwind on IA64 Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 33/46] kbuild: fix make dir/file.xx when asm symlink is missing Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg When searching for symbols the only check performed was if offset equals st_value. Adding an additional check to see if st_name points t a valid name made us sort out a few more false positives and let us report more correct names in warnings. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/mod/modpost.c | 17 ++++++++++++++++- 1 files changed, 16 insertions(+), 1 deletions(-) 43c74d179596ba1f8eceb8c6a5c7e11afe233662 diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 3b570b1..3648683 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -558,7 +558,10 @@ static Elf_Sym *find_elf_symbol(struct e } /* - * Find symbols before or equal addr and after addr - in the section sec + * Find symbols before or equal addr and after addr - in the section sec. + * If we find two symbols with equal offset prefer one with a valid name. + * The ELF format may have a better way to detect what type of symbol + * it is, but this works for now. **/ static void find_symbols_between(struct elf_info *elf, Elf_Addr addr, const char *sec, @@ -587,6 +590,12 @@ static void find_symbols_between(struct beforediff = addr - sym->st_value; *before = sym; } + else if ((addr - sym->st_value) == beforediff) { + /* equal offset, valid name? */ + const char *name = elf->strtab + sym->st_name; + if (name && strlen(name)) + *before = sym; + } } else { @@ -594,6 +603,12 @@ static void find_symbols_between(struct afterdiff = sym->st_value - addr; *after = sym; } + else if ((sym->st_value - addr) == afterdiff) { + /* equal offset, valid name? */ + const char *name = elf->strtab + sym->st_name; + if (name && strlen(name)) + *after = sym; + } } } } -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 33/46] kbuild: fix make dir/file.xx when asm symlink is missing 2006-03-21 16:20 ` [PATCH 32/46] kbuild: in the section mismatch check try harder to find symbols Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 34/46] kbuild: when warning symbols exported twice now tell user this is the problem Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg Added a dependency so we do full preparation before trying to build single file targets. This fixes a case where Andrew Morton did: make kernel/sched.o rm include/asm make kernel/sched.o -> splat Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- Makefile | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) f6ecebd6592ea70e9450ec70efb24220dd961ebc diff --git a/Makefile b/Makefile index ce2bfbd..12c8d71 100644 --- a/Makefile +++ b/Makefile @@ -1289,17 +1289,17 @@ kernelversion: # --------------------------------------------------------------------------- # The directory part is taken from first prerequisite, so this # works even with external modules -%.s: %.c scripts FORCE +%.s: %.c prepare scripts FORCE $(Q)$(MAKE) $(build)=$(dir $<) $(dir $<)$(notdir $@) -%.i: %.c scripts FORCE +%.i: %.c prepare scripts FORCE $(Q)$(MAKE) $(build)=$(dir $<) $(dir $<)$(notdir $@) -%.o: %.c scripts FORCE +%.o: %.c prepare scripts FORCE $(Q)$(MAKE) $(build)=$(dir $<) $(dir $<)$(notdir $@) -%.lst: %.c scripts FORCE +%.lst: %.c prepare scripts FORCE $(Q)$(MAKE) $(build)=$(dir $<) $(dir $<)$(notdir $@) -%.s: %.S scripts FORCE +%.s: %.S prepare scripts FORCE $(Q)$(MAKE) $(build)=$(dir $<) $(dir $<)$(notdir $@) -%.o: %.S scripts FORCE +%.o: %.S prepare scripts FORCE $(Q)$(MAKE) $(build)=$(dir $<) $(dir $<)$(notdir $@) # For external modules we shall include any directory of the target, -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 34/46] kbuild: when warning symbols exported twice now tell user this is the problem 2006-03-21 16:20 ` [PATCH 33/46] kbuild: fix make dir/file.xx when asm symlink is missing Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg Warning now looks like this: WARNING: vmlinux: 'strcpy' exported twice. Previous export was in vmlinux Which gives much better hint how to fix it. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/mod/modpost.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) 7b75b13cda8bd21e8636ea985f76e1ce5bd1a470 diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 3648683..e2bf4c9 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -191,7 +191,7 @@ static struct symbol *sym_add_exported(c s = new_symbol(name, mod); } else { if (!s->preloaded) { - warn("%s: duplicate symbol '%s' previous definition " + warn("%s: '%s' exported twice. Previous export " "was in %s%s\n", mod->name, name, s->module->name, is_vmlinux(s->module->name) ?"":".ko"); -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior 2006-03-21 16:20 ` [PATCH 34/46] kbuild: when warning symbols exported twice now tell user this is the problem Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 36/46] kbuild: Fix bug in crc symbol generating of kernel and modules Sam Ravnborg 2006-03-21 17:28 ` [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior Jan-Benedict Glaw 0 siblings, 2 replies; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Paul Smith, Sam Ravnborg The kbuild system takes advantage of an incorrect behavior in GNU make. Once this behavior is fixed, all files in the kernel rebuild every time, even if nothing has changed. This patch ensures kbuild works with both the incorrect and correct behaviors of GNU make. For more details on the incorrect behavior, see: http://lists.gnu.org/archive/html/bug-make/2006-03/msg00003.html Changes in this patch: - Keep all targets that are to be marked .PHONY in a variable, PHONY. - Add .PHONY: $(PHONY) to mark them properly. - Remove any $(PHONY) files from the $? list when determining whether targets are up-to-date or not. Signed-off-by: Paul Smith <psmith@gnu.org> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- Documentation/DocBook/Makefile | 8 ++++ Makefile | 64 +++++++++++++++++++---------------- arch/arm/Makefile | 5 ++- arch/arm/boot/Makefile | 5 ++- arch/arm/boot/bootp/Makefile | 5 ++- arch/arm26/Makefile | 7 +++- arch/arm26/boot/Makefile | 5 ++- arch/i386/Makefile | 4 +- arch/ia64/Makefile | 5 ++- arch/m32r/Makefile | 5 ++- arch/powerpc/Makefile | 2 + arch/ppc/Makefile | 2 + arch/ppc/boot/Makefile | 5 ++- arch/ppc/boot/openfirmware/Makefile | 7 +++- arch/sh/Makefile | 2 + arch/um/Makefile | 7 +++- arch/x86_64/Makefile | 4 +- scripts/Kbuild.include | 13 ++++--- scripts/Makefile.build | 12 +++++-- scripts/Makefile.clean | 10 ++++- scripts/Makefile.modinst | 10 ++++- scripts/Makefile.modpost | 12 +++++-- scripts/kconfig/Makefile | 4 +- scripts/kconfig/lxdialog/Makefile | 6 ++- scripts/package/Makefile | 10 +++-- 25 files changed, 144 insertions(+), 75 deletions(-) 4f1933620f57145212cdbb1ac6ce099eeeb21c5a diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index 1c95588..2c6f66d 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile @@ -28,7 +28,7 @@ PS_METHOD = $(prefer-db2x) ### # The targets that may be used. -.PHONY: xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs +PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs BOOKS := $(addprefix $(obj)/,$(DOCBOOKS)) xmldocs: $(BOOKS) @@ -211,3 +211,9 @@ clean-dirs := $(patsubst %.xml,%,$(DOCBO #man put files in man subdir - traverse down subdir- := man/ + + +# Declare the contents of the .PHONY variable as phony. We keep that +# information in a variable se we can use it in if_changed and friends. + +.PHONY: $(PHONY) diff --git a/Makefile b/Makefile index 12c8d71..a59c1e2 100644 --- a/Makefile +++ b/Makefile @@ -95,7 +95,7 @@ ifdef O endif # That's our default target when none is given on the command line -.PHONY: _all +PHONY := _all _all: ifneq ($(KBUILD_OUTPUT),) @@ -106,7 +106,7 @@ KBUILD_OUTPUT := $(shell cd $(KBUILD_OUT $(if $(KBUILD_OUTPUT),, \ $(error output directory "$(saved-output)" does not exist)) -.PHONY: $(MAKECMDGOALS) +PHONY += $(MAKECMDGOALS) $(filter-out _all,$(MAKECMDGOALS)) _all: $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \ @@ -123,7 +123,7 @@ ifeq ($(skip-makefile),) # If building an external module we do not care about the all: rule # but instead _all depend on modules -.PHONY: all +PHONY += all ifeq ($(KBUILD_EXTMOD),) _all: all else @@ -337,14 +337,14 @@ export RCS_TAR_IGNORE := --exclude SCCS # Rules shared between *config targets and build targets # Basic helpers built in scripts/ -.PHONY: scripts_basic +PHONY += scripts_basic scripts_basic: $(Q)$(MAKE) $(build)=scripts/basic # To avoid any implicit rule to kick in, define an empty command. scripts/basic/%: scripts_basic ; -.PHONY: outputmakefile +PHONY += outputmakefile # outputmakefile generate a Makefile to be placed in output directory, if # using a seperate output directory. This allows convinient use # of make in output directory @@ -420,7 +420,7 @@ ifeq ($(KBUILD_EXTMOD),) # Additional helpers built in scripts/ # Carefully list dependencies so we do not try to build scripts twice # in parrallel -.PHONY: scripts +PHONY += scripts scripts: scripts_basic include/config/MARKER $(Q)$(MAKE) $(build)=$(@) @@ -720,7 +720,7 @@ $(sort $(vmlinux-init) $(vmlinux-main)) # make menuconfig etc. # Error messages still appears in the original language -.PHONY: $(vmlinux-dirs) +PHONY += $(vmlinux-dirs) $(vmlinux-dirs): prepare scripts $(Q)$(MAKE) $(build)=$@ @@ -773,10 +773,10 @@ kernelrelease = $(KERNELVERSION)$(localv # version.h and scripts_basic is processed / created. # Listed in dependency order -.PHONY: prepare archprepare prepare0 prepare1 prepare2 prepare3 +PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3 # prepare-all is deprecated, use prepare as valid replacement -.PHONY: prepare-all +PHONY += prepare-all # prepare3 is used to check if we are building in a separate output directory, # and if so do: @@ -857,7 +857,7 @@ include/linux/version.h: $(srctree)/Make # --------------------------------------------------------------------------- -.PHONY: depend dep +PHONY += depend dep depend dep: @echo '*** Warning: make $@ is unnecessary now.' @@ -872,21 +872,21 @@ all: modules # Build modules -.PHONY: modules +PHONY += modules modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) @echo ' Building modules, stage 2.'; $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost # Target to prepare building external modules -.PHONY: modules_prepare +PHONY += modules_prepare modules_prepare: prepare scripts # Target to install modules -.PHONY: modules_install +PHONY += modules_install modules_install: _modinst_ _modinst_post -.PHONY: _modinst_ +PHONY += _modinst_ _modinst_: @if [ -z "`$(DEPMOD) -V 2>/dev/null | grep module-init-tools`" ]; then \ echo "Warning: you may need to install module-init-tools"; \ @@ -913,7 +913,7 @@ depmod_opts := else depmod_opts := -b $(INSTALL_MOD_PATH) -r endif -.PHONY: _modinst_post +PHONY += _modinst_post _modinst_post: _modinst_ if [ -r System.map -a -x $(DEPMOD) ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi @@ -956,7 +956,7 @@ clean: rm-dirs := $(CLEAN_DIRS) clean: rm-files := $(CLEAN_FILES) clean-dirs := $(addprefix _clean_,$(srctree) $(vmlinux-alldirs)) -.PHONY: $(clean-dirs) clean archclean +PHONY += $(clean-dirs) clean archclean $(clean-dirs): $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@) @@ -974,7 +974,7 @@ mrproper: rm-dirs := $(wildcard $(MRPRO mrproper: rm-files := $(wildcard $(MRPROPER_FILES)) mrproper-dirs := $(addprefix _mrproper_,Documentation/DocBook scripts) -.PHONY: $(mrproper-dirs) mrproper archmrproper +PHONY += $(mrproper-dirs) mrproper archmrproper $(mrproper-dirs): $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@) @@ -984,7 +984,7 @@ mrproper: clean archmrproper $(mrproper- # distclean # -.PHONY: distclean +PHONY += distclean distclean: mrproper @find $(srctree) $(RCS_FIND_IGNORE) \ @@ -1000,7 +1000,7 @@ distclean: mrproper # rpm target kept for backward compatibility package-dir := $(srctree)/scripts/package -.PHONY: %-pkg rpm +PHONY += %-pkg rpm %pkg: FORCE $(Q)$(MAKE) -f $(package-dir)/Makefile $@ @@ -1092,12 +1092,12 @@ else # KBUILD_EXTMOD # We are always building modules KBUILD_MODULES := 1 -.PHONY: crmodverdir +PHONY += crmodverdir crmodverdir: $(Q)rm -rf $(MODVERDIR) $(Q)mkdir -p $(MODVERDIR) -.PHONY: $(objtree)/Module.symvers +PHONY += $(objtree)/Module.symvers $(objtree)/Module.symvers: @test -e $(objtree)/Module.symvers || ( \ echo; \ @@ -1106,7 +1106,7 @@ $(objtree)/Module.symvers: echo ) module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD)) -.PHONY: $(module-dirs) modules +PHONY += $(module-dirs) modules $(module-dirs): crmodverdir $(objtree)/Module.symvers $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@) @@ -1114,11 +1114,11 @@ modules: $(module-dirs) @echo ' Building modules, stage 2.'; $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost -.PHONY: modules_install +PHONY += modules_install modules_install: _emodinst_ _emodinst_post -install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra) -.PHONY: _emodinst_ +install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra) +PHONY += _emodinst_ _emodinst_: $(Q)rm -rf $(MODLIB)/$(install-dir) $(Q)mkdir -p $(MODLIB)/$(install-dir) @@ -1133,13 +1133,13 @@ quiet_cmd_depmod = DEPMOD $(KERNELRELEA $(KERNELRELEASE); \ fi -.PHONY: _emodinst_post +PHONY += _emodinst_post _emodinst_post: _emodinst_ $(call cmd,depmod) clean-dirs := $(addprefix _clean_,$(KBUILD_EXTMOD)) -.PHONY: $(clean-dirs) clean +PHONY += $(clean-dirs) clean $(clean-dirs): $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@) @@ -1161,7 +1161,7 @@ help: @echo '' # Dummies... -.PHONY: prepare scripts +PHONY += prepare scripts prepare: ; scripts: ; endif # KBUILD_EXTMOD @@ -1274,7 +1274,7 @@ namespacecheck: endif #ifeq ($(config-targets),1) endif #ifeq ($(mixed-targets),1) -.PHONY: checkstack +PHONY += checkstack checkstack: $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \ $(PERL) $(src)/scripts/checkstack.pl $(ARCH) @@ -1357,4 +1357,10 @@ clean := -f $(if $(KBUILD_SRC),$(srctree endif # skip-makefile +PHONY += FORCE FORCE: + + +# Declare the contents of the .PHONY variable as phony. We keep that +# information in a variable se we can use it in if_changed and friends. +.PHONY: $(PHONY) diff --git a/arch/arm/Makefile b/arch/arm/Makefile index fbfc14a..585d334 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -1,6 +1,9 @@ # # arch/arm/Makefile # +# This file is included by the global makefile so that you can add your own +# architecture-specific flags and dependencies. +# # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive # for more details. @@ -176,7 +179,7 @@ endif archprepare: maketools -.PHONY: maketools FORCE +PHONY += maketools FORCE maketools: include/linux/version.h include/asm-arm/.arch FORCE $(Q)$(MAKE) $(build)=arch/arm/tools include/asm-arm/mach-types.h diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile index a174d63..ec9c400 100644 --- a/arch/arm/boot/Makefile +++ b/arch/arm/boot/Makefile @@ -1,6 +1,9 @@ # # arch/arm/boot/Makefile # +# This file is included by the global makefile so that you can add your own +# architecture-specific flags and dependencies. +# # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive # for more details. @@ -73,7 +76,7 @@ $(obj)/bootpImage: $(obj)/bootp/bootp FO $(call if_changed,objcopy) @echo ' Kernel: $@ is ready' -.PHONY: initrd FORCE +PHONY += initrd FORCE initrd: @test "$(INITRD_PHYS)" != "" || \ (echo This machine does not support INITRD; exit -1) diff --git a/arch/arm/boot/bootp/Makefile b/arch/arm/boot/bootp/Makefile index 8e8879b..c394e30 100644 --- a/arch/arm/boot/bootp/Makefile +++ b/arch/arm/boot/bootp/Makefile @@ -1,6 +1,9 @@ # # linux/arch/arm/boot/bootp/Makefile # +# This file is included by the global makefile so that you can add your own +# architecture-specific flags and dependencies. +# LDFLAGS_bootp :=-p --no-undefined -X \ --defsym initrd_phys=$(INITRD_PHYS) \ @@ -21,4 +24,4 @@ $(obj)/kernel.o: arch/arm/boot/zImage FO $(obj)/initrd.o: $(INITRD) FORCE -.PHONY: $(INITRD) FORCE +PHONY += $(INITRD) FORCE diff --git a/arch/arm26/Makefile b/arch/arm26/Makefile index 844a9e4..fe91eda 100644 --- a/arch/arm26/Makefile +++ b/arch/arm26/Makefile @@ -1,6 +1,9 @@ # # arch/arm26/Makefile # +# This file is included by the global makefile so that you can add your own +# architecture-specific flags and dependencies. +# # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive # for more details. @@ -49,9 +52,9 @@ all: zImage boot := arch/arm26/boot -.PHONY: maketools FORCE +PHONY += maketools FORCE maketools: FORCE - + # Convert bzImage to zImage bzImage: vmlinux diff --git a/arch/arm26/boot/Makefile b/arch/arm26/boot/Makefile index b5c2277..68acb7b 100644 --- a/arch/arm26/boot/Makefile +++ b/arch/arm26/boot/Makefile @@ -1,6 +1,9 @@ # # arch/arm26/boot/Makefile # +# This file is included by the global makefile so that you can add your own +# architecture-specific flags and dependencies. +# # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive # for more details. @@ -60,7 +63,7 @@ $(obj)/xipImage: vmlinux FORCE @echo ' Kernel: $@ is ready' endif -.PHONY: initrd +PHONY += initrd initrd: @test "$(INITRD_PHYS)" != "" || \ (echo This machine does not support INITRD; exit -1) diff --git a/arch/i386/Makefile b/arch/i386/Makefile index 36bef65..ff6973a 100644 --- a/arch/i386/Makefile +++ b/arch/i386/Makefile @@ -99,8 +99,8 @@ AFLAGS += $(mflags-y) boot := arch/i386/boot -.PHONY: zImage bzImage compressed zlilo bzlilo \ - zdisk bzdisk fdimage fdimage144 fdimage288 install +PHONY += zImage bzImage compressed zlilo bzlilo \ + zdisk bzdisk fdimage fdimage144 fdimage288 install all: bzImage diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile index f722e1a..80ea750 100644 --- a/arch/ia64/Makefile +++ b/arch/ia64/Makefile @@ -1,6 +1,9 @@ # # ia64/Makefile # +# This file is included by the global makefile so that you can add your own +# architecture-specific flags and dependencies. +# # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive # for more details. @@ -62,7 +65,7 @@ drivers-$(CONFIG_OPROFILE) += arch/ia64/ boot := arch/ia64/hp/sim/boot -.PHONY: boot compressed check +PHONY += boot compressed check all: compressed unwcheck diff --git a/arch/m32r/Makefile b/arch/m32r/Makefile index 983d438..229f66f 100644 --- a/arch/m32r/Makefile +++ b/arch/m32r/Makefile @@ -1,6 +1,9 @@ # # m32r/Makefile # +# This file is included by the global makefile so that you can add your own +# architecture-specific flags and dependencies. +# LDFLAGS := OBJCOPYFLAGS := -O binary -R .note -R .comment -S @@ -39,7 +42,7 @@ drivers-$(CONFIG_OPROFILE) += arch/m32r/ boot := arch/m32r/boot -.PHONY: zImage +PHONY += zImage all: zImage diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 5500ab5..5787d55 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile @@ -150,7 +150,7 @@ CPPFLAGS_vmlinux.lds := -Upowerpc BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd vmlinux.sm uImage -.PHONY: $(BOOT_TARGETS) +PHONY += $(BOOT_TARGETS) boot := arch/$(ARCH)/boot diff --git a/arch/ppc/Makefile b/arch/ppc/Makefile index 98e940b..9fbdf54 100644 --- a/arch/ppc/Makefile +++ b/arch/ppc/Makefile @@ -82,7 +82,7 @@ drivers-$(CONFIG_OPROFILE) += arch/power BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd vmlinux.sm -.PHONY: $(BOOT_TARGETS) +PHONY += $(BOOT_TARGETS) all: uImage zImage diff --git a/arch/ppc/boot/Makefile b/arch/ppc/boot/Makefile index efd8ce5..84eec0b 100644 --- a/arch/ppc/boot/Makefile +++ b/arch/ppc/boot/Makefile @@ -1,6 +1,9 @@ # # arch/ppc/boot/Makefile # +# This file is included by the global makefile so that you can add your own +# architecture-specific flags and dependencies. +# # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive # for more details. @@ -25,7 +28,7 @@ subdir- += simple openfirmware hostprogs-y := $(addprefix utils/, addnote mknote hack-coff mkprep mkbugboot mktree) -.PHONY: $(BOOT_TARGETS) $(bootdir-y) +PHONY += $(BOOT_TARGETS) $(bootdir-y) $(BOOT_TARGETS): $(bootdir-y) diff --git a/arch/ppc/boot/openfirmware/Makefile b/arch/ppc/boot/openfirmware/Makefile index 2a411ec..66b7397 100644 --- a/arch/ppc/boot/openfirmware/Makefile +++ b/arch/ppc/boot/openfirmware/Makefile @@ -1,5 +1,8 @@ # Makefile for making bootable images on various OpenFirmware machines. # +# This file is included by the global makefile so that you can add your own +# architecture-specific flags and dependencies. +# # Paul Mackerras January 1997 # XCOFF bootable images for PowerMacs # Geert Uytterhoeven September 1997 @@ -86,7 +89,7 @@ $(images)/zImage.chrp-rs6k $(images)/zIm # The targets used on the make command-line -.PHONY: zImage zImage.initrd +PHONY += zImage zImage.initrd zImage: $(images)/zImage.chrp \ $(images)/zImage.chrp-rs6k @echo ' kernel: $@ is ready ($<)' @@ -96,7 +99,7 @@ zImage.initrd: $(images)/zImage.initrd. TFTPIMAGE := /tftpboot/zImage -.PHONY: znetboot znetboot.initrd +PHONY += znetboot znetboot.initrd znetboot: $(images)/zImage.chrp cp $(images)/zImage.chrp $(TFTPIMAGE).chrp$(END) @echo ' kernel: $@ is ready ($<)' diff --git a/arch/sh/Makefile b/arch/sh/Makefile index 08c9515..c72e17a 100644 --- a/arch/sh/Makefile +++ b/arch/sh/Makefile @@ -172,7 +172,7 @@ include/asm-sh/.mach: $(wildcard include archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach -.PHONY: maketools FORCE +PHONY += maketools FORCE maketools: include/linux/version.h FORCE $(Q)$(MAKE) $(build)=arch/sh/tools include/asm-sh/machtypes.h diff --git a/arch/um/Makefile b/arch/um/Makefile index c58b657..8d14c7a 100644 --- a/arch/um/Makefile +++ b/arch/um/Makefile @@ -1,4 +1,7 @@ -# +# +# This file is included by the global makefile so that you can add your own +# architecture-specific flags and dependencies. +# # Copyright (C) 2002 Jeff Dike (jdike@karaya.com) # Licensed under the GPL # @@ -88,7 +91,7 @@ CONFIG_KERNEL_HALF_GIGS ?= 0 SIZE = (($(CONFIG_NEST_LEVEL) + $(CONFIG_KERNEL_HALF_GIGS)) * 0x20000000) -.PHONY: linux +PHONY += linux all: linux diff --git a/arch/x86_64/Makefile b/arch/x86_64/Makefile index d7fd464..7405dfd 100644 --- a/arch/x86_64/Makefile +++ b/arch/x86_64/Makefile @@ -67,8 +67,8 @@ drivers-$(CONFIG_OPROFILE) += arch/x86_ boot := arch/x86_64/boot -.PHONY: bzImage bzlilo install archmrproper \ - fdimage fdimage144 fdimage288 archclean +PHONY += bzImage bzlilo install archmrproper \ + fdimage fdimage144 fdimage288 archclean #Default target when executing "make" all: bzImage diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index c3d2e4e..59620b1 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -116,16 +116,18 @@ make-cmd = $(subst \#,\\\#,$(subst $$,$$ # function to only execute the passed command if necessary # >'< substitution is for echo to work, >$< substitution to preserve $ when reloading .cmd file # note: when using inline perl scripts [perl -e '...$$t=1;...'] in $(cmd_xxx) double $$ your perl vars -# -if_changed = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ +# +if_changed = $(if $(strip $(filter-out $(PHONY),$?) \ + $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ @set -e; \ $(echo-cmd) $(cmd_$(1)); \ echo 'cmd_$@ := $(make-cmd)' > $(@D)/.$(@F).cmd) # execute the command and also postprocess generated .d dependencies # file -if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\ - $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ +if_changed_dep = $(if $(strip $(filter-out $(PHONY),$?) \ + $(filter-out FORCE $(wildcard $^),$^) \ + $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ @set -e; \ $(echo-cmd) $(cmd_$(1)); \ scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(@D)/.$(@F).tmp; \ @@ -135,6 +137,7 @@ if_changed_dep = $(if $(strip $? $(filte # Usage: $(call if_changed_rule,foo) # will check if $(cmd_foo) changed, or any of the prequisites changed, # and if so will execute $(rule_foo) -if_changed_rule = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\ +if_changed_rule = $(if $(strip $(filter-out $(PHONY),$?) \ + $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\ @set -e; \ $(rule_$(1))) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 6ac96ea..7afe3e7 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -4,7 +4,7 @@ src := $(obj) -.PHONY: __build +PHONY := __build __build: # Read .config if it exist, otherwise ignore @@ -308,14 +308,14 @@ targets += $(multi-used-y) $(multi-used- # Descending # --------------------------------------------------------------------------- -.PHONY: $(subdir-ym) +PHONY += $(subdir-ym) $(subdir-ym): $(Q)$(MAKE) $(build)=$@ # Add FORCE to the prequisites of a target to force it to be always rebuilt. # --------------------------------------------------------------------------- -.PHONY: FORCE +PHONY += FORCE FORCE: @@ -330,3 +330,9 @@ cmd_files := $(wildcard $(foreach f,$(ta ifneq ($(cmd_files),) include $(cmd_files) endif + + +# Declare the contents of the .PHONY variable as phony. We keep that +# information in a variable se we can use it in if_changed and friends. + +.PHONY: $(PHONY) diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean index 8974ea5..cff3349 100644 --- a/scripts/Makefile.clean +++ b/scripts/Makefile.clean @@ -4,7 +4,7 @@ src := $(obj) -.PHONY: __clean +PHONY := __clean __clean: # Shorthand for $(Q)$(MAKE) scripts/Makefile.clean obj=dir @@ -87,10 +87,16 @@ endif # Descending # --------------------------------------------------------------------------- -.PHONY: $(subdir-ymn) +PHONY += $(subdir-ymn) $(subdir-ymn): $(Q)$(MAKE) $(clean)=$@ # If quiet is set, only print short version of command cmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1)) + + +# Declare the contents of the .PHONY variable as phony. We keep that +# information in a variable se we can use it in if_changed and friends. + +.PHONY: $(PHONY) diff --git a/scripts/Makefile.modinst b/scripts/Makefile.modinst index 23fd1bd..2686dd5 100644 --- a/scripts/Makefile.modinst +++ b/scripts/Makefile.modinst @@ -2,7 +2,7 @@ # Installing modules # ========================================================================== -.PHONY: __modinst +PHONY := __modinst __modinst: include scripts/Kbuild.include @@ -12,7 +12,7 @@ include scripts/Kbuild.include __modules := $(sort $(shell grep -h '\.ko' /dev/null $(wildcard $(MODVERDIR)/*.mod))) modules := $(patsubst %.o,%.ko,$(wildcard $(__modules:.ko=.o))) -.PHONY: $(modules) +PHONY += $(modules) __modinst: $(modules) @: @@ -27,3 +27,9 @@ modinst_dir = $(if $(KBUILD_EXTMOD),$(ex $(modules): $(call cmd,modules_install,$(MODLIB)/$(modinst_dir)) + + +# Declare the contents of the .PHONY variable as phony. We keep that +# information in a variable se we can use it in if_changed and friends. + +.PHONY: $(PHONY) diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index 563e3c5..0cfbe1c 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost @@ -32,7 +32,7 @@ # Step 4 is solely used to allow module versioning in external modules, # where the CRC of each module is retrieved from the Module.symers file. -.PHONY: _modpost +PHONY := _modpost _modpost: __modpost include .config @@ -60,7 +60,7 @@ quiet_cmd_modpost = MODPOST $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \ $(filter-out FORCE,$^) -.PHONY: __modpost +PHONY += __modpost __modpost: $(wildcard vmlinux) $(modules:.ko=.o) FORCE $(call cmd,modpost) @@ -97,7 +97,7 @@ targets += $(modules) # Add FORCE to the prequisites of a target to force it to be always rebuilt. # --------------------------------------------------------------------------- -.PHONY: FORCE +PHONY += FORCE FORCE: @@ -112,3 +112,9 @@ cmd_files := $(wildcard $(foreach f,$(ta ifneq ($(cmd_files),) include $(cmd_files) endif + + +# Declare the contents of the .PHONY variable as phony. We keep that +# information in a variable se we can use it in if_changed and friends. + +.PHONY: $(PHONY) diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile index 5280945..e6499db 100644 --- a/scripts/kconfig/Makefile +++ b/scripts/kconfig/Makefile @@ -2,7 +2,7 @@ # Kernel configuration targets # These targets are used from top-level makefile -.PHONY: oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config +PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config xconfig: $(obj)/qconf $< arch/$(ARCH)/Kconfig @@ -42,7 +42,7 @@ update-po-config: $(obj)/kxgettext $(Q)rm -f arch/um/Kconfig_arch $(Q)rm -f scripts/kconfig/linux_*.pot scripts/kconfig/config.pot -.PHONY: randconfig allyesconfig allnoconfig allmodconfig defconfig +PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig randconfig: $(obj)/conf $< -r arch/$(ARCH)/Kconfig diff --git a/scripts/kconfig/lxdialog/Makefile b/scripts/kconfig/lxdialog/Makefile index bbf4887..a8b0263 100644 --- a/scripts/kconfig/lxdialog/Makefile +++ b/scripts/kconfig/lxdialog/Makefile @@ -7,10 +7,10 @@ check-lxdialog := $(srctree)/$(src)/che # we really need to do so. (Do not call gcc as part of make mrproper) HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) HOST_LOADLIBES = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC)) - -HOST_EXTRACFLAGS += -DLOCALE -.PHONY: dochecklxdialog +HOST_EXTRACFLAGS += -DLOCALE + +PHONY += dochecklxdialog $(obj)/dochecklxdialog: $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_LOADLIBES) diff --git a/scripts/package/Makefile b/scripts/package/Makefile index c201ef0..d3038b7 100644 --- a/scripts/package/Makefile +++ b/scripts/package/Makefile @@ -32,7 +32,7 @@ MKSPEC := $(srctree)/scripts/package PREV := set -e; cd ..; # rpm-pkg -.PHONY: rpm-pkg rpm +PHONY += rpm-pkg rpm $(objtree)/kernel.spec: $(MKSPEC) $(srctree)/Makefile $(CONFIG_SHELL) $(MKSPEC) > $@ @@ -54,10 +54,10 @@ rpm-pkg rpm: $(objtree)/kernel.spec clean-files := $(objtree)/kernel.spec # binrpm-pkg -.PHONY: binrpm-pkg +PHONY += binrpm-pkg $(objtree)/binkernel.spec: $(MKSPEC) $(srctree)/Makefile $(CONFIG_SHELL) $(MKSPEC) prebuilt > $@ - + binrpm-pkg: $(objtree)/binkernel.spec $(MAKE) KBUILD_SRC= set -e; \ @@ -72,7 +72,7 @@ clean-files += $(objtree)/binkernel.spec # Deb target # --------------------------------------------------------------------------- # -.PHONY: deb-pkg +PHONY += deb-pkg deb-pkg: $(MAKE) KBUILD_SRC= $(CONFIG_SHELL) $(srctree)/scripts/package/builddeb @@ -82,7 +82,7 @@ clean-dirs += $(objtree)/debian/ # tarball targets # --------------------------------------------------------------------------- -.PHONY: tar%pkg +PHONY += tar%pkg tar%pkg: $(MAKE) KBUILD_SRC= $(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@ -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 36/46] kbuild: Fix bug in crc symbol generating of kernel and modules 2006-03-21 16:20 ` [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 37/46] kbuild: replace PHONY with FORCE Sam Ravnborg 2006-03-21 17:28 ` [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior Jan-Benedict Glaw 1 sibling, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Luke Yang, Sam Ravnborg The scripts/genksyms/genksyms.c uses hardcoded "__crc_" prefix for crc symbols in kernel and modules. The prefix should be replaced by "MODULE_SYMBOL_PREFIX##__crc_" otherwise there will be warnings when MODULE_SYMBOL_PREFIX is not NULL. I am sorry my last patch for this issue is actually wrong. I revert it in this patch. Signed-off-by: Luke Yang <luke.adi@gmail.com> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/genksyms/genksyms.c | 4 ++-- scripts/mod/modpost.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) f7b05e64bdb2fcc4b2dc94a4bd9426adc70c9599 diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c index 416a694..ef8822e 100644 --- a/scripts/genksyms/genksyms.c +++ b/scripts/genksyms/genksyms.c @@ -32,7 +32,7 @@ #endif /* __GNU_LIBRARY__ */ #include "genksyms.h" - +#include "../mod/elfconfig.h" /*----------------------------------------------------------------------*/ #define HASH_BUCKETS 4096 @@ -458,7 +458,7 @@ export_symbol(const char *name) fputs(">\n", debugfile); /* Used as a linker script. */ - printf("__crc_%s = 0x%08lx ;\n", name, crc); + printf("%s__crc_%s = 0x%08lx ;\n", MODULE_SYMBOL_PREFIX, name, crc); } } diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index e2bf4c9..30f3ac8 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -346,8 +346,8 @@ static void parse_elf_finish(struct elf_ release_file(info->hdr, info->size); } -#define CRC_PFX "__crc_" -#define KSYMTAB_PFX "__ksymtab_" +#define CRC_PFX MODULE_SYMBOL_PREFIX "__crc_" +#define KSYMTAB_PFX MODULE_SYMBOL_PREFIX "__ksymtab_" static void handle_modversions(struct module *mod, struct elf_info *info, Elf_Sym *sym, const char *symname) -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 37/46] kbuild: replace PHONY with FORCE 2006-03-21 16:20 ` [PATCH 36/46] kbuild: Fix bug in crc symbol generating of kernel and modules Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 38/46] kbuild: in makefile.txt note that Makefile is preferred name for kbuild files Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg .PHONY: does not take patterns so use FORCE to achive same effect. Thanks to "Paul D. Smith" <psmith@gnu.org> for noticing this. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- Makefile | 2 -- scripts/package/Makefile | 18 +++++++----------- 2 files changed, 7 insertions(+), 13 deletions(-) 0131705d589e2341dbc5e8946a60f83d8c1773dc diff --git a/Makefile b/Makefile index a59c1e2..eca667b 100644 --- a/Makefile +++ b/Makefile @@ -1000,8 +1000,6 @@ distclean: mrproper # rpm target kept for backward compatibility package-dir := $(srctree)/scripts/package -PHONY += %-pkg rpm - %pkg: FORCE $(Q)$(MAKE) -f $(package-dir)/Makefile $@ rpm: FORCE diff --git a/scripts/package/Makefile b/scripts/package/Makefile index d3038b7..7c434e0 100644 --- a/scripts/package/Makefile +++ b/scripts/package/Makefile @@ -32,12 +32,11 @@ MKSPEC := $(srctree)/scripts/package PREV := set -e; cd ..; # rpm-pkg -PHONY += rpm-pkg rpm - +# --------------------------------------------------------------------------- $(objtree)/kernel.spec: $(MKSPEC) $(srctree)/Makefile $(CONFIG_SHELL) $(MKSPEC) > $@ -rpm-pkg rpm: $(objtree)/kernel.spec +rpm-pkg rpm: $(objtree)/kernel.spec FORCE $(MAKE) clean $(PREV) ln -sf $(srctree) $(KERNELPATH) $(PREV) tar -cz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(KERNELPATH)/. @@ -54,11 +53,11 @@ rpm-pkg rpm: $(objtree)/kernel.spec clean-files := $(objtree)/kernel.spec # binrpm-pkg -PHONY += binrpm-pkg +# --------------------------------------------------------------------------- $(objtree)/binkernel.spec: $(MKSPEC) $(srctree)/Makefile $(CONFIG_SHELL) $(MKSPEC) prebuilt > $@ -binrpm-pkg: $(objtree)/binkernel.spec +binrpm-pkg: $(objtree)/binkernel.spec FORCE $(MAKE) KBUILD_SRC= set -e; \ $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version @@ -71,9 +70,7 @@ clean-files += $(objtree)/binkernel.spec # Deb target # --------------------------------------------------------------------------- -# -PHONY += deb-pkg -deb-pkg: +deb-pkg: FORCE $(MAKE) KBUILD_SRC= $(CONFIG_SHELL) $(srctree)/scripts/package/builddeb @@ -82,8 +79,7 @@ clean-dirs += $(objtree)/debian/ # tarball targets # --------------------------------------------------------------------------- -PHONY += tar%pkg -tar%pkg: +tar%pkg: FORCE $(MAKE) KBUILD_SRC= $(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@ @@ -92,7 +88,7 @@ clean-dirs += $(objtree)/tar-install/ # Help text displayed when executing 'make help' # --------------------------------------------------------------------------- -help: +help: FORCE @echo ' rpm-pkg - Build the kernel as an RPM package' @echo ' binrpm-pkg - Build an rpm package containing the compiled kernel' @echo ' and modules' -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 38/46] kbuild: in makefile.txt note that Makefile is preferred name for kbuild files 2006-03-21 16:20 ` [PATCH 37/46] kbuild: replace PHONY with FORCE Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 39/46] kbuild: fix genksyms build error Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg As noted by Roland Dreier <rdreier@cisco.com> makefiles.txt told one to use the name 'Kbuild' as preferred name for kbuild files. This is not yet true so let makefiles.txt reflect reality. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- Documentation/kbuild/makefiles.txt | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) 172c3ae3e686f548a0eba950405e5cc321460005 diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index 99d51a5..a9c00fa 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt @@ -106,9 +106,9 @@ This document is aimed towards normal de Most Makefiles within the kernel are kbuild Makefiles that use the kbuild infrastructure. This chapter introduce the syntax used in the kbuild makefiles. -The preferred name for the kbuild files is 'Kbuild' but 'Makefile' will -continue to be supported. All new developmen is expected to use the -Kbuild filename. +The preferred name for the kbuild files are 'Makefile' but 'Kbuild' can +be used and if both a 'Makefile' and a 'Kbuild' file exists then the 'Kbuild' +file will be used. Section 3.1 "Goal definitions" is a quick intro, further chapters provide more details, with real examples. -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 39/46] kbuild: fix genksyms build error 2006-03-21 16:20 ` [PATCH 38/46] kbuild: in makefile.txt note that Makefile is preferred name for kbuild files Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 40/46] kbuild: Lindent genksyms.c Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg genksyms needs to know when a symbol must have a "_" prefex as is true for a few architectures. Pass $(ARCH) as commandline argument and hardcode what architectures that needs this info. Previous attemt to take it from elfconfig.h was br0ken since elfconfig.h is a generated file. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/Makefile.build | 2 +- scripts/genksyms/genksyms.c | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) c79c7b0923ff353d12194e83628bcca5a8606564 diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 7afe3e7..19ef2bc 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -166,7 +166,7 @@ cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D cmd_modversions = \ if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then \ $(CPP) -D__GENKSYMS__ $(c_flags) $< \ - | $(GENKSYMS) \ + | $(GENKSYMS) -a $(ARCH) \ > $(@D)/.tmp_$(@F:.o=.ver); \ \ $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \ diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c index ef8822e..da8ff4f 100644 --- a/scripts/genksyms/genksyms.c +++ b/scripts/genksyms/genksyms.c @@ -32,7 +32,6 @@ #endif /* __GNU_LIBRARY__ */ #include "genksyms.h" -#include "../mod/elfconfig.h" /*----------------------------------------------------------------------*/ #define HASH_BUCKETS 4096 @@ -44,6 +43,8 @@ int cur_line = 1; char *cur_filename, *output_directory; int flag_debug, flag_dump_defs, flag_warnings; +const char *arch = ""; +const char *mod_prefix = ""; static int errors; static int nsyms; @@ -458,7 +459,7 @@ export_symbol(const char *name) fputs(">\n", debugfile); /* Used as a linker script. */ - printf("%s__crc_%s = 0x%08lx ;\n", MODULE_SYMBOL_PREFIX, name, crc); + printf("%s__crc_%s = 0x%08lx ;\n", mod_prefix, name, crc); } } @@ -529,6 +530,7 @@ main(int argc, char **argv) #ifdef __GNU_LIBRARY__ struct option long_opts[] = { + {"arch", 1, 0, 'a'}, {"debug", 0, 0, 'd'}, {"warnings", 0, 0, 'w'}, {"quiet", 0, 0, 'q'}, @@ -538,13 +540,16 @@ main(int argc, char **argv) {0, 0, 0, 0} }; - while ((o = getopt_long(argc, argv, "dwqVDk:p:", + while ((o = getopt_long(argc, argv, "a:dwqVDk:p:", &long_opts[0], NULL)) != EOF) #else /* __GNU_LIBRARY__ */ - while ((o = getopt(argc, argv, "dwqVDk:p:")) != EOF) + while ((o = getopt(argc, argv, "a:dwqVDk:p:")) != EOF) #endif /* __GNU_LIBRARY__ */ switch (o) { + case 'a': + arch = optarg; + break; case 'd': flag_debug++; break; @@ -567,7 +572,9 @@ main(int argc, char **argv) genksyms_usage(); return 1; } - + if ((strcmp(arch, "v850") == 0) || + (strcmp(arch, "h8300") == 0)) + mod_prefix = "_"; { extern int yydebug; extern int yy_flex_debug; -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 40/46] kbuild: Lindent genksyms.c 2006-03-21 16:20 ` [PATCH 39/46] kbuild: fix genksyms build error Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 41/46] kbuild: clean-up genksyms Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg No fix-ups applied yet. Just the raw Lindent output. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/genksyms/genksyms.c | 832 +++++++++++++++++++++---------------------- 1 files changed, 398 insertions(+), 434 deletions(-) 78c041530ac2e65c9290137bfe3004340e0840d2 diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c index da8ff4f..b798e28 100644 --- a/scripts/genksyms/genksyms.c +++ b/scripts/genksyms/genksyms.c @@ -29,7 +29,7 @@ #include <stdarg.h> #ifdef __GNU_LIBRARY__ #include <getopt.h> -#endif /* __GNU_LIBRARY__ */ +#endif /* __GNU_LIBRARY__ */ #include "genksyms.h" /*----------------------------------------------------------------------*/ @@ -51,460 +51,427 @@ static int nsyms; static struct symbol *expansion_trail; -static const char * const symbol_type_name[] = { - "normal", "typedef", "enum", "struct", "union" +static const char *const symbol_type_name[] = { + "normal", "typedef", "enum", "struct", "union" }; /*----------------------------------------------------------------------*/ -static const unsigned int crctab32[] = -{ - 0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U, - 0x706af48fU, 0xe963a535U, 0x9e6495a3U, 0x0edb8832U, 0x79dcb8a4U, - 0xe0d5e91eU, 0x97d2d988U, 0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U, - 0x90bf1d91U, 0x1db71064U, 0x6ab020f2U, 0xf3b97148U, 0x84be41deU, - 0x1adad47dU, 0x6ddde4ebU, 0xf4d4b551U, 0x83d385c7U, 0x136c9856U, - 0x646ba8c0U, 0xfd62f97aU, 0x8a65c9ecU, 0x14015c4fU, 0x63066cd9U, - 0xfa0f3d63U, 0x8d080df5U, 0x3b6e20c8U, 0x4c69105eU, 0xd56041e4U, - 0xa2677172U, 0x3c03e4d1U, 0x4b04d447U, 0xd20d85fdU, 0xa50ab56bU, - 0x35b5a8faU, 0x42b2986cU, 0xdbbbc9d6U, 0xacbcf940U, 0x32d86ce3U, - 0x45df5c75U, 0xdcd60dcfU, 0xabd13d59U, 0x26d930acU, 0x51de003aU, - 0xc8d75180U, 0xbfd06116U, 0x21b4f4b5U, 0x56b3c423U, 0xcfba9599U, - 0xb8bda50fU, 0x2802b89eU, 0x5f058808U, 0xc60cd9b2U, 0xb10be924U, - 0x2f6f7c87U, 0x58684c11U, 0xc1611dabU, 0xb6662d3dU, 0x76dc4190U, - 0x01db7106U, 0x98d220bcU, 0xefd5102aU, 0x71b18589U, 0x06b6b51fU, - 0x9fbfe4a5U, 0xe8b8d433U, 0x7807c9a2U, 0x0f00f934U, 0x9609a88eU, - 0xe10e9818U, 0x7f6a0dbbU, 0x086d3d2dU, 0x91646c97U, 0xe6635c01U, - 0x6b6b51f4U, 0x1c6c6162U, 0x856530d8U, 0xf262004eU, 0x6c0695edU, - 0x1b01a57bU, 0x8208f4c1U, 0xf50fc457U, 0x65b0d9c6U, 0x12b7e950U, - 0x8bbeb8eaU, 0xfcb9887cU, 0x62dd1ddfU, 0x15da2d49U, 0x8cd37cf3U, - 0xfbd44c65U, 0x4db26158U, 0x3ab551ceU, 0xa3bc0074U, 0xd4bb30e2U, - 0x4adfa541U, 0x3dd895d7U, 0xa4d1c46dU, 0xd3d6f4fbU, 0x4369e96aU, - 0x346ed9fcU, 0xad678846U, 0xda60b8d0U, 0x44042d73U, 0x33031de5U, - 0xaa0a4c5fU, 0xdd0d7cc9U, 0x5005713cU, 0x270241aaU, 0xbe0b1010U, - 0xc90c2086U, 0x5768b525U, 0x206f85b3U, 0xb966d409U, 0xce61e49fU, - 0x5edef90eU, 0x29d9c998U, 0xb0d09822U, 0xc7d7a8b4U, 0x59b33d17U, - 0x2eb40d81U, 0xb7bd5c3bU, 0xc0ba6cadU, 0xedb88320U, 0x9abfb3b6U, - 0x03b6e20cU, 0x74b1d29aU, 0xead54739U, 0x9dd277afU, 0x04db2615U, - 0x73dc1683U, 0xe3630b12U, 0x94643b84U, 0x0d6d6a3eU, 0x7a6a5aa8U, - 0xe40ecf0bU, 0x9309ff9dU, 0x0a00ae27U, 0x7d079eb1U, 0xf00f9344U, - 0x8708a3d2U, 0x1e01f268U, 0x6906c2feU, 0xf762575dU, 0x806567cbU, - 0x196c3671U, 0x6e6b06e7U, 0xfed41b76U, 0x89d32be0U, 0x10da7a5aU, - 0x67dd4accU, 0xf9b9df6fU, 0x8ebeeff9U, 0x17b7be43U, 0x60b08ed5U, - 0xd6d6a3e8U, 0xa1d1937eU, 0x38d8c2c4U, 0x4fdff252U, 0xd1bb67f1U, - 0xa6bc5767U, 0x3fb506ddU, 0x48b2364bU, 0xd80d2bdaU, 0xaf0a1b4cU, - 0x36034af6U, 0x41047a60U, 0xdf60efc3U, 0xa867df55U, 0x316e8eefU, - 0x4669be79U, 0xcb61b38cU, 0xbc66831aU, 0x256fd2a0U, 0x5268e236U, - 0xcc0c7795U, 0xbb0b4703U, 0x220216b9U, 0x5505262fU, 0xc5ba3bbeU, - 0xb2bd0b28U, 0x2bb45a92U, 0x5cb36a04U, 0xc2d7ffa7U, 0xb5d0cf31U, - 0x2cd99e8bU, 0x5bdeae1dU, 0x9b64c2b0U, 0xec63f226U, 0x756aa39cU, - 0x026d930aU, 0x9c0906a9U, 0xeb0e363fU, 0x72076785U, 0x05005713U, - 0x95bf4a82U, 0xe2b87a14U, 0x7bb12baeU, 0x0cb61b38U, 0x92d28e9bU, - 0xe5d5be0dU, 0x7cdcefb7U, 0x0bdbdf21U, 0x86d3d2d4U, 0xf1d4e242U, - 0x68ddb3f8U, 0x1fda836eU, 0x81be16cdU, 0xf6b9265bU, 0x6fb077e1U, - 0x18b74777U, 0x88085ae6U, 0xff0f6a70U, 0x66063bcaU, 0x11010b5cU, - 0x8f659effU, 0xf862ae69U, 0x616bffd3U, 0x166ccf45U, 0xa00ae278U, - 0xd70dd2eeU, 0x4e048354U, 0x3903b3c2U, 0xa7672661U, 0xd06016f7U, - 0x4969474dU, 0x3e6e77dbU, 0xaed16a4aU, 0xd9d65adcU, 0x40df0b66U, - 0x37d83bf0U, 0xa9bcae53U, 0xdebb9ec5U, 0x47b2cf7fU, 0x30b5ffe9U, - 0xbdbdf21cU, 0xcabac28aU, 0x53b39330U, 0x24b4a3a6U, 0xbad03605U, - 0xcdd70693U, 0x54de5729U, 0x23d967bfU, 0xb3667a2eU, 0xc4614ab8U, - 0x5d681b02U, 0x2a6f2b94U, 0xb40bbe37U, 0xc30c8ea1U, 0x5a05df1bU, - 0x2d02ef8dU +static const unsigned int crctab32[] = { + 0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U, + 0x706af48fU, 0xe963a535U, 0x9e6495a3U, 0x0edb8832U, 0x79dcb8a4U, + 0xe0d5e91eU, 0x97d2d988U, 0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U, + 0x90bf1d91U, 0x1db71064U, 0x6ab020f2U, 0xf3b97148U, 0x84be41deU, + 0x1adad47dU, 0x6ddde4ebU, 0xf4d4b551U, 0x83d385c7U, 0x136c9856U, + 0x646ba8c0U, 0xfd62f97aU, 0x8a65c9ecU, 0x14015c4fU, 0x63066cd9U, + 0xfa0f3d63U, 0x8d080df5U, 0x3b6e20c8U, 0x4c69105eU, 0xd56041e4U, + 0xa2677172U, 0x3c03e4d1U, 0x4b04d447U, 0xd20d85fdU, 0xa50ab56bU, + 0x35b5a8faU, 0x42b2986cU, 0xdbbbc9d6U, 0xacbcf940U, 0x32d86ce3U, + 0x45df5c75U, 0xdcd60dcfU, 0xabd13d59U, 0x26d930acU, 0x51de003aU, + 0xc8d75180U, 0xbfd06116U, 0x21b4f4b5U, 0x56b3c423U, 0xcfba9599U, + 0xb8bda50fU, 0x2802b89eU, 0x5f058808U, 0xc60cd9b2U, 0xb10be924U, + 0x2f6f7c87U, 0x58684c11U, 0xc1611dabU, 0xb6662d3dU, 0x76dc4190U, + 0x01db7106U, 0x98d220bcU, 0xefd5102aU, 0x71b18589U, 0x06b6b51fU, + 0x9fbfe4a5U, 0xe8b8d433U, 0x7807c9a2U, 0x0f00f934U, 0x9609a88eU, + 0xe10e9818U, 0x7f6a0dbbU, 0x086d3d2dU, 0x91646c97U, 0xe6635c01U, + 0x6b6b51f4U, 0x1c6c6162U, 0x856530d8U, 0xf262004eU, 0x6c0695edU, + 0x1b01a57bU, 0x8208f4c1U, 0xf50fc457U, 0x65b0d9c6U, 0x12b7e950U, + 0x8bbeb8eaU, 0xfcb9887cU, 0x62dd1ddfU, 0x15da2d49U, 0x8cd37cf3U, + 0xfbd44c65U, 0x4db26158U, 0x3ab551ceU, 0xa3bc0074U, 0xd4bb30e2U, + 0x4adfa541U, 0x3dd895d7U, 0xa4d1c46dU, 0xd3d6f4fbU, 0x4369e96aU, + 0x346ed9fcU, 0xad678846U, 0xda60b8d0U, 0x44042d73U, 0x33031de5U, + 0xaa0a4c5fU, 0xdd0d7cc9U, 0x5005713cU, 0x270241aaU, 0xbe0b1010U, + 0xc90c2086U, 0x5768b525U, 0x206f85b3U, 0xb966d409U, 0xce61e49fU, + 0x5edef90eU, 0x29d9c998U, 0xb0d09822U, 0xc7d7a8b4U, 0x59b33d17U, + 0x2eb40d81U, 0xb7bd5c3bU, 0xc0ba6cadU, 0xedb88320U, 0x9abfb3b6U, + 0x03b6e20cU, 0x74b1d29aU, 0xead54739U, 0x9dd277afU, 0x04db2615U, + 0x73dc1683U, 0xe3630b12U, 0x94643b84U, 0x0d6d6a3eU, 0x7a6a5aa8U, + 0xe40ecf0bU, 0x9309ff9dU, 0x0a00ae27U, 0x7d079eb1U, 0xf00f9344U, + 0x8708a3d2U, 0x1e01f268U, 0x6906c2feU, 0xf762575dU, 0x806567cbU, + 0x196c3671U, 0x6e6b06e7U, 0xfed41b76U, 0x89d32be0U, 0x10da7a5aU, + 0x67dd4accU, 0xf9b9df6fU, 0x8ebeeff9U, 0x17b7be43U, 0x60b08ed5U, + 0xd6d6a3e8U, 0xa1d1937eU, 0x38d8c2c4U, 0x4fdff252U, 0xd1bb67f1U, + 0xa6bc5767U, 0x3fb506ddU, 0x48b2364bU, 0xd80d2bdaU, 0xaf0a1b4cU, + 0x36034af6U, 0x41047a60U, 0xdf60efc3U, 0xa867df55U, 0x316e8eefU, + 0x4669be79U, 0xcb61b38cU, 0xbc66831aU, 0x256fd2a0U, 0x5268e236U, + 0xcc0c7795U, 0xbb0b4703U, 0x220216b9U, 0x5505262fU, 0xc5ba3bbeU, + 0xb2bd0b28U, 0x2bb45a92U, 0x5cb36a04U, 0xc2d7ffa7U, 0xb5d0cf31U, + 0x2cd99e8bU, 0x5bdeae1dU, 0x9b64c2b0U, 0xec63f226U, 0x756aa39cU, + 0x026d930aU, 0x9c0906a9U, 0xeb0e363fU, 0x72076785U, 0x05005713U, + 0x95bf4a82U, 0xe2b87a14U, 0x7bb12baeU, 0x0cb61b38U, 0x92d28e9bU, + 0xe5d5be0dU, 0x7cdcefb7U, 0x0bdbdf21U, 0x86d3d2d4U, 0xf1d4e242U, + 0x68ddb3f8U, 0x1fda836eU, 0x81be16cdU, 0xf6b9265bU, 0x6fb077e1U, + 0x18b74777U, 0x88085ae6U, 0xff0f6a70U, 0x66063bcaU, 0x11010b5cU, + 0x8f659effU, 0xf862ae69U, 0x616bffd3U, 0x166ccf45U, 0xa00ae278U, + 0xd70dd2eeU, 0x4e048354U, 0x3903b3c2U, 0xa7672661U, 0xd06016f7U, + 0x4969474dU, 0x3e6e77dbU, 0xaed16a4aU, 0xd9d65adcU, 0x40df0b66U, + 0x37d83bf0U, 0xa9bcae53U, 0xdebb9ec5U, 0x47b2cf7fU, 0x30b5ffe9U, + 0xbdbdf21cU, 0xcabac28aU, 0x53b39330U, 0x24b4a3a6U, 0xbad03605U, + 0xcdd70693U, 0x54de5729U, 0x23d967bfU, 0xb3667a2eU, 0xc4614ab8U, + 0x5d681b02U, 0x2a6f2b94U, 0xb40bbe37U, 0xc30c8ea1U, 0x5a05df1bU, + 0x2d02ef8dU }; static inline unsigned long partial_crc32_one(unsigned char c, unsigned long crc) { - return crctab32[(crc ^ c) & 0xff] ^ (crc >> 8); + return crctab32[(crc ^ c) & 0xff] ^ (crc >> 8); } -static inline unsigned long -partial_crc32(const char *s, unsigned long crc) +static inline unsigned long partial_crc32(const char *s, unsigned long crc) { - while (*s) - crc = partial_crc32_one(*s++, crc); - return crc; + while (*s) + crc = partial_crc32_one(*s++, crc); + return crc; } -static inline unsigned long -crc32(const char *s) +static inline unsigned long crc32(const char *s) { - return partial_crc32(s, 0xffffffff) ^ 0xffffffff; + return partial_crc32(s, 0xffffffff) ^ 0xffffffff; } - /*----------------------------------------------------------------------*/ -static inline enum symbol_type -map_to_ns(enum symbol_type t) +static inline enum symbol_type map_to_ns(enum symbol_type t) { - if (t == SYM_TYPEDEF) - t = SYM_NORMAL; - else if (t == SYM_UNION) - t = SYM_STRUCT; - return t; + if (t == SYM_TYPEDEF) + t = SYM_NORMAL; + else if (t == SYM_UNION) + t = SYM_STRUCT; + return t; } -struct symbol * -find_symbol(const char *name, enum symbol_type ns) +struct symbol *find_symbol(const char *name, enum symbol_type ns) { - unsigned long h = crc32(name) % HASH_BUCKETS; - struct symbol *sym; + unsigned long h = crc32(name) % HASH_BUCKETS; + struct symbol *sym; - for (sym = symtab[h]; sym ; sym = sym->hash_next) - if (map_to_ns(sym->type) == map_to_ns(ns) && strcmp(name, sym->name) == 0) - break; + for (sym = symtab[h]; sym; sym = sym->hash_next) + if (map_to_ns(sym->type) == map_to_ns(ns) + && strcmp(name, sym->name) == 0) + break; - return sym; + return sym; } -struct symbol * -add_symbol(const char *name, enum symbol_type type, struct string_list *defn, int is_extern) +struct symbol *add_symbol(const char *name, enum symbol_type type, + struct string_list *defn, int is_extern) { - unsigned long h = crc32(name) % HASH_BUCKETS; - struct symbol *sym; + unsigned long h = crc32(name) % HASH_BUCKETS; + struct symbol *sym; - for (sym = symtab[h]; sym ; sym = sym->hash_next) - if (map_to_ns(sym->type) == map_to_ns(type) - && strcmp(name, sym->name) == 0) - { - if (!equal_list(sym->defn, defn)) - error_with_pos("redefinition of %s", name); - return sym; - } + for (sym = symtab[h]; sym; sym = sym->hash_next) + if (map_to_ns(sym->type) == map_to_ns(type) + && strcmp(name, sym->name) == 0) { + if (!equal_list(sym->defn, defn)) + error_with_pos("redefinition of %s", name); + return sym; + } - sym = xmalloc(sizeof(*sym)); - sym->name = name; - sym->type = type; - sym->defn = defn; - sym->expansion_trail = NULL; - sym->is_extern = is_extern; - - sym->hash_next = symtab[h]; - symtab[h] = sym; - - if (flag_debug) - { - fprintf(debugfile, "Defn for %s %s == <", symbol_type_name[type], name); - if (is_extern) - fputs("extern ", debugfile); - print_list(debugfile, defn); - fputs(">\n", debugfile); - } + sym = xmalloc(sizeof(*sym)); + sym->name = name; + sym->type = type; + sym->defn = defn; + sym->expansion_trail = NULL; + sym->is_extern = is_extern; + + sym->hash_next = symtab[h]; + symtab[h] = sym; + + if (flag_debug) { + fprintf(debugfile, "Defn for %s %s == <", + symbol_type_name[type], name); + if (is_extern) + fputs("extern ", debugfile); + print_list(debugfile, defn); + fputs(">\n", debugfile); + } - ++nsyms; - return sym; + ++nsyms; + return sym; } - /*----------------------------------------------------------------------*/ -inline void -free_node(struct string_list *node) +inline void free_node(struct string_list *node) { - free(node->string); - free(node); + free(node->string); + free(node); } -void -free_list(struct string_list *s, struct string_list *e) +void free_list(struct string_list *s, struct string_list *e) { - while (s != e) - { - struct string_list *next = s->next; - free_node(s); - s = next; - } + while (s != e) { + struct string_list *next = s->next; + free_node(s); + s = next; + } } -inline struct string_list * -copy_node(struct string_list *node) +inline struct string_list *copy_node(struct string_list *node) { - struct string_list *newnode; + struct string_list *newnode; - newnode = xmalloc(sizeof(*newnode)); - newnode->string = xstrdup(node->string); - newnode->tag = node->tag; + newnode = xmalloc(sizeof(*newnode)); + newnode->string = xstrdup(node->string); + newnode->tag = node->tag; - return newnode; + return newnode; } -struct string_list * -copy_list(struct string_list *s, struct string_list *e) +struct string_list *copy_list(struct string_list *s, struct string_list *e) { - struct string_list *h, *p; + struct string_list *h, *p; - if (s == e) - return NULL; + if (s == e) + return NULL; - p = h = copy_node(s); - while ((s = s->next) != e) - p = p->next = copy_node(s); - p->next = NULL; + p = h = copy_node(s); + while ((s = s->next) != e) + p = p->next = copy_node(s); + p->next = NULL; - return h; + return h; } -int -equal_list(struct string_list *a, struct string_list *b) +int equal_list(struct string_list *a, struct string_list *b) { - while (a && b) - { - if (a->tag != b->tag || strcmp(a->string, b->string)) - return 0; - a = a->next; - b = b->next; - } + while (a && b) { + if (a->tag != b->tag || strcmp(a->string, b->string)) + return 0; + a = a->next; + b = b->next; + } - return !a && !b; + return !a && !b; } -static inline void -print_node(FILE *f, struct string_list *list) +static inline void print_node(FILE * f, struct string_list *list) { - switch (list->tag) - { - case SYM_STRUCT: - putc('s', f); - goto printit; - case SYM_UNION: - putc('u', f); - goto printit; - case SYM_ENUM: - putc('e', f); - goto printit; - case SYM_TYPEDEF: - putc('t', f); - goto printit; + switch (list->tag) { + case SYM_STRUCT: + putc('s', f); + goto printit; + case SYM_UNION: + putc('u', f); + goto printit; + case SYM_ENUM: + putc('e', f); + goto printit; + case SYM_TYPEDEF: + putc('t', f); + goto printit; - printit: - putc('#', f); - case SYM_NORMAL: - fputs(list->string, f); - break; - } + printit: + putc('#', f); + case SYM_NORMAL: + fputs(list->string, f); + break; + } } -void -print_list(FILE *f, struct string_list *list) +void print_list(FILE * f, struct string_list *list) { - struct string_list **e, **b; - struct string_list *tmp, **tmp2; - int elem = 1; - - if (list == NULL) - { - fputs("(nil)", f); - return; - } - - tmp = list; - while((tmp = tmp->next) != NULL) - elem++; - - b = alloca(elem * sizeof(*e)); - e = b + elem; - tmp2 = e - 1; - - (*tmp2--) = list; - while((list = list->next) != NULL) - *(tmp2--) = list; + struct string_list **e, **b; + struct string_list *tmp, **tmp2; + int elem = 1; + + if (list == NULL) { + fputs("(nil)", f); + return; + } - while (b != e) - { - print_node(f, *b++); - putc(' ', f); - } + tmp = list; + while ((tmp = tmp->next) != NULL) + elem++; + + b = alloca(elem * sizeof(*e)); + e = b + elem; + tmp2 = e - 1; + + (*tmp2--) = list; + while ((list = list->next) != NULL) + *(tmp2--) = list; + + while (b != e) { + print_node(f, *b++); + putc(' ', f); + } } static unsigned long expand_and_crc_list(struct string_list *list, unsigned long crc) { - struct string_list **e, **b; - struct string_list *tmp, **tmp2; - int elem = 1; - - if (!list) - return crc; - - tmp = list; - while((tmp = tmp->next) != NULL) - elem++; - - b = alloca(elem * sizeof(*e)); - e = b + elem; - tmp2 = e - 1; - - *(tmp2--) = list; - while ((list = list->next) != NULL) - *(tmp2--) = list; - - while (b != e) - { - struct string_list *cur; - struct symbol *subsym; - - cur = *(b++); - switch (cur->tag) - { - case SYM_NORMAL: - if (flag_dump_defs) - fprintf(debugfile, "%s ", cur->string); - crc = partial_crc32(cur->string, crc); - crc = partial_crc32_one(' ', crc); - break; - - case SYM_TYPEDEF: - subsym = find_symbol(cur->string, cur->tag); - if (subsym->expansion_trail) - { - if (flag_dump_defs) - fprintf(debugfile, "%s ", cur->string); - crc = partial_crc32(cur->string, crc); - crc = partial_crc32_one(' ', crc); - } - else - { - subsym->expansion_trail = expansion_trail; - expansion_trail = subsym; - crc = expand_and_crc_list(subsym->defn, crc); - } - break; - - case SYM_STRUCT: - case SYM_UNION: - case SYM_ENUM: - subsym = find_symbol(cur->string, cur->tag); - if (!subsym) - { - struct string_list *n, *t = NULL; - - error_with_pos("expand undefined %s %s", - symbol_type_name[cur->tag], cur->string); - - n = xmalloc(sizeof(*n)); - n->string = xstrdup(symbol_type_name[cur->tag]); - n->tag = SYM_NORMAL; - n->next = t; - t = n; - - n = xmalloc(sizeof(*n)); - n->string = xstrdup(cur->string); - n->tag = SYM_NORMAL; - n->next = t; - t = n; - - n = xmalloc(sizeof(*n)); - n->string = xstrdup("{ UNKNOWN }"); - n->tag = SYM_NORMAL; - n->next = t; - - subsym = add_symbol(cur->string, cur->tag, n, 0); - } - if (subsym->expansion_trail) - { - if (flag_dump_defs) - { - fprintf(debugfile, "%s %s ", symbol_type_name[cur->tag], - cur->string); + struct string_list **e, **b; + struct string_list *tmp, **tmp2; + int elem = 1; + + if (!list) + return crc; + + tmp = list; + while ((tmp = tmp->next) != NULL) + elem++; + + b = alloca(elem * sizeof(*e)); + e = b + elem; + tmp2 = e - 1; + + *(tmp2--) = list; + while ((list = list->next) != NULL) + *(tmp2--) = list; + + while (b != e) { + struct string_list *cur; + struct symbol *subsym; + + cur = *(b++); + switch (cur->tag) { + case SYM_NORMAL: + if (flag_dump_defs) + fprintf(debugfile, "%s ", cur->string); + crc = partial_crc32(cur->string, crc); + crc = partial_crc32_one(' ', crc); + break; + + case SYM_TYPEDEF: + subsym = find_symbol(cur->string, cur->tag); + if (subsym->expansion_trail) { + if (flag_dump_defs) + fprintf(debugfile, "%s ", cur->string); + crc = partial_crc32(cur->string, crc); + crc = partial_crc32_one(' ', crc); + } else { + subsym->expansion_trail = expansion_trail; + expansion_trail = subsym; + crc = expand_and_crc_list(subsym->defn, crc); + } + break; + + case SYM_STRUCT: + case SYM_UNION: + case SYM_ENUM: + subsym = find_symbol(cur->string, cur->tag); + if (!subsym) { + struct string_list *n, *t = NULL; + + error_with_pos("expand undefined %s %s", + symbol_type_name[cur->tag], + cur->string); + + n = xmalloc(sizeof(*n)); + n->string = xstrdup(symbol_type_name[cur->tag]); + n->tag = SYM_NORMAL; + n->next = t; + t = n; + + n = xmalloc(sizeof(*n)); + n->string = xstrdup(cur->string); + n->tag = SYM_NORMAL; + n->next = t; + t = n; + + n = xmalloc(sizeof(*n)); + n->string = xstrdup("{ UNKNOWN }"); + n->tag = SYM_NORMAL; + n->next = t; + + subsym = + add_symbol(cur->string, cur->tag, n, 0); + } + if (subsym->expansion_trail) { + if (flag_dump_defs) { + fprintf(debugfile, "%s %s ", + symbol_type_name[cur->tag], + cur->string); + } + + crc = + partial_crc32(symbol_type_name[cur->tag], + crc); + crc = partial_crc32_one(' ', crc); + crc = partial_crc32(cur->string, crc); + crc = partial_crc32_one(' ', crc); + } else { + subsym->expansion_trail = expansion_trail; + expansion_trail = subsym; + crc = expand_and_crc_list(subsym->defn, crc); + } + break; } - - crc = partial_crc32(symbol_type_name[cur->tag], crc); - crc = partial_crc32_one(' ', crc); - crc = partial_crc32(cur->string, crc); - crc = partial_crc32_one(' ', crc); - } - else - { - subsym->expansion_trail = expansion_trail; - expansion_trail = subsym; - crc = expand_and_crc_list(subsym->defn, crc); - } - break; } - } - return crc; + return crc; } -void -export_symbol(const char *name) +void export_symbol(const char *name) { - struct symbol *sym; + struct symbol *sym; - sym = find_symbol(name, SYM_NORMAL); - if (!sym) - error_with_pos("export undefined symbol %s", name); - else - { - unsigned long crc; + sym = find_symbol(name, SYM_NORMAL); + if (!sym) + error_with_pos("export undefined symbol %s", name); + else { + unsigned long crc; - if (flag_dump_defs) - fprintf(debugfile, "Export %s == <", name); + if (flag_dump_defs) + fprintf(debugfile, "Export %s == <", name); - expansion_trail = (struct symbol *)-1L; + expansion_trail = (struct symbol *)-1L; - crc = expand_and_crc_list(sym->defn, 0xffffffff) ^ 0xffffffff; + crc = expand_and_crc_list(sym->defn, 0xffffffff) ^ 0xffffffff; - sym = expansion_trail; - while (sym != (struct symbol *)-1L) - { - struct symbol *n = sym->expansion_trail; - sym->expansion_trail = 0; - sym = n; - } + sym = expansion_trail; + while (sym != (struct symbol *)-1L) { + struct symbol *n = sym->expansion_trail; + sym->expansion_trail = 0; + sym = n; + } - if (flag_dump_defs) - fputs(">\n", debugfile); + if (flag_dump_defs) + fputs(">\n", debugfile); - /* Used as a linker script. */ - printf("%s__crc_%s = 0x%08lx ;\n", mod_prefix, name, crc); - } + /* Used as a linker script. */ + printf("%s__crc_%s = 0x%08lx ;\n", mod_prefix, name, crc); + } } /*----------------------------------------------------------------------*/ -void -error(const char *fmt, ...) +void error(const char *fmt, ...) { - va_list args; + va_list args; - if (flag_warnings) - { - va_start(args, fmt); - vfprintf(stderr, fmt, args); - va_end(args); - putc('\n', stderr); + if (flag_warnings) { + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args); + putc('\n', stderr); - errors++; - } + errors++; + } } -void -error_with_pos(const char *fmt, ...) +void error_with_pos(const char *fmt, ...) { - va_list args; + va_list args; - if (flag_warnings) - { - fprintf(stderr, "%s:%d: ", cur_filename ? : "<stdin>", cur_line); + if (flag_warnings) { + fprintf(stderr, "%s:%d: ", cur_filename ? : "<stdin>", + cur_line); - va_start(args, fmt); - vfprintf(stderr, fmt, args); - va_end(args); - putc('\n', stderr); + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args); + putc('\n', stderr); - errors++; - } + errors++; + } } - void genksyms_usage(void) { - fputs("Usage:\n" - "genksyms [-dDwqhV] > /path/to/.tmp_obj.ver\n" - "\n" + fputs("Usage:\n" "genksyms [-dDwqhV] > /path/to/.tmp_obj.ver\n" "\n" #ifdef __GNU_LIBRARY__ " -d, --debug Increment the debug level (repeatable)\n" " -D, --dump Dump expanded symbol defs (for debugging only)\n" @@ -512,87 +479,84 @@ void genksyms_usage(void) " -q, --quiet Disable warnings (default)\n" " -h, --help Print this message\n" " -V, --version Print the release version\n" -#else /* __GNU_LIBRARY__ */ - " -d Increment the debug level (repeatable)\n" - " -D Dump expanded symbol defs (for debugging only)\n" - " -w Enable warnings\n" - " -q Disable warnings (default)\n" - " -h Print this message\n" - " -V Print the release version\n" -#endif /* __GNU_LIBRARY__ */ +#else /* __GNU_LIBRARY__ */ + " -d Increment the debug level (repeatable)\n" + " -D Dump expanded symbol defs (for debugging only)\n" + " -w Enable warnings\n" + " -q Disable warnings (default)\n" + " -h Print this message\n" + " -V Print the release version\n" +#endif /* __GNU_LIBRARY__ */ , stderr); } -int -main(int argc, char **argv) +int main(int argc, char **argv) { - int o; + int o; #ifdef __GNU_LIBRARY__ - struct option long_opts[] = { - {"arch", 1, 0, 'a'}, - {"debug", 0, 0, 'd'}, - {"warnings", 0, 0, 'w'}, - {"quiet", 0, 0, 'q'}, - {"dump", 0, 0, 'D'}, - {"version", 0, 0, 'V'}, - {"help", 0, 0, 'h'}, - {0, 0, 0, 0} - }; - - while ((o = getopt_long(argc, argv, "a:dwqVDk:p:", - &long_opts[0], NULL)) != EOF) -#else /* __GNU_LIBRARY__ */ - while ((o = getopt(argc, argv, "a:dwqVDk:p:")) != EOF) -#endif /* __GNU_LIBRARY__ */ - switch (o) - { - case 'a': - arch = optarg; - break; - case 'd': - flag_debug++; - break; - case 'w': - flag_warnings = 1; - break; - case 'q': - flag_warnings = 0; - break; - case 'V': - fputs("genksyms version 2.5.60\n", stderr); - break; - case 'D': - flag_dump_defs = 1; - break; - case 'h': - genksyms_usage(); - return 0; - default: - genksyms_usage(); - return 1; - } - if ((strcmp(arch, "v850") == 0) || - (strcmp(arch, "h8300") == 0)) - mod_prefix = "_"; - { - extern int yydebug; - extern int yy_flex_debug; - - yydebug = (flag_debug > 1); - yy_flex_debug = (flag_debug > 2); - - debugfile = stderr; - /* setlinebuf(debugfile); */ - } - - yyparse(); - - if (flag_debug) - { - fprintf(debugfile, "Hash table occupancy %d/%d = %g\n", - nsyms, HASH_BUCKETS, (double)nsyms / (double)HASH_BUCKETS); - } + struct option long_opts[] = { + {"arch", 1, 0, 'a'}, + {"debug", 0, 0, 'd'}, + {"warnings", 0, 0, 'w'}, + {"quiet", 0, 0, 'q'}, + {"dump", 0, 0, 'D'}, + {"version", 0, 0, 'V'}, + {"help", 0, 0, 'h'}, + {0, 0, 0, 0} + }; + + while ((o = getopt_long(argc, argv, "a:dwqVDk:p:", + &long_opts[0], NULL)) != EOF) +#else /* __GNU_LIBRARY__ */ + while ((o = getopt(argc, argv, "a:dwqVDk:p:")) != EOF) +#endif /* __GNU_LIBRARY__ */ + switch (o) { + case 'a': + arch = optarg; + break; + case 'd': + flag_debug++; + break; + case 'w': + flag_warnings = 1; + break; + case 'q': + flag_warnings = 0; + break; + case 'V': + fputs("genksyms version 2.5.60\n", stderr); + break; + case 'D': + flag_dump_defs = 1; + break; + case 'h': + genksyms_usage(); + return 0; + default: + genksyms_usage(); + return 1; + } + if ((strcmp(arch, "v850") == 0) || (strcmp(arch, "h8300") == 0)) + mod_prefix = "_"; + { + extern int yydebug; + extern int yy_flex_debug; + + yydebug = (flag_debug > 1); + yy_flex_debug = (flag_debug > 2); + + debugfile = stderr; + /* setlinebuf(debugfile); */ + } + + yyparse(); + + if (flag_debug) { + fprintf(debugfile, "Hash table occupancy %d/%d = %g\n", + nsyms, HASH_BUCKETS, + (double)nsyms / (double)HASH_BUCKETS); + } - return errors != 0; + return errors != 0; } -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 41/46] kbuild: clean-up genksyms 2006-03-21 16:20 ` [PATCH 40/46] kbuild: Lindent genksyms.c Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 42/46] kbuild: add -fverbose-asm to i386 Makefile Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg o remove all inlines o declare everything static which is only used by genksyms.c o delete unused functions o delete unused variables o delete unused stuff in genksyms.h o properly ident genksyms.h Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/genksyms/genksyms.c | 80 ++++++++++++++----------------------------- scripts/genksyms/genksyms.h | 57 +++++++++---------------------- 2 files changed, 43 insertions(+), 94 deletions(-) ce560686947fd50b30eaf42045554797f53949dd diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c index b798e28..5b0344e 100644 --- a/scripts/genksyms/genksyms.c +++ b/scripts/genksyms/genksyms.c @@ -37,14 +37,14 @@ #define HASH_BUCKETS 4096 static struct symbol *symtab[HASH_BUCKETS]; -FILE *debugfile; +static FILE *debugfile; int cur_line = 1; -char *cur_filename, *output_directory; +char *cur_filename; -int flag_debug, flag_dump_defs, flag_warnings; -const char *arch = ""; -const char *mod_prefix = ""; +static int flag_debug, flag_dump_defs, flag_warnings; +static const char *arch = ""; +static const char *mod_prefix = ""; static int errors; static int nsyms; @@ -55,6 +55,9 @@ static const char *const symbol_type_nam "normal", "typedef", "enum", "struct", "union" }; +static int equal_list(struct string_list *a, struct string_list *b); +static void print_list(FILE * f, struct string_list *list); + /*----------------------------------------------------------------------*/ static const unsigned int crctab32[] = { @@ -112,27 +115,26 @@ static const unsigned int crctab32[] = { 0x2d02ef8dU }; -static inline unsigned long -partial_crc32_one(unsigned char c, unsigned long crc) +static unsigned long partial_crc32_one(unsigned char c, unsigned long crc) { return crctab32[(crc ^ c) & 0xff] ^ (crc >> 8); } -static inline unsigned long partial_crc32(const char *s, unsigned long crc) +static unsigned long partial_crc32(const char *s, unsigned long crc) { while (*s) crc = partial_crc32_one(*s++, crc); return crc; } -static inline unsigned long crc32(const char *s) +static unsigned long crc32(const char *s) { return partial_crc32(s, 0xffffffff) ^ 0xffffffff; } /*----------------------------------------------------------------------*/ -static inline enum symbol_type map_to_ns(enum symbol_type t) +static enum symbol_type map_to_ns(enum symbol_type t) { if (t == SYM_TYPEDEF) t = SYM_NORMAL; @@ -147,8 +149,8 @@ struct symbol *find_symbol(const char *n struct symbol *sym; for (sym = symtab[h]; sym; sym = sym->hash_next) - if (map_to_ns(sym->type) == map_to_ns(ns) - && strcmp(name, sym->name) == 0) + if (map_to_ns(sym->type) == map_to_ns(ns) && + strcmp(name, sym->name) == 0) break; return sym; @@ -160,13 +162,14 @@ struct symbol *add_symbol(const char *na unsigned long h = crc32(name) % HASH_BUCKETS; struct symbol *sym; - for (sym = symtab[h]; sym; sym = sym->hash_next) + for (sym = symtab[h]; sym; sym = sym->hash_next) { if (map_to_ns(sym->type) == map_to_ns(type) && strcmp(name, sym->name) == 0) { if (!equal_list(sym->defn, defn)) error_with_pos("redefinition of %s", name); return sym; } + } sym = xmalloc(sizeof(*sym)); sym->name = name; @@ -193,7 +196,7 @@ struct symbol *add_symbol(const char *na /*----------------------------------------------------------------------*/ -inline void free_node(struct string_list *node) +void free_node(struct string_list *node) { free(node->string); free(node); @@ -208,7 +211,7 @@ void free_list(struct string_list *s, st } } -inline struct string_list *copy_node(struct string_list *node) +struct string_list *copy_node(struct string_list *node) { struct string_list *newnode; @@ -219,22 +222,7 @@ inline struct string_list *copy_node(str return newnode; } -struct string_list *copy_list(struct string_list *s, struct string_list *e) -{ - struct string_list *h, *p; - - if (s == e) - return NULL; - - p = h = copy_node(s); - while ((s = s->next) != e) - p = p->next = copy_node(s); - p->next = NULL; - - return h; -} - -int equal_list(struct string_list *a, struct string_list *b) +static int equal_list(struct string_list *a, struct string_list *b) { while (a && b) { if (a->tag != b->tag || strcmp(a->string, b->string)) @@ -246,7 +234,7 @@ int equal_list(struct string_list *a, st return !a && !b; } -static inline void print_node(FILE * f, struct string_list *list) +static void print_node(FILE * f, struct string_list *list) { switch (list->tag) { case SYM_STRUCT: @@ -270,7 +258,7 @@ static inline void print_node(FILE * f, } } -void print_list(FILE * f, struct string_list *list) +static void print_list(FILE * f, struct string_list *list) { struct string_list **e, **b; struct string_list *tmp, **tmp2; @@ -299,8 +287,8 @@ void print_list(FILE * f, struct string_ } } -static unsigned long -expand_and_crc_list(struct string_list *list, unsigned long crc) +static unsigned long expand_and_crc_list(struct string_list *list, + unsigned long crc) { struct string_list **e, **b; struct string_list *tmp, **tmp2; @@ -386,9 +374,8 @@ expand_and_crc_list(struct string_list * cur->string); } - crc = - partial_crc32(symbol_type_name[cur->tag], - crc); + crc = partial_crc32(symbol_type_name[cur->tag], + crc); crc = partial_crc32_one(' ', crc); crc = partial_crc32(cur->string, crc); crc = partial_crc32_one(' ', crc); @@ -437,21 +424,6 @@ void export_symbol(const char *name) } /*----------------------------------------------------------------------*/ - -void error(const char *fmt, ...) -{ - va_list args; - - if (flag_warnings) { - va_start(args, fmt); - vfprintf(stderr, fmt, args); - va_end(args); - putc('\n', stderr); - - errors++; - } -} - void error_with_pos(const char *fmt, ...) { va_list args; @@ -469,7 +441,7 @@ void error_with_pos(const char *fmt, ... } } -void genksyms_usage(void) +static void genksyms_usage(void) { fputs("Usage:\n" "genksyms [-dDwqhV] > /path/to/.tmp_obj.ver\n" "\n" #ifdef __GNU_LIBRARY__ diff --git a/scripts/genksyms/genksyms.h b/scripts/genksyms/genksyms.h index f09af47..ab6f34f 100644 --- a/scripts/genksyms/genksyms.h +++ b/scripts/genksyms/genksyms.h @@ -20,74 +20,51 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #ifndef MODUTILS_GENKSYMS_H #define MODUTILS_GENKSYMS_H 1 #include <stdio.h> - -enum symbol_type -{ - SYM_NORMAL, SYM_TYPEDEF, SYM_ENUM, SYM_STRUCT, SYM_UNION +enum symbol_type { + SYM_NORMAL, SYM_TYPEDEF, SYM_ENUM, SYM_STRUCT, SYM_UNION }; -struct string_list -{ - struct string_list *next; - enum symbol_type tag; - char *string; +struct string_list { + struct string_list *next; + enum symbol_type tag; + char *string; }; -struct symbol -{ - struct symbol *hash_next; - const char *name; - enum symbol_type type; - struct string_list *defn; - struct symbol *expansion_trail; - int is_extern; +struct symbol { + struct symbol *hash_next; + const char *name; + enum symbol_type type; + struct string_list *defn; + struct symbol *expansion_trail; + int is_extern; }; typedef struct string_list **yystype; #define YYSTYPE yystype -extern FILE *outfile, *debugfile; - extern int cur_line; -extern char *cur_filename, *output_directory; - -extern int flag_debug, flag_dump_defs, flag_warnings; -extern int checksum_version, kernel_version; - -extern int want_brace_phrase, want_exp_phrase, discard_phrase_contents; -extern struct string_list *current_list, *next_list; - +extern char *cur_filename; struct symbol *find_symbol(const char *name, enum symbol_type ns); struct symbol *add_symbol(const char *name, enum symbol_type type, - struct string_list *defn, int is_extern); + struct string_list *defn, int is_extern); void export_symbol(const char *); -struct string_list *reset_list(void); -void free_list(struct string_list *s, struct string_list *e); void free_node(struct string_list *list); +void free_list(struct string_list *s, struct string_list *e); struct string_list *copy_node(struct string_list *); -struct string_list *copy_list(struct string_list *s, struct string_list *e); -int equal_list(struct string_list *a, struct string_list *b); -void print_list(FILE *, struct string_list *list); int yylex(void); int yyparse(void); void error_with_pos(const char *, ...); -#define version(a,b,c) ((a << 16) | (b << 8) | (c)) - /*----------------------------------------------------------------------*/ - -#define MODUTILS_VERSION "<in-kernel>" - #define xmalloc(size) ({ void *__ptr = malloc(size); \ if(!__ptr && size != 0) { \ fprintf(stderr, "out of memory\n"); \ @@ -101,4 +78,4 @@ void error_with_pos(const char *, ...); } \ __str; }) -#endif /* genksyms.h */ +#endif /* genksyms.h */ -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 42/46] kbuild: add -fverbose-asm to i386 Makefile 2006-03-21 16:20 ` [PATCH 41/46] kbuild: clean-up genksyms Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 43/46] Kconfig: remove the CONFIG_CC_ALIGN_* options Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Chuck Ebbert, Andrew Morton, Sam Ravnborg Add -fverbose-asm to i386 Makefile rule for building .s files. This makes the assembler output much more readable for humans. Suggested by Der Herr Hofrat <der.herr@hofr.at> Signed-off-by: Chuck Ebbert <76306.1226@compuserve.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/Makefile.build | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) 7d1859835cd6c0afd1773d249300da82b1b868a5 diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 19ef2bc..e48e60d 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -129,7 +129,7 @@ $(multi-objs-y:.o=.s) : modname = $(mo $(multi-objs-y:.o=.lst) : modname = $(modname-multi) quiet_cmd_cc_s_c = CC $(quiet_modtag) $@ -cmd_cc_s_c = $(CC) $(c_flags) -S -o $@ $< +cmd_cc_s_c = $(CC) $(c_flags) -fverbose-asm -S -o $@ $< %.s: %.c FORCE $(call if_changed_dep,cc_s_c) -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 43/46] Kconfig: remove the CONFIG_CC_ALIGN_* options 2006-03-21 16:20 ` [PATCH 42/46] kbuild: add -fverbose-asm to i386 Makefile Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 44/46] kconfig: fix time ordering of writes to .kconfig.d and include/linux/autoconf.h Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Adrian Bunk, Andrew Morton, Sam Ravnborg I don't see any use case for the CONFIG_CC_ALIGN_* options: - they are only available if EMBEDDED - people using EMBEDDED will most likely also enable CC_OPTIMIZE_FOR_SIZE - the default for -Os is to disable alignment In case someone is doing performance comparisons and discovers that the default settings gcc chooses aren't good, the only sane thing is to discuss whether it makes sense to change this, not through offering options to change this locally. Signed-off-by: Adrian Bunk <bunk@stusta.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- Makefile | 7 ------- init/Kconfig | 37 ------------------------------------- 2 files changed, 0 insertions(+), 44 deletions(-) 8cab77a2f851363e35089b9720373b964f64550e diff --git a/Makefile b/Makefile index eca667b..3dbaac6 100644 --- a/Makefile +++ b/Makefile @@ -472,13 +472,6 @@ else CFLAGS += -O2 endif -#Add align options if CONFIG_CC_* is not equal to 0 -add-align = $(if $(filter-out 0,$($(1))),$(cc-option-align)$(2)=$($(1))) -CFLAGS += $(call add-align,CONFIG_CC_ALIGN_FUNCTIONS,-functions) -CFLAGS += $(call add-align,CONFIG_CC_ALIGN_LABELS,-labels) -CFLAGS += $(call add-align,CONFIG_CC_ALIGN_LOOPS,-loops) -CFLAGS += $(call add-align,CONFIG_CC_ALIGN_JUMPS,-jumps) - ifdef CONFIG_FRAME_POINTER CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,) else diff --git a/init/Kconfig b/init/Kconfig index 38416a1..411600c 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -354,43 +354,6 @@ config SHMEM option replaces shmem and tmpfs with the much simpler ramfs code, which may be appropriate on small systems without swap. -config CC_ALIGN_FUNCTIONS - int "Function alignment" if EMBEDDED - default 0 - help - Align the start of functions to the next power-of-two greater than n, - skipping up to n bytes. For instance, 32 aligns functions - to the next 32-byte boundary, but 24 would align to the next - 32-byte boundary only if this can be done by skipping 23 bytes or less. - Zero means use compiler's default. - -config CC_ALIGN_LABELS - int "Label alignment" if EMBEDDED - default 0 - help - Align all branch targets to a power-of-two boundary, skipping - up to n bytes like ALIGN_FUNCTIONS. This option can easily - make code slower, because it must insert dummy operations for - when the branch target is reached in the usual flow of the code. - Zero means use compiler's default. - -config CC_ALIGN_LOOPS - int "Loop alignment" if EMBEDDED - default 0 - help - Align loops to a power-of-two boundary, skipping up to n bytes. - Zero means use compiler's default. - -config CC_ALIGN_JUMPS - int "Jump alignment" if EMBEDDED - default 0 - help - Align branch targets to a power-of-two boundary, for branch - targets where the targets can only be reached by jumping, - skipping up to n bytes like ALIGN_FUNCTIONS. In this case, - no dummy operations need be executed. - Zero means use compiler's default. - config SLAB default y bool "Use full SLAB allocator" if EMBEDDED -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 44/46] kconfig: fix time ordering of writes to .kconfig.d and include/linux/autoconf.h 2006-03-21 16:20 ` [PATCH 43/46] Kconfig: remove the CONFIG_CC_ALIGN_* options Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 45/46] kbuild: fix make help & make *pkg Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Jan Beulich, Jan Beulich, Sam Ravnborg Since .kconfig.d is used as a make dependency of include/linux/autoconf.h, it should be written earlier than the header file, to avoid a subsequent rebuild to consider the header outdated. Signed-Off-By: Jan Beulich <jbeulich@novell.com> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- scripts/kconfig/confdata.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) dc9a49a4af9cdbe3d79183eefb12372b4dbc09c2 diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index b0cbbe2..1b8882d 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c @@ -374,6 +374,7 @@ int conf_write(const char *name) out_h = fopen(".tmpconfig.h", "w"); if (!out_h) return 1; + file_write_dep(NULL); } sym = sym_lookup("KERNELVERSION", 0); sym_calc_value(sym); @@ -512,7 +513,6 @@ int conf_write(const char *name) if (out_h) { fclose(out_h); rename(".tmpconfig.h", "include/linux/autoconf.h"); - file_write_dep(NULL); } if (!name || basename != conf_def_filename) { if (!name) -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 45/46] kbuild: fix make help & make *pkg 2006-03-21 16:20 ` [PATCH 44/46] kconfig: fix time ordering of writes to .kconfig.d and include/linux/autoconf.h Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 2006-03-21 16:20 ` [PATCH 46/46] kbuild: remove obsoleted scripts/reference_* files Sam Ravnborg 0 siblings, 1 reply; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg FORCE was not defined => error. Use kbuild infrastructure to call down to the relevant Makefile. This enables us to use the FORCE definition from kbuild. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- Makefile | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) 6c2133e11b422b7379b5a660c639f7d53d18ca3b diff --git a/Makefile b/Makefile index 3dbaac6..0c223df 100644 --- a/Makefile +++ b/Makefile @@ -994,9 +994,9 @@ distclean: mrproper package-dir := $(srctree)/scripts/package %pkg: FORCE - $(Q)$(MAKE) -f $(package-dir)/Makefile $@ + $(Q)$(MAKE) $(build)=$(package-dir) $@ rpm: FORCE - $(Q)$(MAKE) -f $(package-dir)/Makefile $@ + $(Q)$(MAKE) $(build)=$(package-dir) $@ # Brief documentation of the typical targets used @@ -1034,7 +1034,7 @@ help: @echo ' namespacecheck - Name space analysis on compiled kernel' @echo '' @echo 'Kernel packaging:' - @$(MAKE) -f $(package-dir)/Makefile help + @$(MAKE) $(build)=$(package-dir) help @echo '' @echo 'Documentation targets:' @$(MAKE) -f $(srctree)/Documentation/DocBook/Makefile dochelp -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 46/46] kbuild: remove obsoleted scripts/reference_* files 2006-03-21 16:20 ` [PATCH 45/46] kbuild: fix make help & make *pkg Sam Ravnborg @ 2006-03-21 16:20 ` Sam Ravnborg 0 siblings, 0 replies; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 16:20 UTC (permalink / raw) To: lkml; +Cc: Sam Ravnborg, Sam Ravnborg The checks performed by scripts/reference_* has been moved to modpost. Remove the files and their reference in top-level Makefile. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> --- Makefile | 6 -- scripts/reference_discarded.pl | 112 ---------------------------------------- scripts/reference_init.pl | 108 --------------------------------------- 3 files changed, 0 insertions(+), 226 deletions(-) delete mode 100644 scripts/reference_discarded.pl delete mode 100644 scripts/reference_init.pl eae0f536f640bb95f2ad437a57c40c7d5683d1ac diff --git a/Makefile b/Makefile index 0c223df..6df94f9 100644 --- a/Makefile +++ b/Makefile @@ -1028,8 +1028,6 @@ help: @echo ' kernelversion - Output the version stored in Makefile' @echo '' @echo 'Static analysers' - @echo ' buildcheck - List dangling references to vmlinux discarded sections' - @echo ' and init sections from non-init sections' @echo ' checkstack - Generate a list of stack hogs' @echo ' namespacecheck - Name space analysis on compiled kernel' @echo '' @@ -1255,10 +1253,6 @@ versioncheck: -name '*.[hcS]' -type f -print | sort \ | xargs $(PERL) -w scripts/checkversion.pl -buildcheck: - $(PERL) $(srctree)/scripts/reference_discarded.pl - $(PERL) $(srctree)/scripts/reference_init.pl - namespacecheck: $(PERL) $(srctree)/scripts/namespace.pl diff --git a/scripts/reference_discarded.pl b/scripts/reference_discarded.pl deleted file mode 100644 index 4ee6ab2..0000000 --- a/scripts/reference_discarded.pl +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/perl -w -# -# reference_discarded.pl (C) Keith Owens 2001 <kaos@ocs.com.au> -# -# Released under GPL V2. -# -# List dangling references to vmlinux discarded sections. - -use strict; -die($0 . " takes no arguments\n") if($#ARGV >= 0); - -my %object; -my $object; -my $line; -my $ignore; -my $errorcount; - -$| = 1; - -# printf("Finding objects, "); -open(OBJDUMP_LIST, "find . -name '*.o' | xargs objdump -h |") || die "getting objdump list failed"; -while (defined($line = <OBJDUMP_LIST>)) { - chomp($line); - if ($line =~ /:\s+file format/) { - ($object = $line) =~ s/:.*//; - $object{$object}->{'module'} = 0; - $object{$object}->{'size'} = 0; - $object{$object}->{'off'} = 0; - } - if ($line =~ /^\s*\d+\s+\.modinfo\s+/) { - $object{$object}->{'module'} = 1; - } - if ($line =~ /^\s*\d+\s+\.comment\s+/) { - ($object{$object}->{'size'}, $object{$object}->{'off'}) = (split(' ', $line))[2,5]; - } -} -close(OBJDUMP_LIST); -# printf("%d objects, ", scalar keys(%object)); -$ignore = 0; -foreach $object (keys(%object)) { - if ($object{$object}->{'module'}) { - ++$ignore; - delete($object{$object}); - } -} -# printf("ignoring %d module(s)\n", $ignore); - -# Ignore conglomerate objects, they have been built from multiple objects and we -# only care about the individual objects. If an object has more than one GCC: -# string in the comment section then it is conglomerate. This does not filter -# out conglomerates that consist of exactly one object, can't be helped. - -# printf("Finding conglomerates, "); -$ignore = 0; -foreach $object (keys(%object)) { - if (exists($object{$object}->{'off'})) { - my ($off, $size, $comment, $l); - $off = hex($object{$object}->{'off'}); - $size = hex($object{$object}->{'size'}); - open(OBJECT, "<$object") || die "cannot read $object"; - seek(OBJECT, $off, 0) || die "seek to $off in $object failed"; - $l = read(OBJECT, $comment, $size); - die "read $size bytes from $object .comment failed" if ($l != $size); - close(OBJECT); - if ($comment =~ /GCC\:.*GCC\:/m || $object =~ /built-in\.o/) { - ++$ignore; - delete($object{$object}); - } - } -} -# printf("ignoring %d conglomerate(s)\n", $ignore); - -# printf("Scanning objects\n"); - -# Keith Ownes <kaos@sgi.com> commented: -# For our future {in}sanity, add a comment that this is the ppc .opd -# section, not the ia64 .opd section. -# ia64 .opd should not point to discarded sections. -$errorcount = 0; -foreach $object (keys(%object)) { - my $from; - open(OBJDUMP, "objdump -r $object|") || die "cannot objdump -r $object"; - while (defined($line = <OBJDUMP>)) { - chomp($line); - if ($line =~ /RELOCATION RECORDS FOR /) { - ($from = $line) =~ s/.*\[([^]]*).*/$1/; - } - if (($line =~ /\.text\.exit$/ || - $line =~ /\.exit\.text$/ || - $line =~ /\.data\.exit$/ || - $line =~ /\.exit\.data$/ || - $line =~ /\.exitcall\.exit$/) && - ($from !~ /\.text\.exit$/ && - $from !~ /\.exit\.text$/ && - $from !~ /\.data\.exit$/ && - $from !~ /\.opd$/ && - $from !~ /\.exit\.data$/ && - $from !~ /\.altinstructions$/ && - $from !~ /\.pdr$/ && - $from !~ /\.debug_.*$/ && - $from !~ /\.exitcall\.exit$/ && - $from !~ /\.eh_frame$/ && - $from !~ /\.stab$/)) { - printf("Error: %s %s refers to %s\n", $object, $from, $line); - $errorcount = $errorcount + 1; - } - } - close(OBJDUMP); -} -# printf("Done\n"); - -exit(0); diff --git a/scripts/reference_init.pl b/scripts/reference_init.pl deleted file mode 100644 index 7f6960b..0000000 --- a/scripts/reference_init.pl +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/perl -w -# -# reference_init.pl (C) Keith Owens 2002 <kaos@ocs.com.au> -# -# List references to vmlinux init sections from non-init sections. - -# Unfortunately I had to exclude references from read only data to .init -# sections, almost all of these are false positives, they are created by -# gcc. The downside of excluding rodata is that there really are some -# user references from rodata to init code, e.g. drivers/video/vgacon.c -# -# const struct consw vga_con = { -# con_startup: vgacon_startup, -# -# where vgacon_startup is __init. If you want to wade through the false -# positives, take out the check for rodata. - -use strict; -die($0 . " takes no arguments\n") if($#ARGV >= 0); - -my %object; -my $object; -my $line; -my $ignore; - -$| = 1; - -printf("Finding objects, "); -open(OBJDUMP_LIST, "find . -name '*.o' | xargs objdump -h |") || die "getting objdump list failed"; -while (defined($line = <OBJDUMP_LIST>)) { - chomp($line); - if ($line =~ /:\s+file format/) { - ($object = $line) =~ s/:.*//; - $object{$object}->{'module'} = 0; - $object{$object}->{'size'} = 0; - $object{$object}->{'off'} = 0; - } - if ($line =~ /^\s*\d+\s+\.modinfo\s+/) { - $object{$object}->{'module'} = 1; - } - if ($line =~ /^\s*\d+\s+\.comment\s+/) { - ($object{$object}->{'size'}, $object{$object}->{'off'}) = (split(' ', $line))[2,5]; - } -} -close(OBJDUMP_LIST); -printf("%d objects, ", scalar keys(%object)); -$ignore = 0; -foreach $object (keys(%object)) { - if ($object{$object}->{'module'}) { - ++$ignore; - delete($object{$object}); - } -} -printf("ignoring %d module(s)\n", $ignore); - -# Ignore conglomerate objects, they have been built from multiple objects and we -# only care about the individual objects. If an object has more than one GCC: -# string in the comment section then it is conglomerate. This does not filter -# out conglomerates that consist of exactly one object, can't be helped. - -printf("Finding conglomerates, "); -$ignore = 0; -foreach $object (keys(%object)) { - if (exists($object{$object}->{'off'})) { - my ($off, $size, $comment, $l); - $off = hex($object{$object}->{'off'}); - $size = hex($object{$object}->{'size'}); - open(OBJECT, "<$object") || die "cannot read $object"; - seek(OBJECT, $off, 0) || die "seek to $off in $object failed"; - $l = read(OBJECT, $comment, $size); - die "read $size bytes from $object .comment failed" if ($l != $size); - close(OBJECT); - if ($comment =~ /GCC\:.*GCC\:/m || $object =~ /built-in\.o/) { - ++$ignore; - delete($object{$object}); - } - } -} -printf("ignoring %d conglomerate(s)\n", $ignore); - -printf("Scanning objects\n"); -foreach $object (sort(keys(%object))) { - my $from; - open(OBJDUMP, "objdump -r $object|") || die "cannot objdump -r $object"; - while (defined($line = <OBJDUMP>)) { - chomp($line); - if ($line =~ /RELOCATION RECORDS FOR /) { - ($from = $line) =~ s/.*\[([^]]*).*/$1/; - } - if (($line =~ /\.init$/ || $line =~ /\.init\./) && - ($from !~ /\.init$/ && - $from !~ /\.init\./ && - $from !~ /\.stab$/ && - $from !~ /\.rodata$/ && - $from !~ /\.text\.lock$/ && - $from !~ /\.pci_fixup_header$/ && - $from !~ /\.pci_fixup_final$/ && - $from !~ /\.pdr$/ && - $from !~ /\__param$/ && - $from !~ /\.altinstructions/ && - $from !~ /\.eh_frame/ && - $from !~ /\.debug_/)) { - printf("Error: %s %s refers to %s\n", $object, $from, $line); - } - } - close(OBJDUMP); -} -printf("Done\n"); -- 1.0.GIT ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior 2006-03-21 16:20 ` [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior Sam Ravnborg 2006-03-21 16:20 ` [PATCH 36/46] kbuild: Fix bug in crc symbol generating of kernel and modules Sam Ravnborg @ 2006-03-21 17:28 ` Jan-Benedict Glaw 2006-03-21 17:37 ` Paul D. Smith 2006-03-21 17:53 ` Sam Ravnborg 1 sibling, 2 replies; 28+ messages in thread From: Jan-Benedict Glaw @ 2006-03-21 17:28 UTC (permalink / raw) To: Sam Ravnborg; +Cc: lkml, Paul Smith [-- Attachment #1: Type: text/plain, Size: 1089 bytes --] On Tue, 2006-03-21 17:20:57 +0100, Sam Ravnborg <sam@ravnborg.org> wrote: > diff --git a/scripts/package/Makefile b/scripts/package/Makefile > index c201ef0..d3038b7 100644 > --- a/scripts/package/Makefile > +++ b/scripts/package/Makefile > @@ -82,7 +82,7 @@ clean-dirs += $(objtree)/debian/ > > # tarball targets > # --------------------------------------------------------------------------- > -.PHONY: tar%pkg > +PHONY += tar%pkg > tar%pkg: > $(MAKE) KBUILD_SRC= > $(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@ This part is wrong. $(PHONY) isn't subject to pattern matching, so all targets that match 'tar%pkg' must be listed here. Fortunately, that's only three: PHONY += tar-pkg targz-pkg tarbz2-pkg MfG, JBG -- Jan-Benedict Glaw jbglaw@lug-owl.de . +49-172-7608481 _ O _ "Eine Freie Meinung in einem Freien Kopf | Gegen Zensur | Gegen Krieg _ _ O für einen Freien Staat voll Freier Bürger" | im Internet! | im Irak! O O O ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA)); [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior 2006-03-21 17:28 ` [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior Jan-Benedict Glaw @ 2006-03-21 17:37 ` Paul D. Smith 2006-03-21 17:53 ` Sam Ravnborg 1 sibling, 0 replies; 28+ messages in thread From: Paul D. Smith @ 2006-03-21 17:37 UTC (permalink / raw) To: Jan-Benedict Glaw; +Cc: Sam Ravnborg, lkml %% Jan-Benedict Glaw <jbglaw@lug-owl.de> writes: jg> On Tue, 2006-03-21 17:20:57 +0100, Sam Ravnborg <sam@ravnborg.org> wrote: >> -.PHONY: tar%pkg >> +PHONY += tar%pkg jg> This part is wrong. $(PHONY) isn't subject to pattern matching, You're correct that it won't do what the author apparently expected, however it WILL do exactly what the previous versions of kbuild used to do. I wrote: > To: Sam Ravnborg <sam@ravnborg.org> > Cc: linux-kernel@vger.kernel.org > Subject: Re: [PATCH] change kbuild to not rely on incorrect GNU make behavior > From: "Paul D. Smith" <psmith@gnu.org> > Date: Sun, 5 Mar 2006 19:41:07 -0500 ... > Note that this won't do what you expect. tar%pkg is a pattern rule, > but .PHONY doesn't take patterns so you're declaring the actual file > named literally 'tar%pkg' to be phony. jg> so all targets that match 'tar%pkg' must be listed jg> here. Fortunately, that's only three: jg> PHONY += tar-pkg targz-pkg tarbz2-pkg This would be more correct, indeed; but note this change is orthogonal to the purpose and requirements of the patch provided. Of course, that doesn't mean they shouldn't be combined if that's acceptable to the patch-masters! :-). Cheers! -- ------------------------------------------------------------------------------- Paul D. Smith <psmith@gnu.org> Find some GNU make tips at: http://www.gnu.org http://make.paulandlesley.org "Please remain calm...I may be mad, but I am a professional." --Mad Scientist ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior 2006-03-21 17:28 ` [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior Jan-Benedict Glaw 2006-03-21 17:37 ` Paul D. Smith @ 2006-03-21 17:53 ` Sam Ravnborg 1 sibling, 0 replies; 28+ messages in thread From: Sam Ravnborg @ 2006-03-21 17:53 UTC (permalink / raw) To: lkml, Paul Smith On Tue, Mar 21, 2006 at 06:28:20PM +0100, Jan-Benedict Glaw wrote: > On Tue, 2006-03-21 17:20:57 +0100, Sam Ravnborg <sam@ravnborg.org> wrote: > > diff --git a/scripts/package/Makefile b/scripts/package/Makefile > > index c201ef0..d3038b7 100644 > > --- a/scripts/package/Makefile > > +++ b/scripts/package/Makefile > > @@ -82,7 +82,7 @@ clean-dirs += $(objtree)/debian/ > > > > # tarball targets > > # --------------------------------------------------------------------------- > > -.PHONY: tar%pkg > > +PHONY += tar%pkg > > tar%pkg: > > $(MAKE) KBUILD_SRC= > > $(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@ > > This part is wrong. $(PHONY) isn't subject to pattern matching, so all > targets that match 'tar%pkg' must be listed here. Fortunately, that's > only three: > > PHONY += tar-pkg targz-pkg tarbz2-pkg Correct. It is fixed in a later patch were I kill the use of PHONY in this file. I got replaced by specifying FORCE as a prerequsite. Sam ^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2006-03-21 17:54 UTC | newest]
Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <11429580554104-git-send-email-sam@ravnborg.org>
2006-03-21 16:20 ` [PATCH 22/46] kbuild: do not warn when unwind sections references .init/.exit sections Sam Ravnborg
2006-03-21 16:20 ` [PATCH 23/46] kbuild: version.h should depend on .kernelrelease Sam Ravnborg
2006-03-21 16:20 ` [PATCH 24/46] kbuild: Add copyright to modpost.c Sam Ravnborg
2006-03-21 16:20 ` [PATCH 25/46] kbuild: ignore all generated files for make allmodconfig (x86_64) Sam Ravnborg
2006-03-21 16:20 ` [PATCH 26/46] kbuild: whitelist false section mismatch warnings Sam Ravnborg
2006-03-21 16:20 ` [PATCH 27/46] kbuild: make namespace.pl CROSS_COMPILE happy Sam Ravnborg
2006-03-21 16:20 ` [PATCH 28/46] kbuild: small update of allnoconfig description Sam Ravnborg
2006-03-21 16:20 ` [PATCH 29/46] kbuild: kill trailing whitespace in modpost & friends Sam Ravnborg
2006-03-21 16:20 ` [PATCH 30/46] kbuild: kill false positives from section mismatch warnings for powerpc Sam Ravnborg
2006-03-21 16:20 ` [PATCH 31/46] kbuild: fix section mismatch check for unwind on IA64 Sam Ravnborg
2006-03-21 16:20 ` [PATCH 32/46] kbuild: in the section mismatch check try harder to find symbols Sam Ravnborg
2006-03-21 16:20 ` [PATCH 33/46] kbuild: fix make dir/file.xx when asm symlink is missing Sam Ravnborg
2006-03-21 16:20 ` [PATCH 34/46] kbuild: when warning symbols exported twice now tell user this is the problem Sam Ravnborg
2006-03-21 16:20 ` [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior Sam Ravnborg
2006-03-21 16:20 ` [PATCH 36/46] kbuild: Fix bug in crc symbol generating of kernel and modules Sam Ravnborg
2006-03-21 16:20 ` [PATCH 37/46] kbuild: replace PHONY with FORCE Sam Ravnborg
2006-03-21 16:20 ` [PATCH 38/46] kbuild: in makefile.txt note that Makefile is preferred name for kbuild files Sam Ravnborg
2006-03-21 16:20 ` [PATCH 39/46] kbuild: fix genksyms build error Sam Ravnborg
2006-03-21 16:20 ` [PATCH 40/46] kbuild: Lindent genksyms.c Sam Ravnborg
2006-03-21 16:20 ` [PATCH 41/46] kbuild: clean-up genksyms Sam Ravnborg
2006-03-21 16:20 ` [PATCH 42/46] kbuild: add -fverbose-asm to i386 Makefile Sam Ravnborg
2006-03-21 16:20 ` [PATCH 43/46] Kconfig: remove the CONFIG_CC_ALIGN_* options Sam Ravnborg
2006-03-21 16:20 ` [PATCH 44/46] kconfig: fix time ordering of writes to .kconfig.d and include/linux/autoconf.h Sam Ravnborg
2006-03-21 16:20 ` [PATCH 45/46] kbuild: fix make help & make *pkg Sam Ravnborg
2006-03-21 16:20 ` [PATCH 46/46] kbuild: remove obsoleted scripts/reference_* files Sam Ravnborg
2006-03-21 17:28 ` [PATCH 35/46] kbuild: change kbuild to not rely on incorrect GNU make behavior Jan-Benedict Glaw
2006-03-21 17:37 ` Paul D. Smith
2006-03-21 17:53 ` Sam Ravnborg
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox