mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 06:32:08 +00:00
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (71 commits) MIPS: Lasat: Fix botched changes to sysctl code. RTC: rtc-cmos.c: Fix warning on MIPS MIPS: Cleanup random differences beween lmo and Linus' kernel. MIPS: No longer hardwire CONFIG_EMBEDDED to y MIPS: Fix and enhance built-in kernel command line MIPS: eXcite: Remove platform. MIPS: Loongson: Cleanups of serial port support MIPS: Lemote 2F: Suspend CS5536 MFGPT Timer MIPS: Excite: move iodev_remove to .devexit.text MIPS: Lasat: Convert to proc_fops / seq_file MIPS: Cleanup signal code initialization MIPS: Modularize COP2 handling MIPS: Move EARLY_PRINTK to Kconfig.debug MIPS: Yeeloong 2F: Cleanup reset logic using the new ec_write function MIPS: Yeeloong 2F: Add LID open event as the wakeup event MIPS: Yeeloong 2F: Add basic EC operations MIPS: Move several variables from .bss to .init.data MIPS: Tracing: Make function graph tracer work with -mmcount-ra-address MIPS: Tracing: Reserve $12(t0) for mcount-ra-address of gcc 4.5 MIPS: Tracing: Make ftrace for MIPS work without -fno-omit-frame-pointer ...
This commit is contained in:
commit
dbfc985195
255 changed files with 18312 additions and 4880 deletions
|
@ -207,6 +207,7 @@ endif
|
|||
|
||||
ifdef CONFIG_FTRACE_MCOUNT_RECORD
|
||||
cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \
|
||||
"$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \
|
||||
"$(if $(CONFIG_64BIT),64,32)" \
|
||||
"$(OBJDUMP)" "$(OBJCOPY)" "$(CC)" "$(LD)" "$(NM)" "$(RM)" "$(MV)" \
|
||||
"$(if $(part-of-module),1,0)" "$(@)";
|
||||
|
|
|
@ -113,13 +113,13 @@ $P =~ s@.*/@@g;
|
|||
|
||||
my $V = '0.1';
|
||||
|
||||
if ($#ARGV != 10) {
|
||||
print "usage: $P arch bits objdump objcopy cc ld nm rm mv is_module inputfile\n";
|
||||
if ($#ARGV != 11) {
|
||||
print "usage: $P arch endian bits objdump objcopy cc ld nm rm mv is_module inputfile\n";
|
||||
print "version: $V\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
my ($arch, $bits, $objdump, $objcopy, $cc,
|
||||
my ($arch, $endian, $bits, $objdump, $objcopy, $cc,
|
||||
$ld, $nm, $rm, $mv, $is_module, $inputfile) = @ARGV;
|
||||
|
||||
# This file refers to mcount and shouldn't be ftraced, so lets' ignore it
|
||||
|
@ -295,6 +295,58 @@ if ($arch eq "x86_64") {
|
|||
$ld .= " -m elf64_sparc";
|
||||
$cc .= " -m64";
|
||||
$objcopy .= " -O elf64-sparc";
|
||||
} elsif ($arch eq "mips") {
|
||||
# To enable module support, we need to enable the -mlong-calls option
|
||||
# of gcc for module, after using this option, we can not get the real
|
||||
# offset of the calling to _mcount, but the offset of the lui
|
||||
# instruction or the addiu one. herein, we record the address of the
|
||||
# first one, and then we can replace this instruction by a branch
|
||||
# instruction to jump over the profiling function to filter the
|
||||
# indicated functions, or swith back to the lui instruction to trace
|
||||
# them, which means dynamic tracing.
|
||||
#
|
||||
# c: 3c030000 lui v1,0x0
|
||||
# c: R_MIPS_HI16 _mcount
|
||||
# c: R_MIPS_NONE *ABS*
|
||||
# c: R_MIPS_NONE *ABS*
|
||||
# 10: 64630000 daddiu v1,v1,0
|
||||
# 10: R_MIPS_LO16 _mcount
|
||||
# 10: R_MIPS_NONE *ABS*
|
||||
# 10: R_MIPS_NONE *ABS*
|
||||
# 14: 03e0082d move at,ra
|
||||
# 18: 0060f809 jalr v1
|
||||
#
|
||||
# for the kernel:
|
||||
#
|
||||
# 10: 03e0082d move at,ra
|
||||
# 14: 0c000000 jal 0 <loongson_halt>
|
||||
# 14: R_MIPS_26 _mcount
|
||||
# 14: R_MIPS_NONE *ABS*
|
||||
# 14: R_MIPS_NONE *ABS*
|
||||
# 18: 00020021 nop
|
||||
if ($is_module eq "0") {
|
||||
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s_mcount\$";
|
||||
} else {
|
||||
$mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_HI16\\s+_mcount\$";
|
||||
}
|
||||
$objdump .= " -Melf-trad".$endian."mips ";
|
||||
|
||||
if ($endian eq "big") {
|
||||
$endian = " -EB ";
|
||||
$ld .= " -melf".$bits."btsmip";
|
||||
} else {
|
||||
$endian = " -EL ";
|
||||
$ld .= " -melf".$bits."ltsmip";
|
||||
}
|
||||
|
||||
$cc .= " -mno-abicalls -fno-pic -mabi=" . $bits . $endian;
|
||||
$ld .= $endian;
|
||||
|
||||
if ($bits == 64) {
|
||||
$function_regex =
|
||||
"^([0-9a-fA-F]+)\\s+<(.|[^\$]L.*?|\$[^L].*?|[^\$][^L].*?)>:";
|
||||
$type = ".dword";
|
||||
}
|
||||
} elsif ($arch eq "microblaze") {
|
||||
# Microblaze calls '_mcount' instead of plain 'mcount'.
|
||||
$mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s_mcount\$";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue