diff options
author | Sam Ravnborg <sam@mars.ravnborg.org> | 2006-02-17 16:42:02 -0500 |
---|---|---|
committer | Sam Ravnborg <sam@mars.ravnborg.org> | 2006-02-19 03:51:20 -0500 |
commit | b39927cf4cc5a9123d2b157ffd396884cb8156eb (patch) | |
tree | 8e372f4b8fa678de7239a125ff4653f136a9dc66 /scripts/mod/modpost.h | |
parent | a67dc21a38055ec2d8d85b2f64d98091748569b3 (diff) |
kbuild: check for section mismatch during modpost stage
Section mismatch is identified as references to .init*
sections from non .init sections. And likewise references
to .exit.* sections outside .exit sections.
.init.* sections are discarded after a module is initialized
and references to .init.* sections are oops candidates.
.exit.* sections are discarded when a module is built-in and
thus references to .exit are also oops candidates.
The checks were possible to do using 'make buildcheck' which
called the two perl scripts: reference_discarded.pl and
reference_init.pl. This patch just moves the same functionality
inside modpost and the scripts are then obsoleted.
They will though be kept for a while so users can do double
checks - but note that some .o files are skipped by the perl scripts
so result is not 1:1.
All credit for the concept goes to Keith Owens who implemented
the original perl scrips - this patch just moves it to modpost.
Compared to the perl script the implmentation in modpost will be run
for each kernel build - thus catching the error much sooner, but
the downside is that the individual .o file are not always identified.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Diffstat (limited to 'scripts/mod/modpost.h')
-rw-r--r-- | scripts/mod/modpost.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h index c0de7b98c24c..3b5319dd937f 100644 --- a/scripts/mod/modpost.h +++ b/scripts/mod/modpost.h | |||
@@ -16,17 +16,27 @@ | |||
16 | #define Elf_Ehdr Elf32_Ehdr | 16 | #define Elf_Ehdr Elf32_Ehdr |
17 | #define Elf_Shdr Elf32_Shdr | 17 | #define Elf_Shdr Elf32_Shdr |
18 | #define Elf_Sym Elf32_Sym | 18 | #define Elf_Sym Elf32_Sym |
19 | #define Elf_Addr Elf32_Addr | ||
20 | #define Elf_Section Elf32_Section | ||
19 | #define ELF_ST_BIND ELF32_ST_BIND | 21 | #define ELF_ST_BIND ELF32_ST_BIND |
20 | #define ELF_ST_TYPE ELF32_ST_TYPE | 22 | #define ELF_ST_TYPE ELF32_ST_TYPE |
21 | 23 | ||
24 | #define Elf_Rela Elf32_Rela | ||
25 | #define ELF_R_SYM ELF32_R_SYM | ||
26 | #define ELF_R_TYPE ELF32_R_TYPE | ||
22 | #else | 27 | #else |
23 | 28 | ||
24 | #define Elf_Ehdr Elf64_Ehdr | 29 | #define Elf_Ehdr Elf64_Ehdr |
25 | #define Elf_Shdr Elf64_Shdr | 30 | #define Elf_Shdr Elf64_Shdr |
26 | #define Elf_Sym Elf64_Sym | 31 | #define Elf_Sym Elf64_Sym |
32 | #define Elf_Addr Elf64_Addr | ||
33 | #define Elf_Section Elf64_Section | ||
27 | #define ELF_ST_BIND ELF64_ST_BIND | 34 | #define ELF_ST_BIND ELF64_ST_BIND |
28 | #define ELF_ST_TYPE ELF64_ST_TYPE | 35 | #define ELF_ST_TYPE ELF64_ST_TYPE |
29 | 36 | ||
37 | #define Elf_Rela Elf64_Rela | ||
38 | #define ELF_R_SYM ELF64_R_SYM | ||
39 | #define ELF_R_TYPE ELF64_R_TYPE | ||
30 | #endif | 40 | #endif |
31 | 41 | ||
32 | #if KERNEL_ELFDATA != HOST_ELFDATA | 42 | #if KERNEL_ELFDATA != HOST_ELFDATA |