summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorGuo Ren <ren_guo@c-sky.com>2019-02-28 19:50:36 -0500
committerGuo Ren <ren_guo@c-sky.com>2019-04-22 01:44:57 -0400
commit28bb030f93334495ddc64ade0bff18721bf7023d (patch)
treed0a4e4eaa36575adf490165f63d2bd6160653124 /scripts
parent3dfc242f11d792535db774613c6fd1df565c2137 (diff)
csky/ftrace: Add dynamic function tracer (include graph tracer)
Support dynamic ftrace including dynamic graph tracer. Gcc-csky with -pg will produce call site in every function prologue and we can use these call site to hook trace function. gcc with -pg origin call site: push lr jbsr _mcount nop32 nop32 If the (callee - caller)'s offset is in range of bsr instruction, we'll modify code with: push lr bsr _mcount nop32 nop32 Else if the (callee - caller)'s offset is out of bsr instrunction, we'll modify code with: push lr movih r26, ... ori r26, ... jsr r26 (r26 is reserved for jsr link reg in csky abiv2 spec.) Signed-off-by: Guo Ren <ren_guo@c-sky.com>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/recordmcount.pl3
1 files changed, 3 insertions, 0 deletions
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
index 68841d01162c..f71666899245 100755
--- a/scripts/recordmcount.pl
+++ b/scripts/recordmcount.pl
@@ -397,6 +397,9 @@ if ($arch eq "x86_64") {
397} elsif ($arch eq "nds32") { 397} elsif ($arch eq "nds32") {
398 $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_NDS32_HI20_RELA\\s+_mcount\$"; 398 $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_NDS32_HI20_RELA\\s+_mcount\$";
399 $alignment = 2; 399 $alignment = 2;
400} elsif ($arch eq "csky") {
401 $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_CKCORE_PCREL_JSR_IMM26BY2\\s+_mcount\$";
402 $alignment = 2;
400} else { 403} else {
401 die "Arch $arch is not supported with CONFIG_FTRACE_MCOUNT_RECORD"; 404 die "Arch $arch is not supported with CONFIG_FTRACE_MCOUNT_RECORD";
402} 405}