diff options
author | Luca Stefani | 2020-08-04 08:37:01 +0200 |
---|---|---|
committer | Luca Stefani | 2020-08-04 08:37:01 +0200 |
commit | f7a325954662d4fdc8deb3c36a9a36f73cc403b7 (patch) | |
tree | ab2bb7ff4eeb352028e7dec4a14d6dc45371d9ac /0014-modpost-lto-strip-.lto-from-module-names.patch | |
parent | 017e6d9d63f10c981a01976d4c6fb7954c916633 (diff) | |
download | aur-f7a325954662d4fdc8deb3c36a9a36f73cc403b7.tar.gz |
Add support for LTO
Diffstat (limited to '0014-modpost-lto-strip-.lto-from-module-names.patch')
-rw-r--r-- | 0014-modpost-lto-strip-.lto-from-module-names.patch | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/0014-modpost-lto-strip-.lto-from-module-names.patch b/0014-modpost-lto-strip-.lto-from-module-names.patch new file mode 100644 index 000000000000..1ff4b6fde3dc --- /dev/null +++ b/0014-modpost-lto-strip-.lto-from-module-names.patch @@ -0,0 +1,116 @@ +From 56f70f11a55f51c191b3bb65821ca2f5fd9e4924 Mon Sep 17 00:00:00 2001 +From: Sami Tolvanen <samitolvanen@google.com> +Date: Fri, 6 Mar 2020 13:52:03 -0800 +Subject: [PATCH 14/24] modpost: lto: strip .lto from module names + +With LTO, everything is compiled into LLVM bitcode, so we have to link +each module into native code before modpost. Kbuild uses the .lto.o +suffix for these files, which also ends up in module information. This +change strips the unnecessary .lto suffix from the module name. + +Suggested-by: Bill Wendling <morbo@google.com> +Signed-off-by: Sami Tolvanen <samitolvanen@google.com> +--- + scripts/mod/modpost.c | 16 +++++++--------- + scripts/mod/modpost.h | 9 +++++++++ + scripts/mod/sumversion.c | 6 +++++- + 3 files changed, 21 insertions(+), 10 deletions(-) + +diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c +index 69341b36f271..5a329df55cc3 100644 +--- a/scripts/mod/modpost.c ++++ b/scripts/mod/modpost.c +@@ -17,7 +17,6 @@ + #include <ctype.h> + #include <string.h> + #include <limits.h> +-#include <stdbool.h> + #include <errno.h> + #include "modpost.h" + #include "../../include/linux/license.h" +@@ -80,14 +79,6 @@ modpost_log(enum loglevel loglevel, const char *fmt, ...) + exit(1); + } + +-static inline bool strends(const char *str, const char *postfix) +-{ +- if (strlen(str) < strlen(postfix)) +- return false; +- +- return strcmp(str + strlen(str) - strlen(postfix), postfix) == 0; +-} +- + void *do_nofail(void *ptr, const char *expr) + { + if (!ptr) +@@ -1984,6 +1975,10 @@ static char *remove_dot(char *s) + size_t m = strspn(s + n + 1, "0123456789"); + if (m && (s[n + m] == '.' || s[n + m] == 0)) + s[n] = 0; ++ ++ /* strip trailing .lto */ ++ if (strends(s, ".lto")) ++ s[strlen(s) - 4] = '\0'; + } + return s; + } +@@ -2007,6 +2002,9 @@ static void read_symbols(const char *modname) + /* strip trailing .o */ + tmp = NOFAIL(strdup(modname)); + tmp[strlen(tmp) - 2] = '\0'; ++ /* strip trailing .lto */ ++ if (strends(tmp, ".lto")) ++ tmp[strlen(tmp) - 4] = '\0'; + mod = new_module(tmp); + free(tmp); + } +diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h +index 3aa052722233..fab30d201f9e 100644 +--- a/scripts/mod/modpost.h ++++ b/scripts/mod/modpost.h +@@ -2,6 +2,7 @@ + #include <stdio.h> + #include <stdlib.h> + #include <stdarg.h> ++#include <stdbool.h> + #include <string.h> + #include <sys/types.h> + #include <sys/stat.h> +@@ -180,6 +181,14 @@ static inline unsigned int get_secindex(const struct elf_info *info, + return info->symtab_shndx_start[sym - info->symtab_start]; + } + ++static inline bool strends(const char *str, const char *postfix) ++{ ++ if (strlen(str) < strlen(postfix)) ++ return false; ++ ++ return strcmp(str + strlen(str) - strlen(postfix), postfix) == 0; ++} ++ + /* file2alias.c */ + extern unsigned int cross_build; + void handle_moddevtable(struct module *mod, struct elf_info *info, +diff --git a/scripts/mod/sumversion.c b/scripts/mod/sumversion.c +index d587f40f1117..760e6baa7eda 100644 +--- a/scripts/mod/sumversion.c ++++ b/scripts/mod/sumversion.c +@@ -391,10 +391,14 @@ void get_src_version(const char *modname, char sum[], unsigned sumlen) + struct md4_ctx md; + char *fname; + char filelist[PATH_MAX + 1]; ++ int postfix_len = 1; ++ ++ if (strends(modname, ".lto.o")) ++ postfix_len = 5; + + /* objects for a module are listed in the first line of *.mod file. */ + snprintf(filelist, sizeof(filelist), "%.*smod", +- (int)strlen(modname) - 1, modname); ++ (int)strlen(modname) - postfix_len, modname); + + buf = read_text_file(filelist); + +-- +2.28.0 + |