[RFC][PATCH v5 38/51] objtool: mcount: mcount symbol name simplification

From: Matt Helsley
Date: Thu Jun 18 2020 - 16:42:09 EST


Remove gpfx -- the recognized prefix for the mcount symbol
-- and just recognize any of the prefixes. This allows us
to further substitute the various strings directly into the
code rather than using variables.

Signed-off-by: Matt Helsley <mhelsley@xxxxxxxxxx>
---
tools/objtool/mcount.c | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/tools/objtool/mcount.c b/tools/objtool/mcount.c
index 7e621769c488..4d6596a031bf 100644
--- a/tools/objtool/mcount.c
+++ b/tools/objtool/mcount.c
@@ -43,7 +43,6 @@

#define R_ARM_THM_CALL 10

-static char gpfx; /* prefix for global symbol name (sometimes '_') */
extern int warn_on_notrace_sect; /* warn when section has mcount not being recorded */

static struct elf *lf;
@@ -166,14 +165,16 @@ static struct symbol *get_mcount_sym(struct reloc *reloc)
{
struct symbol *sym = reloc->sym;
char const *symname = sym->name;
- char const *mcount = gpfx == '_' ? "_mcount" : "mcount";
- char const *fentry = "__fentry__";

if (symname[0] == '.')
- ++symname; /* ppc64 hack */
- if (strcmp(mcount, symname) == 0 ||
+ symname++; /* ppc64 hack */
+
+ if (symname[0] == '_')
+ symname++;
+
+ if (strcmp("mcount", symname) == 0 ||
(strcmp("__gnu_mcount_nc", symname) == 0) ||
- (strcmp(fentry, symname) == 0))
+ (strcmp("_fentry__", symname) == 0))
return sym;
return NULL;
}
@@ -550,7 +551,6 @@ static int do_file(char const *const fname)
goto out;
}

- gpfx = '_';
switch (lf->ehdr.e_machine) {
default:
fprintf(stderr, "unrecognized e_machine %u %s\n",
@@ -562,14 +562,12 @@ static int do_file(char const *const fname)
make_nop = make_nop_x86;
ideal_nop = ideal_nop5_x86_32;
mcount_adjust = -1;
- gpfx = 0;
break;
case EM_ARM:
reltype = R_ARM_ABS32;
make_nop = make_nop_arm;
rel_type_nop = R_ARM_NONE;
is_fake_mcount = arm_is_fake_mcount;
- gpfx = 0;
break;
case EM_AARCH64:
reltype = R_AARCH64_ABS64;
@@ -582,7 +580,7 @@ static int do_file(char const *const fname)
case EM_PPC: reltype = R_PPC_ADDR32; break;
case EM_PPC64: reltype = R_PPC64_ADDR64; break;
case EM_S390: /* reltype: e_class */ break;
- case EM_SH: reltype = R_SH_DIR32; gpfx = 0; break;
+ case EM_SH: reltype = R_SH_DIR32; break;
case EM_SPARCV9: reltype = R_SPARC_64; break;
case EM_X86_64:
make_nop = make_nop_x86;
@@ -590,7 +588,6 @@ static int do_file(char const *const fname)
reltype = R_X86_64_64;
rel_type_nop = R_X86_64_NONE;
mcount_adjust = -1;
- gpfx = 0;
break;
} /* end switch */

--
2.20.1