Messages in this thread Patch in this message | | | Date | Thu, 13 Mar 2014 12:38:19 +0000 | From | Will Deacon <> | Subject | Re: [PATCH v6 3/7] ftrace: Add arm64 support to recordmcount |
| |
On Thu, Mar 13, 2014 at 10:13:46AM +0000, AKASHI Takahiro wrote: > Recordmcount utility under scripts is run, after compiling each object, > to find out all the locations of calling _mcount() and put them into > specific seciton named __mcount_loc. > Then linker collects all such information into a table in the kernel image > (between __start_mcount_loc and __stop_mcount_loc) for later use by ftrace. > > This patch adds arm64 specific definitions to identify such locations. > There are two types of implementation, C and Perl. On arm64, only C version > is used to build the kernel now that CONFIG_HAVE_C_RECORDMCOUNT is on. > But Perl version is also maintained. > > This patch also contains a workaround just in case where a header file, > elf.h, on host machine doesn't have definitions of EM_AARCH64 nor > R_AARCH64_ABS64. Without them, compiling C version of recordmcount will > fail.
[...]
> diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c > index 9c22317..047c8cd 100644 > --- a/scripts/recordmcount.c > +++ b/scripts/recordmcount.c > @@ -40,6 +40,11 @@ > #define R_METAG_NONE 3 > #endif > > +#ifndef EM_AARCH64 > +#define EM_AARCH64 183 > +#define R_AARCH64_ABS64 257 > +#endif > + > static int fd_map; /* File descriptor for file being modified. */ > static int mmap_failed; /* Boolean flag. */ > static void *ehdr_curr; /* current ElfXX_Ehdr * for resource cleanup */ > @@ -347,6 +352,10 @@ do_file(char const *const fname) > case EM_ARM: reltype = R_ARM_ABS32; > altmcount = "__gnu_mcount_nc"; > break; > + case EM_AARCH64: > + reltype = R_AARCH64_ABS64; > + altmcount = "_mcount";
Shouldn't you be setting gpfx = '_' instead of overriding altmcount like this?
> + break; > case EM_IA_64: reltype = R_IA64_IMM64; gpfx = '_'; break; > case EM_METAG: reltype = R_METAG_ADDR32; > altmcount = "_mcount_wrapper"; > diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl > index 91280b8..397b6b8 100755 > --- a/scripts/recordmcount.pl > +++ b/scripts/recordmcount.pl > @@ -279,6 +279,11 @@ if ($arch eq "x86_64") { > $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_ARM_(CALL|PC24|THM_CALL)" . > "\\s+(__gnu_mcount_nc|mcount)\$"; > > +} elsif ($arch eq "arm64") { > + $alignment = 3; > + $section_type = '%progbits'; > + $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_AARCH64_CALL26\\s+_mcount\$";
What about "mcount" (i.e. no underscore)?
Will
| |