Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed60453f authored by Rabin Vincent's avatar Rabin Vincent Committed by Russell King
Browse files

ARM: 6511/1: ftrace: add ARM support for C version of recordmcount



Depending on the compiler version, ARM GCC calls the mcount function
either __gnu_mcount_nc or mcount.

Acked-by: default avatarSteven Rostedt <rostedt@goodmis.org>
Signed-off-by: default avatarRabin Vincent <rabin@rab.in>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent cd3478f2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ config ARM
	select PERF_USE_VMALLOC
	select HAVE_REGS_AND_STACK_ACCESS_API
	select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V7))
	select HAVE_C_RECORDMCOUNT
	help
	  The ARM series is a line of low-power-consumption RISC chip designs
	  licensed by ARM Ltd and targeted at embedded applications and
+4 −1
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ static void *ehdr_curr; /* current ElfXX_Ehdr * for resource cleanup */
static char gpfx;	/* prefix for global symbol name (sometimes '_') */
static struct stat sb;	/* Remember .st_size, etc. */
static jmp_buf jmpenv;	/* setjmp/longjmp per-file error escape */
static const char *altmcount;	/* alternate mcount symbol name */

/* setjmp() return values */
enum {
@@ -299,7 +300,9 @@ do_file(char const *const fname)
		fail_file();
	} break;
	case EM_386:	 reltype = R_386_32;                   break;
	case EM_ARM:	 reltype = R_ARM_ABS32;                break;
	case EM_ARM:	 reltype = R_ARM_ABS32;
			 altmcount = "__gnu_mcount_nc";
			 break;
	case EM_IA_64:	 reltype = R_IA64_IMM64;   gpfx = '_'; break;
	case EM_MIPS:	 /* reltype: e_class    */ gpfx = '_'; break;
	case EM_PPC:	 reltype = R_PPC_ADDR32;   gpfx = '_'; break;
+3 −2
Original line number Diff line number Diff line
@@ -275,11 +275,12 @@ static uint_t *sift_rel_mcount(uint_t *mlocp,
			Elf_Sym const *const symp =
				&sym0[Elf_r_sym(relp)];
			char const *symname = &str0[w(symp->st_name)];
			char const *mcount = '_' == gpfx ? "_mcount" : "mcount";

			if ('.' == symname[0])
				++symname;  /* ppc64 hack */
			if (0 == strcmp((('_' == gpfx) ? "_mcount" : "mcount"),
					symname))
			if (0 == strcmp(mcount, symname) ||
			    (altmcount && 0 == strcmp(altmcount, symname)))
				mcountsym = Elf_r_sym(relp);
		}