Skip to content

Commit

Permalink
objtool: Remove flags argument from elf_create_section()
Browse files Browse the repository at this point in the history
Simplify the elf_create_section() interface a bit by removing the flags
argument.  Most callers don't care about changing the section header
flags.  If needed, they can be modified afterwards, just like any other
section header field.

Link: https://lore.kernel.org/r/515235d9cf62637a14bee37bfa9169ef20065471.1685464332.git.jpoimboe@kernel.org
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
  • Loading branch information
Josh Poimboeuf committed Jun 7, 2023
1 parent 809373e commit 2707579
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 15 deletions.
17 changes: 10 additions & 7 deletions tools/objtool/check.c
Original file line number Diff line number Diff line change
Expand Up @@ -677,11 +677,14 @@ static int create_static_call_sections(struct objtool_file *file)
list_for_each_entry(insn, &file->static_call_list, call_node)
idx++;

sec = elf_create_section(file->elf, ".static_call_sites", SHF_WRITE,
sec = elf_create_section(file->elf, ".static_call_sites",
sizeof(struct static_call_site), idx);
if (!sec)
return -1;

/* Allow modules to set the low bits of static_call_site::key */
sec->sh.sh_flags |= SHF_WRITE;

idx = 0;
list_for_each_entry(insn, &file->static_call_list, call_node) {

Expand Down Expand Up @@ -763,7 +766,7 @@ static int create_retpoline_sites_sections(struct objtool_file *file)
if (!idx)
return 0;

sec = elf_create_section(file->elf, ".retpoline_sites", 0,
sec = elf_create_section(file->elf, ".retpoline_sites",
sizeof(int), idx);
if (!sec) {
WARN("elf_create_section: .retpoline_sites");
Expand Down Expand Up @@ -809,7 +812,7 @@ static int create_return_sites_sections(struct objtool_file *file)
if (!idx)
return 0;

sec = elf_create_section(file->elf, ".return_sites", 0,
sec = elf_create_section(file->elf, ".return_sites",
sizeof(int), idx);
if (!sec) {
WARN("elf_create_section: .return_sites");
Expand Down Expand Up @@ -861,7 +864,7 @@ static int create_ibt_endbr_seal_sections(struct objtool_file *file)
if (!idx)
return 0;

sec = elf_create_section(file->elf, ".ibt_endbr_seal", 0,
sec = elf_create_section(file->elf, ".ibt_endbr_seal",
sizeof(int), idx);
if (!sec) {
WARN("elf_create_section: .ibt_endbr_seal");
Expand Down Expand Up @@ -920,7 +923,7 @@ static int create_cfi_sections(struct objtool_file *file)
idx++;
}

sec = elf_create_section(file->elf, ".cfi_sites", 0, sizeof(unsigned int), idx);
sec = elf_create_section(file->elf, ".cfi_sites", sizeof(unsigned int), idx);
if (!sec)
return -1;

Expand Down Expand Up @@ -968,7 +971,7 @@ static int create_mcount_loc_sections(struct objtool_file *file)
list_for_each_entry(insn, &file->mcount_loc_list, call_node)
idx++;

sec = elf_create_section(file->elf, "__mcount_loc", 0, addrsize, idx);
sec = elf_create_section(file->elf, "__mcount_loc", addrsize, idx);
if (!sec)
return -1;

Expand Down Expand Up @@ -1013,7 +1016,7 @@ static int create_direct_call_sections(struct objtool_file *file)
list_for_each_entry(insn, &file->call_list, call_node)
idx++;

sec = elf_create_section(file->elf, ".call_sites", 0, sizeof(unsigned int), idx);
sec = elf_create_section(file->elf, ".call_sites", sizeof(unsigned int), idx);
if (!sec)
return -1;

Expand Down
10 changes: 5 additions & 5 deletions tools/objtool/elf.c
Original file line number Diff line number Diff line change
Expand Up @@ -1059,7 +1059,7 @@ static int elf_add_string(struct elf *elf, struct section *strtab, char *str)
}

struct section *elf_create_section(struct elf *elf, const char *name,
unsigned int sh_flags, size_t entsize, int nr)
size_t entsize, int nr)
{
struct section *sec, *shstrtab;
size_t size = entsize * nr;
Expand Down Expand Up @@ -1117,7 +1117,7 @@ struct section *elf_create_section(struct elf *elf, const char *name,
sec->sh.sh_entsize = entsize;
sec->sh.sh_type = SHT_PROGBITS;
sec->sh.sh_addralign = 1;
sec->sh.sh_flags = SHF_ALLOC | sh_flags;
sec->sh.sh_flags = SHF_ALLOC;

/* Add section name to .shstrtab (or .strtab for Clang) */
shstrtab = find_section_by_name(elf, ".shstrtab");
Expand Down Expand Up @@ -1153,7 +1153,7 @@ static struct section *elf_create_rel_reloc_section(struct elf *elf, struct sect
strcpy(relocname, ".rel");
strcat(relocname, base->name);

sec = elf_create_section(elf, relocname, 0, sizeof(GElf_Rel), 0);
sec = elf_create_section(elf, relocname, sizeof(GElf_Rel), 0);
free(relocname);
if (!sec)
return NULL;
Expand Down Expand Up @@ -1185,9 +1185,9 @@ static struct section *elf_create_rela_reloc_section(struct elf *elf, struct sec
strcat(relocname, base->name);

if (addrsize == sizeof(u32))
sec = elf_create_section(elf, relocname, 0, sizeof(Elf32_Rela), 0);
sec = elf_create_section(elf, relocname, sizeof(Elf32_Rela), 0);
else
sec = elf_create_section(elf, relocname, 0, sizeof(GElf_Rela), 0);
sec = elf_create_section(elf, relocname, sizeof(GElf_Rela), 0);
free(relocname);
if (!sec)
return NULL;
Expand Down
2 changes: 1 addition & 1 deletion tools/objtool/include/objtool/elf.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ struct elf {
};

struct elf *elf_open_read(const char *name, int flags);
struct section *elf_create_section(struct elf *elf, const char *name, unsigned int sh_flags, size_t entsize, int nr);
struct section *elf_create_section(struct elf *elf, const char *name, size_t entsize, int nr);

struct symbol *elf_create_prefix_symbol(struct elf *elf, struct symbol *orig, long size);

Expand Down
4 changes: 2 additions & 2 deletions tools/objtool/orc_gen.c
Original file line number Diff line number Diff line change
Expand Up @@ -237,12 +237,12 @@ int orc_create(struct objtool_file *file)
WARN("file already has .orc_unwind section, skipping");
return -1;
}
orc_sec = elf_create_section(file->elf, ".orc_unwind", 0,
orc_sec = elf_create_section(file->elf, ".orc_unwind",
sizeof(struct orc_entry), nr);
if (!orc_sec)
return -1;

sec = elf_create_section(file->elf, ".orc_unwind_ip", 0, sizeof(int), nr);
sec = elf_create_section(file->elf, ".orc_unwind_ip", sizeof(int), nr);
if (!sec)
return -1;

Expand Down

0 comments on commit 2707579

Please sign in to comment.