Commit f2963886 authored by Martin Schwidefsky's avatar Martin Schwidefsky Committed by Steven Rostedt

ftrace/s390: mcount offset calculation

Do the mcount offset adjustment in the recordmcount.pl/recordmcount.[ch]
at compile time and not in ftrace_call_adjust at run time.
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parent 521ccb5c
...@@ -11,15 +11,13 @@ struct dyn_arch_ftrace { }; ...@@ -11,15 +11,13 @@ struct dyn_arch_ftrace { };
#ifdef CONFIG_64BIT #ifdef CONFIG_64BIT
#define MCOUNT_INSN_SIZE 12 #define MCOUNT_INSN_SIZE 12
#define MCOUNT_OFFSET 8
#else #else
#define MCOUNT_INSN_SIZE 20 #define MCOUNT_INSN_SIZE 20
#define MCOUNT_OFFSET 4
#endif #endif
static inline unsigned long ftrace_call_adjust(unsigned long addr) static inline unsigned long ftrace_call_adjust(unsigned long addr)
{ {
return addr - MCOUNT_OFFSET; return addr;
} }
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
......
...@@ -368,8 +368,10 @@ do_file(char const *const fname) ...@@ -368,8 +368,10 @@ do_file(char const *const fname)
"unrecognized ET_REL file: %s\n", fname); "unrecognized ET_REL file: %s\n", fname);
fail_file(); fail_file();
} }
if (w2(ehdr->e_machine) == EM_S390) if (w2(ehdr->e_machine) == EM_S390) {
reltype = R_390_32; reltype = R_390_32;
mcount_adjust_32 = -4;
}
if (w2(ehdr->e_machine) == EM_MIPS) { if (w2(ehdr->e_machine) == EM_MIPS) {
reltype = R_MIPS_32; reltype = R_MIPS_32;
is_fake_mcount32 = MIPS32_is_fake_mcount; is_fake_mcount32 = MIPS32_is_fake_mcount;
...@@ -384,8 +386,10 @@ do_file(char const *const fname) ...@@ -384,8 +386,10 @@ do_file(char const *const fname)
"unrecognized ET_REL file: %s\n", fname); "unrecognized ET_REL file: %s\n", fname);
fail_file(); fail_file();
} }
if (w2(ghdr->e_machine) == EM_S390) if (w2(ghdr->e_machine) == EM_S390) {
reltype = R_390_64; reltype = R_390_64;
mcount_adjust_64 = -8;
}
if (w2(ghdr->e_machine) == EM_MIPS) { if (w2(ghdr->e_machine) == EM_MIPS) {
reltype = R_MIPS_64; reltype = R_MIPS_64;
Elf64_r_sym = MIPS64_r_sym; Elf64_r_sym = MIPS64_r_sym;
......
...@@ -243,12 +243,14 @@ if ($arch eq "x86_64") { ...@@ -243,12 +243,14 @@ if ($arch eq "x86_64") {
} elsif ($arch eq "s390" && $bits == 32) { } elsif ($arch eq "s390" && $bits == 32) {
$mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_390_32\\s+_mcount\$"; $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_390_32\\s+_mcount\$";
$mcount_adjust = -4;
$alignment = 4; $alignment = 4;
$ld .= " -m elf_s390"; $ld .= " -m elf_s390";
$cc .= " -m31"; $cc .= " -m31";
} elsif ($arch eq "s390" && $bits == 64) { } elsif ($arch eq "s390" && $bits == 64) {
$mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_390_(PC|PLT)32DBL\\s+_mcount\\+0x2\$"; $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_390_(PC|PLT)32DBL\\s+_mcount\\+0x2\$";
$mcount_adjust = -8;
$alignment = 8; $alignment = 8;
$type = ".quad"; $type = ".quad";
$ld .= " -m elf64_s390"; $ld .= " -m elf64_s390";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment