summarylogtreecommitdiffstats
path: root/0014-modpost-lto-strip-.lto-from-module-names.patch
diff options
context:
space:
mode:
authorLuca Stefani2020-08-04 08:37:01 +0200
committerLuca Stefani2020-08-04 08:37:01 +0200
commitf7a325954662d4fdc8deb3c36a9a36f73cc403b7 (patch)
treeab2bb7ff4eeb352028e7dec4a14d6dc45371d9ac /0014-modpost-lto-strip-.lto-from-module-names.patch
parent017e6d9d63f10c981a01976d4c6fb7954c916633 (diff)
downloadaur-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.patch116
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
+