mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
gendwarfksyms: Clean up kABI rule look-ups
Reduce code duplication by moving kABI rule look-ups to separate functions. Signed-off-by: Sami Tolvanen <samitolvanen@google.com> Reviewed-by: Petr Pavlu <petr.pavlu@suse.com> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
parent
707f853d7f
commit
ff2c5f5a9e
1 changed files with 49 additions and 62 deletions
|
@ -222,25 +222,6 @@ void kabi_read_rules(int fd)
|
|||
check(elf_end(elf));
|
||||
}
|
||||
|
||||
bool kabi_is_declonly(const char *fqn)
|
||||
{
|
||||
struct rule *rule;
|
||||
|
||||
if (!stable)
|
||||
return false;
|
||||
if (!fqn || !*fqn)
|
||||
return false;
|
||||
|
||||
hash_for_each_possible(rules, rule, hash,
|
||||
rule_values_hash(KABI_RULE_TYPE_DECLONLY, fqn)) {
|
||||
if (rule->type == KABI_RULE_TYPE_DECLONLY &&
|
||||
!strcmp(fqn, rule->target))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static char *get_enumerator_target(const char *fqn, const char *field)
|
||||
{
|
||||
char *target = NULL;
|
||||
|
@ -251,6 +232,47 @@ static char *get_enumerator_target(const char *fqn, const char *field)
|
|||
return target;
|
||||
}
|
||||
|
||||
static struct rule *find_rule(enum kabi_rule_type type, const char *target)
|
||||
{
|
||||
struct rule *rule;
|
||||
|
||||
if (!stable)
|
||||
return NULL;
|
||||
if (!target || !*target)
|
||||
return NULL;
|
||||
|
||||
hash_for_each_possible(rules, rule, hash,
|
||||
rule_values_hash(type, target)) {
|
||||
if (rule->type == type && !strcmp(target, rule->target))
|
||||
return rule;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct rule *find_enumerator_rule(enum kabi_rule_type type,
|
||||
const char *fqn, const char *field)
|
||||
{
|
||||
struct rule *rule;
|
||||
char *target;
|
||||
|
||||
if (!stable)
|
||||
return NULL;
|
||||
if (!fqn || !*fqn || !field || !*field)
|
||||
return NULL;
|
||||
|
||||
target = get_enumerator_target(fqn, field);
|
||||
rule = find_rule(type, target);
|
||||
|
||||
free(target);
|
||||
return rule;
|
||||
}
|
||||
|
||||
bool kabi_is_declonly(const char *fqn)
|
||||
{
|
||||
return !!find_rule(KABI_RULE_TYPE_DECLONLY, fqn);
|
||||
}
|
||||
|
||||
static unsigned long get_ulong_value(const char *value)
|
||||
{
|
||||
unsigned long result = 0;
|
||||
|
@ -267,58 +289,23 @@ static unsigned long get_ulong_value(const char *value)
|
|||
|
||||
bool kabi_is_enumerator_ignored(const char *fqn, const char *field)
|
||||
{
|
||||
bool match = false;
|
||||
struct rule *rule;
|
||||
char *target;
|
||||
|
||||
if (!stable)
|
||||
return false;
|
||||
if (!fqn || !*fqn || !field || !*field)
|
||||
return false;
|
||||
|
||||
target = get_enumerator_target(fqn, field);
|
||||
|
||||
hash_for_each_possible(
|
||||
rules, rule, hash,
|
||||
rule_values_hash(KABI_RULE_TYPE_ENUMERATOR_IGNORE, target)) {
|
||||
if (rule->type == KABI_RULE_TYPE_ENUMERATOR_IGNORE &&
|
||||
!strcmp(target, rule->target)) {
|
||||
match = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
free(target);
|
||||
return match;
|
||||
return !!find_enumerator_rule(KABI_RULE_TYPE_ENUMERATOR_IGNORE, fqn,
|
||||
field);
|
||||
}
|
||||
|
||||
bool kabi_get_enumerator_value(const char *fqn, const char *field,
|
||||
unsigned long *value)
|
||||
{
|
||||
bool match = false;
|
||||
struct rule *rule;
|
||||
char *target;
|
||||
|
||||
if (!stable)
|
||||
return false;
|
||||
if (!fqn || !*fqn || !field || !*field)
|
||||
return false;
|
||||
|
||||
target = get_enumerator_target(fqn, field);
|
||||
|
||||
hash_for_each_possible(rules, rule, hash,
|
||||
rule_values_hash(KABI_RULE_TYPE_ENUMERATOR_VALUE,
|
||||
target)) {
|
||||
if (rule->type == KABI_RULE_TYPE_ENUMERATOR_VALUE &&
|
||||
!strcmp(target, rule->target)) {
|
||||
*value = get_ulong_value(rule->value);
|
||||
match = true;
|
||||
break;
|
||||
}
|
||||
rule = find_enumerator_rule(KABI_RULE_TYPE_ENUMERATOR_VALUE, fqn,
|
||||
field);
|
||||
if (rule) {
|
||||
*value = get_ulong_value(rule->value);
|
||||
return true;
|
||||
}
|
||||
|
||||
free(target);
|
||||
return match;
|
||||
return false;
|
||||
}
|
||||
|
||||
void kabi_free(void)
|
||||
|
|
Loading…
Add table
Reference in a new issue