ANDROID: Revert "Merge tag 'modules-for-v5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux"
This reverts commite070355664, reversing changes made to8808cf8cbc. Introducing symbol-namespaces into the kernel has caused issues with respect to the ABI checker. Hence, revert the changes until a valid fix is available. The revert was done based off of 5.4-rc1. Change-Id: I529ced269661f457ce667a76eb383843002f0a7d Signed-off-by: Raghavendra Rao Ananta <rananta@codeaurora.org>
This commit is contained in:
committed by
Matthias Maennich
parent
6ce0937faa
commit
3fde1dfb00
@@ -38,8 +38,6 @@ static int sec_mismatch_count = 0;
|
||||
static int sec_mismatch_fatal = 0;
|
||||
/* ignore missing files */
|
||||
static int ignore_missing_files;
|
||||
/* write namespace dependencies */
|
||||
static int write_namespace_deps;
|
||||
|
||||
enum export {
|
||||
export_plain, export_unused, export_gpl,
|
||||
@@ -166,7 +164,6 @@ struct symbol {
|
||||
struct module *module;
|
||||
unsigned int crc;
|
||||
int crc_valid;
|
||||
char *namespace;
|
||||
unsigned int weak:1;
|
||||
unsigned int vmlinux:1; /* 1 if symbol is defined in vmlinux */
|
||||
unsigned int kernel:1; /* 1 if symbol is from kernel
|
||||
@@ -238,37 +235,6 @@ static struct symbol *find_symbol(const char *name)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static bool contains_namespace(struct namespace_list *list,
|
||||
const char *namespace)
|
||||
{
|
||||
struct namespace_list *ns_entry;
|
||||
|
||||
for (ns_entry = list; ns_entry != NULL; ns_entry = ns_entry->next)
|
||||
if (strcmp(ns_entry->namespace, namespace) == 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void add_namespace(struct namespace_list **list, const char *namespace)
|
||||
{
|
||||
struct namespace_list *ns_entry;
|
||||
|
||||
if (!contains_namespace(*list, namespace)) {
|
||||
ns_entry = NOFAIL(malloc(sizeof(struct namespace_list) +
|
||||
strlen(namespace) + 1));
|
||||
strcpy(ns_entry->namespace, namespace);
|
||||
ns_entry->next = *list;
|
||||
*list = ns_entry;
|
||||
}
|
||||
}
|
||||
|
||||
static bool module_imports_namespace(struct module *module,
|
||||
const char *namespace)
|
||||
{
|
||||
return contains_namespace(module->imported_namespaces, namespace);
|
||||
}
|
||||
|
||||
static const struct {
|
||||
const char *str;
|
||||
enum export export;
|
||||
@@ -348,26 +314,12 @@ static enum export export_from_sec(struct elf_info *elf, unsigned int sec)
|
||||
return export_unknown;
|
||||
}
|
||||
|
||||
static char *sym_extract_namespace(const char **symname)
|
||||
{
|
||||
char *namespace = NULL;
|
||||
char *ns_separator;
|
||||
|
||||
ns_separator = strchr(*symname, '.');
|
||||
if (ns_separator) {
|
||||
namespace = NOFAIL(strndup(*symname, ns_separator - *symname));
|
||||
*symname = ns_separator + 1;
|
||||
}
|
||||
|
||||
return namespace;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an exported symbol - it may have already been added without a
|
||||
* CRC, in this case just update the CRC
|
||||
**/
|
||||
static struct symbol *sym_add_exported(const char *name, const char *namespace,
|
||||
struct module *mod, enum export export)
|
||||
static struct symbol *sym_add_exported(const char *name, struct module *mod,
|
||||
enum export export)
|
||||
{
|
||||
struct symbol *s = find_symbol(name);
|
||||
|
||||
@@ -375,16 +327,15 @@ static struct symbol *sym_add_exported(const char *name, const char *namespace,
|
||||
s = new_symbol(name, mod, export);
|
||||
} else {
|
||||
if (!s->preloaded) {
|
||||
warn("%s: '%s' exported twice. Previous export was in %s%s\n",
|
||||
mod->name, name, s->module->name,
|
||||
is_vmlinux(s->module->name) ? "" : ".ko");
|
||||
warn("%s: '%s' exported twice. Previous export "
|
||||
"was in %s%s\n", mod->name, name,
|
||||
s->module->name,
|
||||
is_vmlinux(s->module->name) ?"":".ko");
|
||||
} else {
|
||||
/* In case Module.symvers was out of date */
|
||||
s->module = mod;
|
||||
}
|
||||
}
|
||||
free(s->namespace);
|
||||
s->namespace = namespace ? strdup(namespace) : NULL;
|
||||
s->preloaded = 0;
|
||||
s->vmlinux = is_vmlinux(mod->name);
|
||||
s->kernel = 0;
|
||||
@@ -671,8 +622,6 @@ static void handle_modversions(struct module *mod, struct elf_info *info,
|
||||
unsigned int crc;
|
||||
enum export export;
|
||||
bool is_crc = false;
|
||||
const char *name;
|
||||
char *namespace;
|
||||
|
||||
if ((!is_vmlinux(mod->name) || mod->is_dot_o) &&
|
||||
strstarts(symname, "__ksymtab"))
|
||||
@@ -744,10 +693,8 @@ static void handle_modversions(struct module *mod, struct elf_info *info,
|
||||
default:
|
||||
/* All exported symbols */
|
||||
if (strstarts(symname, "__ksymtab_")) {
|
||||
name = symname + strlen("__ksymtab_");
|
||||
namespace = sym_extract_namespace(&name);
|
||||
sym_add_exported(name, namespace, mod, export);
|
||||
free(namespace);
|
||||
sym_add_exported(symname + strlen("__ksymtab_"), mod,
|
||||
export);
|
||||
}
|
||||
if (strcmp(symname, "init_module") == 0)
|
||||
mod->has_init = 1;
|
||||
@@ -1998,7 +1945,6 @@ static void read_symbols(const char *modname)
|
||||
const char *symname;
|
||||
char *version;
|
||||
char *license;
|
||||
char *namespace;
|
||||
struct module *mod;
|
||||
struct elf_info info = { };
|
||||
Elf_Sym *sym;
|
||||
@@ -2030,12 +1976,6 @@ static void read_symbols(const char *modname)
|
||||
license = get_next_modinfo(&info, "license", license);
|
||||
}
|
||||
|
||||
namespace = get_modinfo(&info, "import_ns");
|
||||
while (namespace) {
|
||||
add_namespace(&mod->imported_namespaces, namespace);
|
||||
namespace = get_next_modinfo(&info, "import_ns", namespace);
|
||||
}
|
||||
|
||||
for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
|
||||
symname = remove_dot(info.strtab + sym->st_name);
|
||||
|
||||
@@ -2195,18 +2135,6 @@ static int check_exports(struct module *mod)
|
||||
basename++;
|
||||
else
|
||||
basename = mod->name;
|
||||
|
||||
if (exp->namespace && exp->namespace[0]) {
|
||||
add_namespace(&mod->required_namespaces,
|
||||
exp->namespace);
|
||||
|
||||
if (!write_namespace_deps &&
|
||||
!module_imports_namespace(mod, exp->namespace)) {
|
||||
warn("module %s uses symbol %s from namespace %s, but does not import it.\n",
|
||||
basename, exp->name, exp->namespace);
|
||||
}
|
||||
}
|
||||
|
||||
if (!mod->gpl_compatible)
|
||||
check_for_gpl_usage(exp->export, basename, exp->name);
|
||||
check_for_unused(exp->export, basename, exp->name);
|
||||
@@ -2426,7 +2354,7 @@ static void read_dump(const char *fname, unsigned int kernel)
|
||||
return;
|
||||
|
||||
while ((line = get_next_line(&pos, file, size))) {
|
||||
char *symname, *namespace, *modname, *d, *export, *end;
|
||||
char *symname, *modname, *d, *export, *end;
|
||||
unsigned int crc;
|
||||
struct module *mod;
|
||||
struct symbol *s;
|
||||
@@ -2434,10 +2362,7 @@ static void read_dump(const char *fname, unsigned int kernel)
|
||||
if (!(symname = strchr(line, '\t')))
|
||||
goto fail;
|
||||
*symname++ = '\0';
|
||||
if (!(namespace = strchr(symname, '\t')))
|
||||
goto fail;
|
||||
*namespace++ = '\0';
|
||||
if (!(modname = strchr(namespace, '\t')))
|
||||
if (!(modname = strchr(symname, '\t')))
|
||||
goto fail;
|
||||
*modname++ = '\0';
|
||||
if ((export = strchr(modname, '\t')) != NULL)
|
||||
@@ -2454,8 +2379,7 @@ static void read_dump(const char *fname, unsigned int kernel)
|
||||
mod = new_module(modname);
|
||||
mod->skip = 1;
|
||||
}
|
||||
s = sym_add_exported(symname, namespace, mod,
|
||||
export_no(export));
|
||||
s = sym_add_exported(symname, mod, export_no(export));
|
||||
s->kernel = kernel;
|
||||
s->preloaded = 1;
|
||||
s->is_static = 0;
|
||||
@@ -2485,20 +2409,16 @@ static void write_dump(const char *fname)
|
||||
{
|
||||
struct buffer buf = { };
|
||||
struct symbol *symbol;
|
||||
const char *namespace;
|
||||
int n;
|
||||
|
||||
for (n = 0; n < SYMBOL_HASH_SIZE ; n++) {
|
||||
symbol = symbolhash[n];
|
||||
while (symbol) {
|
||||
if (dump_sym(symbol)) {
|
||||
namespace = symbol->namespace;
|
||||
buf_printf(&buf, "0x%08x\t%s\t%s\t%s\t%s\n",
|
||||
symbol->crc, symbol->name,
|
||||
namespace ? namespace : "",
|
||||
symbol->module->name,
|
||||
export_str(symbol->export));
|
||||
}
|
||||
if (dump_sym(symbol))
|
||||
buf_printf(&buf, "0x%08x\t%s\t%s\t%s\n",
|
||||
symbol->crc, symbol->name,
|
||||
symbol->module->name,
|
||||
export_str(symbol->export));
|
||||
symbol = symbol->next;
|
||||
}
|
||||
}
|
||||
@@ -2506,31 +2426,6 @@ static void write_dump(const char *fname)
|
||||
free(buf.p);
|
||||
}
|
||||
|
||||
static void write_namespace_deps_files(void)
|
||||
{
|
||||
struct module *mod;
|
||||
struct namespace_list *ns;
|
||||
struct buffer ns_deps_buf = {};
|
||||
|
||||
for (mod = modules; mod; mod = mod->next) {
|
||||
char fname[PATH_MAX];
|
||||
|
||||
if (mod->skip)
|
||||
continue;
|
||||
|
||||
ns_deps_buf.pos = 0;
|
||||
|
||||
for (ns = mod->required_namespaces; ns; ns = ns->next)
|
||||
buf_printf(&ns_deps_buf, "%s\n", ns->namespace);
|
||||
|
||||
if (ns_deps_buf.pos == 0)
|
||||
continue;
|
||||
|
||||
sprintf(fname, "%s.ns_deps", mod->name);
|
||||
write_if_changed(&ns_deps_buf, fname);
|
||||
}
|
||||
}
|
||||
|
||||
struct ext_sym_list {
|
||||
struct ext_sym_list *next;
|
||||
const char *file;
|
||||
@@ -2548,7 +2443,7 @@ int main(int argc, char **argv)
|
||||
struct ext_sym_list *extsym_iter;
|
||||
struct ext_sym_list *extsym_start = NULL;
|
||||
|
||||
while ((opt = getopt(argc, argv, "i:I:e:mnsT:o:awEd")) != -1) {
|
||||
while ((opt = getopt(argc, argv, "i:I:e:mnsT:o:awE")) != -1) {
|
||||
switch (opt) {
|
||||
case 'i':
|
||||
kernel_read = optarg;
|
||||
@@ -2589,9 +2484,6 @@ int main(int argc, char **argv)
|
||||
case 'E':
|
||||
sec_mismatch_fatal = 1;
|
||||
break;
|
||||
case 'd':
|
||||
write_namespace_deps = 1;
|
||||
break;
|
||||
default:
|
||||
exit(1);
|
||||
}
|
||||
@@ -2626,9 +2518,6 @@ int main(int argc, char **argv)
|
||||
|
||||
err |= check_modname_len(mod);
|
||||
err |= check_exports(mod);
|
||||
if (write_namespace_deps)
|
||||
continue;
|
||||
|
||||
add_header(&buf, mod);
|
||||
add_intree_flag(&buf, !external_module);
|
||||
add_retpoline(&buf);
|
||||
@@ -2641,12 +2530,6 @@ int main(int argc, char **argv)
|
||||
sprintf(fname, "%s.mod.c", mod->name);
|
||||
write_if_changed(&buf, fname);
|
||||
}
|
||||
|
||||
if (write_namespace_deps) {
|
||||
write_namespace_deps_files();
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (dump_write)
|
||||
write_dump(dump_write);
|
||||
if (sec_mismatch_count && sec_mismatch_fatal)
|
||||
|
||||
Reference in New Issue
Block a user