diff mbox

[19/20] lto, module: Warn about modules that are not fully LTOed

Message ID 1392733738-8290-20-git-send-email-andi@firstfloor.org (mailing list archive)
State New, archived
Headers show

Commit Message

Andi Kleen Feb. 18, 2014, 2:28 p.m. UTC
From: Andi Kleen <ak@linux.intel.com>

When __gnu_lto_* is present that means that the module hasn't run with
LTO yet.

Cc: rusty@rustcorp.com.au
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
 kernel/module.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Konrad Rzeszutek Wilk Feb. 18, 2014, 2:50 p.m. UTC | #1
On Tue, Feb 18, 2014 at 03:28:57PM +0100, Andi Kleen wrote:
> From: Andi Kleen <ak@linux.intel.com>
> 
> When __gnu_lto_* is present that means that the module hasn't run with
> LTO yet.

The title says 'warn' but this is not a warning just information.

Can you actually build modules against the kernel with different compiler
options? I thought it would complain when trying to load about some
form of mismatch?

> 
> Cc: rusty@rustcorp.com.au
> Signed-off-by: Andi Kleen <ak@linux.intel.com>
> ---
>  kernel/module.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/module.c b/kernel/module.c
> index b99e801..4f3eff7 100644
> --- a/kernel/module.c
> +++ b/kernel/module.c
> @@ -1949,8 +1949,11 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)
>  		switch (sym[i].st_shndx) {
>  		case SHN_COMMON:
>  			/* Ignore common symbols */
> -			if (!strncmp(name, "__gnu_lto", 9))
> +			if (!strncmp(name, "__gnu_lto", 9)) {
> +				pr_info("%s: module not link time optimized\n",
> +				       mod->name);
>  				break;
> +			}
>  
>  			/* We compiled with -fno-common.  These are not
>  			   supposed to happen.  */
> -- 
> 1.8.5.2
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Andi Kleen Feb. 18, 2014, 6:52 p.m. UTC | #2
On Tue, Feb 18, 2014 at 09:50:39AM -0500, Konrad Rzeszutek Wilk wrote:
> On Tue, Feb 18, 2014 at 03:28:57PM +0100, Andi Kleen wrote:
> > From: Andi Kleen <ak@linux.intel.com>
> > 
> > When __gnu_lto_* is present that means that the module hasn't run with
> > LTO yet.
> 
> The title says 'warn' but this is not a warning just information.
> 
> Can you actually build modules against the kernel with different compiler
> options? I thought it would complain when trying to load about some
> form of mismatch?

Sure it has worked forever (I think the only reason we still check
compiler versions was some ancient long obsolete ABI problem)

LTO is also fully ABI compatible.

Hmm I think this patch can be actually removed now because I default
to slim LTO, and with that it wouldn't even load if this happens.
I'll remove it.

-Andi
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/kernel/module.c b/kernel/module.c
index b99e801..4f3eff7 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1949,8 +1949,11 @@  static int simplify_symbols(struct module *mod, const struct load_info *info)
 		switch (sym[i].st_shndx) {
 		case SHN_COMMON:
 			/* Ignore common symbols */
-			if (!strncmp(name, "__gnu_lto", 9))
+			if (!strncmp(name, "__gnu_lto", 9)) {
+				pr_info("%s: module not link time optimized\n",
+				       mod->name);
 				break;
+			}
 
 			/* We compiled with -fno-common.  These are not
 			   supposed to happen.  */