|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [livepatch-build-tools part2 2/6] common: Add is_referenced_section() helper function
This function checks if given section has an included corresponding
RELA section and/or any of the symbols table symbols references the
section. Section associated symbols are ignored here as there is
always such a symbol for every section.
Signed-off-by: Pawel Wieczorkiewicz <wipawel@xxxxxxxxx>
Reviewed-by: Andra-Irina Paraschiv <andraprs@xxxxxxxxxx>
Reviewed-by: Bjoern Doebel <doebel@xxxxxxxxx>
Reviewed-by: Norbert Manthey <nmanthey@xxxxxxxxx>
---
common.c | 22 +++++++++++++++++++++-
common.h | 1 +
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/common.c b/common.c
index 1fb07cb..c968299 100644
--- a/common.c
+++ b/common.c
@@ -15,7 +15,7 @@
int is_rela_section(struct section *sec)
{
- return (sec->sh.sh_type == SHT_RELA);
+ return sec && (sec->sh.sh_type == SHT_RELA);
}
int is_local_sym(struct symbol *sym)
@@ -270,6 +270,26 @@ int is_standard_section(struct section *sec)
}
}
+int is_referenced_section(const struct section *sec, const struct kpatch_elf
*kelf)
+{
+ struct symbol *sym;
+
+ if (is_rela_section(sec->rela) && sec->rela->include)
+ return true;
+
+ list_for_each_entry(sym, &kelf->symbols, list) {
+ if (!sym->include || !sym->sec)
+ continue;
+ /* Ignore section associated sections */
+ if (sym->type == STT_SECTION)
+ continue;
+ if (sym->sec->index == sec->index)
+ return true;
+ }
+
+ return false;
+}
+
/* returns the offset of the string in the string table */
int offset_of_string(struct list_head *list, char *name)
{
diff --git a/common.h b/common.h
index cda690d..affe16b 100644
--- a/common.h
+++ b/common.h
@@ -151,6 +151,7 @@ int is_text_section(struct section *sec);
int is_debug_section(struct section *sec);
int is_rela_section(struct section *sec);
int is_standard_section(struct section *sec);
+int is_referenced_section(const struct section *sec, const struct kpatch_elf
*kelf);
int is_local_sym(struct symbol *sym);
void rela_insn(struct section *sec, struct rela *rela, struct insn *insn);
--
2.16.5
Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrer: Christian Schlaeger, Ralf Herbrich
Ust-ID: DE 289 237 879
Eingetragen am Amtsgericht Charlottenburg HRB 149173 B
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |