Now that this function no longer uses any of the old recordmcount wrapper code we can move it out of the wrapper too.
Signed-off-by: Matt Helsley <mhels...@vmware.com> --- tools/objtool/recordmcount.c | 47 +++++++++++++++++++++++++++++++++ tools/objtool/recordmcount.h | 50 ------------------------------------ 2 files changed, 47 insertions(+), 50 deletions(-) diff --git a/tools/objtool/recordmcount.c b/tools/objtool/recordmcount.c index 34976f3294ac..b9f15fc1f40e 100644 --- a/tools/objtool/recordmcount.c +++ b/tools/objtool/recordmcount.c @@ -395,6 +395,53 @@ static int mcount_adjust = 0; /* Size of an entry in __mcount_loc; 4 or 8 */ static size_t loc_size; +/* + * Look at the relocations in order to find the calls to mcount. + * Accumulate the section offsets that are found, and their relocation info, + * onto the end of the existing arrays. + */ +static void sift_rel_mcount(GElf_Addr **mlocpp, + GElf_Sxword *r_offsetp, + void **const mrelpp, + const struct section * const rels, + unsigned const recsym_index, + unsigned long const recval, + unsigned const reltype, + bool is_rela) +{ + GElf_Rel *mrelp = *mrelpp; + GElf_Rela *mrelap = *mrelpp; + struct symbol *mcount_sym = NULL; + struct reloc *reloc; + + list_for_each_entry(reloc, &rels->reloc_list, list) { + unsigned long addend; + + if (!mcount_sym) + mcount_sym = get_mcount_sym(reloc); + + if (mcount_sym != reloc->sym || is_fake_mcount(reloc)) + continue; + + addend = reloc->offset - recval + mcount_adjust; + if (is_rela) { + mrelap->r_offset = *r_offsetp; + mrelap->r_info = GELF_R_INFO(recsym_index, reltype); + mrelap->r_addend = addend; + mrelap++; + **mlocpp = 0; + } else { + mrelp->r_offset = *r_offsetp; + mrelp->r_info = GELF_R_INFO(recsym_index, reltype); + mrelp++; + **mlocpp = addend; + } + (*mlocpp)++; + *r_offsetp += loc_size; + } + *mrelpp = is_rela ? (void *)mrelap : (void *)mrelp; +} + /* 32 bit and 64 bit are very similar */ #include "recordmcount.h" #define RECORD_MCOUNT_64 diff --git a/tools/objtool/recordmcount.h b/tools/objtool/recordmcount.h index fc6346a7eaf5..2dd303d51b78 100644 --- a/tools/objtool/recordmcount.h +++ b/tools/objtool/recordmcount.h @@ -17,67 +17,17 @@ * This conversion to macros was done by: * Copyright 2010 Steven Rostedt <srost...@redhat.com>, Red Hat Inc. */ -#undef sift_rel_mcount #undef do_func #undef Elf_Rela #ifdef RECORD_MCOUNT_64 -# define sift_rel_mcount sift64_rel_mcount # define do_func do64 # define Elf_Rela Elf64_Rela #else -# define sift_rel_mcount sift32_rel_mcount # define do_func do32 # define Elf_Rela Elf32_Rela #endif -/* - * Look at the relocations in order to find the calls to mcount. - * Accumulate the section offsets that are found, and their relocation info, - * onto the end of the existing arrays. - */ -static void sift_rel_mcount(GElf_Addr **mlocpp, - GElf_Sxword *r_offsetp, - void **const mrelpp, - const struct section * const rels, - unsigned const recsym_index, - unsigned long const recval, - unsigned const reltype, - bool is_rela) -{ - GElf_Rel *mrelp = *mrelpp; - GElf_Rela *mrelap = *mrelpp; - struct symbol *mcount_sym = NULL; - struct reloc *reloc; - - list_for_each_entry(reloc, &rels->reloc_list, list) { - unsigned long addend; - - if (!mcount_sym) - mcount_sym = get_mcount_sym(reloc); - - if (mcount_sym != reloc->sym || is_fake_mcount(reloc)) - continue; - - addend = reloc->offset - recval + mcount_adjust; - if (is_rela) { - mrelap->r_offset = *r_offsetp; - mrelap->r_info = GELF_R_INFO(recsym_index, reltype); - mrelap->r_addend = addend; - mrelap++; - **mlocpp = 0; - } else { - mrelp->r_offset = *r_offsetp; - mrelp->r_info = GELF_R_INFO(recsym_index, reltype); - mrelp++; - **mlocpp = addend; - } - (*mlocpp)++; - *r_offsetp += loc_size; - } - *mrelpp = is_rela ? (void *)mrelap : (void *)mrelp; -} - /* Overall supervision for Elf32 ET_REL file. */ static int do_func(unsigned const reltype) { -- 2.20.1