diff mbox series

[livepatch-build-tools,part2,1/6] common: Add is_standard_section() helper function

Message ID 20190416120716.26269-1-wipawel@amazon.de (mailing list archive)
State New, archived
Headers show
Series [livepatch-build-tools,part2,1/6] common: Add is_standard_section() helper function | expand

Commit Message

Wieczorkiewicz, Pawel April 16, 2019, 12:07 p.m. UTC
Detect standard (always to be included) sections via their section
header type. The standard sections: ".shstrtab", ".symtab", ".strtab"
are either of type SHT_SYMTAB or SHT_STRTAB.

Signed-off-by: Pawel Wieczorkiewicz <wipawel@amazon.de>
Reviewed-by: Andra-Irina Paraschiv <andraprs@amazon.com>
Reviewed-by: Bjoern Doebel <doebel@amazon.de>
Reviewed-by: Norbert Manthey <nmanthey@amazon.de>
---
 common.c             | 12 ++++++++++++
 common.h             |  1 +
 create-diff-object.c |  5 +----
 3 files changed, 14 insertions(+), 4 deletions(-)

Comments

Ross Lagerwall April 29, 2019, 3:07 p.m. UTC | #1
On 4/16/19 1:07 PM, Pawel Wieczorkiewicz wrote:
> Detect standard (always to be included) sections via their section
> header type. The standard sections: ".shstrtab", ".symtab", ".strtab"
> are either of type SHT_SYMTAB or SHT_STRTAB.
> 
> Signed-off-by: Pawel Wieczorkiewicz <wipawel@amazon.de>
> Reviewed-by: Andra-Irina Paraschiv <andraprs@amazon.com>
> Reviewed-by: Bjoern Doebel <doebel@amazon.de>
> Reviewed-by: Norbert Manthey <nmanthey@amazon.de>
> ---
>   common.c             | 12 ++++++++++++
>   common.h             |  1 +
>   create-diff-object.c |  5 +----
>   3 files changed, 14 insertions(+), 4 deletions(-)
> 
> diff --git a/common.c b/common.c
> index bc63955..1fb07cb 100644
> --- a/common.c
> +++ b/common.c
> @@ -5,6 +5,7 @@
>   #include <sys/stat.h>
>   #include <fcntl.h>
>   #include <unistd.h>
> +#include <stdbool.h>
>   #include <gelf.h>
>   
>   #include "list.h"
> @@ -258,6 +259,17 @@ int is_debug_section(struct section *sec)
>   	return !strncmp(name, ".debug_", 7);
>   }
>   
> +int is_standard_section(struct section *sec)
> +{
> +	switch (sec->sh.sh_type) {
> +	case SHT_STRTAB:
> +	case SHT_SYMTAB:
> +		return true;
> +	default:
> +		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 7599fe7..cda690d 100644
> --- a/common.h
> +++ b/common.h
> @@ -150,6 +150,7 @@ struct symbol *find_symbol_by_name(struct list_head *list, const char *name);
>   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_local_sym(struct symbol *sym);
>   
>   void rela_insn(struct section *sec, struct rela *rela, struct insn *insn);
> diff --git a/create-diff-object.c b/create-diff-object.c
> index 82f777e..1e6e617 100644
> --- a/create-diff-object.c
> +++ b/create-diff-object.c
> @@ -1278,10 +1278,7 @@ static void kpatch_include_standard_elements(struct kpatch_elf *kelf)
>   
>   	list_for_each_entry(sec, &kelf->sections, list) {
>   		/* include these sections even if they haven't changed */
> -		if (!strcmp(sec->name, ".shstrtab") ||
> -		    !strcmp(sec->name, ".strtab") ||
> -		    !strcmp(sec->name, ".symtab") ||
> -		    should_include_str_section(sec->name)) {
> +		if (is_standard_section(sec) || should_include_str_section(sec->name)) {

Let's keep lines to 80 chars where feasible (1 tab == 8 spaces). 
Otherwise LGTM.
diff mbox series

Patch

diff --git a/common.c b/common.c
index bc63955..1fb07cb 100644
--- a/common.c
+++ b/common.c
@@ -5,6 +5,7 @@ 
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#include <stdbool.h>
 #include <gelf.h>
 
 #include "list.h"
@@ -258,6 +259,17 @@  int is_debug_section(struct section *sec)
 	return !strncmp(name, ".debug_", 7);
 }
 
+int is_standard_section(struct section *sec)
+{
+	switch (sec->sh.sh_type) {
+	case SHT_STRTAB:
+	case SHT_SYMTAB:
+		return true;
+	default:
+		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 7599fe7..cda690d 100644
--- a/common.h
+++ b/common.h
@@ -150,6 +150,7 @@  struct symbol *find_symbol_by_name(struct list_head *list, const char *name);
 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_local_sym(struct symbol *sym);
 
 void rela_insn(struct section *sec, struct rela *rela, struct insn *insn);
diff --git a/create-diff-object.c b/create-diff-object.c
index 82f777e..1e6e617 100644
--- a/create-diff-object.c
+++ b/create-diff-object.c
@@ -1278,10 +1278,7 @@  static void kpatch_include_standard_elements(struct kpatch_elf *kelf)
 
 	list_for_each_entry(sec, &kelf->sections, list) {
 		/* include these sections even if they haven't changed */
-		if (!strcmp(sec->name, ".shstrtab") ||
-		    !strcmp(sec->name, ".strtab") ||
-		    !strcmp(sec->name, ".symtab") ||
-		    should_include_str_section(sec->name)) {
+		if (is_standard_section(sec) || should_include_str_section(sec->name)) {
 			sec->include = 1;
 			if (sec->secsym)
 				sec->secsym->include = 1;