diff options
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/checkstack.pl | 8 | ||||
| -rw-r--r-- | scripts/genksyms/genksyms.c | 3 | ||||
| -rw-r--r-- | scripts/recordmcount.c | 13 | 
3 files changed, 21 insertions, 3 deletions
diff --git a/scripts/checkstack.pl b/scripts/checkstack.pl index 17e38439670..544aa56b620 100755 --- a/scripts/checkstack.pl +++ b/scripts/checkstack.pl @@ -34,7 +34,7 @@ use strict;  # $1 (first bracket) matches the dynamic amount of the stack growth  #  # use anything else and feel the pain ;) -my (@stack, $re, $dre, $x, $xs); +my (@stack, $re, $dre, $x, $xs, $funcre);  {  	my $arch = shift;  	if ($arch eq "") { @@ -44,6 +44,7 @@ my (@stack, $re, $dre, $x, $xs);  	$x	= "[0-9a-f]";	# hex character  	$xs	= "[0-9a-f ]";	# hex character or space +	$funcre = qr/^$x* <(.*)>:$/;  	if ($arch eq 'arm') {  		#c0008ffc:	e24dd064	sub	sp, sp, #100	; 0x64  		$re = qr/.*sub.*sp, sp, #(([0-9]{2}|[3-9])[0-9]{2})/o; @@ -66,6 +67,10 @@ my (@stack, $re, $dre, $x, $xs);  		#    2b6c:       4e56 fb70       linkw %fp,#-1168  		#  1df770:       defc ffe4       addaw #-28,%sp  		$re = qr/.*(?:linkw %fp,|addaw )#-([0-9]{1,4})(?:,%sp)?$/o; +	} elsif ($arch eq 'metag') { +		#400026fc:       40 00 00 82     ADD       A0StP,A0StP,#0x8 +		$re = qr/.*ADD.*A0StP,A0StP,\#(0x$x{1,8})/o; +		$funcre = qr/^$x* <[^\$](.*)>:$/;  	} elsif ($arch eq 'mips64') {  		#8800402c:       67bdfff0        daddiu  sp,sp,-16  		$re = qr/.*daddiu.*sp,sp,-(([0-9]{2}|[3-9])[0-9]{2})/o; @@ -109,7 +114,6 @@ my (@stack, $re, $dre, $x, $xs);  #  # main()  # -my $funcre = qr/^$x* <(.*)>:$/;  my ($func, $file, $lastslash);  while (my $line = <STDIN>) { diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c index 8a106499ec4..d25e4a118d3 100644 --- a/scripts/genksyms/genksyms.c +++ b/scripts/genksyms/genksyms.c @@ -826,7 +826,8 @@ int main(int argc, char **argv)  			genksyms_usage();  			return 1;  		} -	if ((strcmp(arch, "h8300") == 0) || (strcmp(arch, "blackfin") == 0)) +	if ((strcmp(arch, "h8300") == 0) || (strcmp(arch, "blackfin") == 0) || +	    (strcmp(arch, "metag") == 0))  		mod_prefix = "_";  	{  		extern int yydebug; diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c index ee52cb8e17a..9c22317778e 100644 --- a/scripts/recordmcount.c +++ b/scripts/recordmcount.c @@ -33,6 +33,13 @@  #include <string.h>  #include <unistd.h> +#ifndef EM_METAG +/* Remove this when these make it to the standard system elf.h. */ +#define EM_METAG      174 +#define R_METAG_ADDR32                   2 +#define R_METAG_NONE                     3 +#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 */ @@ -341,6 +348,12 @@ do_file(char const *const fname)  			 altmcount = "__gnu_mcount_nc";  			 break;  	case EM_IA_64:	 reltype = R_IA64_IMM64;   gpfx = '_'; break; +	case EM_METAG:	 reltype = R_METAG_ADDR32; +			 altmcount = "_mcount_wrapper"; +			 rel_type_nop = R_METAG_NONE; +			 /* We happen to have the same requirement as MIPS */ +			 is_fake_mcount32 = MIPS32_is_fake_mcount; +			 break;  	case EM_MIPS:	 /* reltype: e_class    */ gpfx = '_'; break;  	case EM_PPC:	 reltype = R_PPC_ADDR32;   gpfx = '_'; break;  	case EM_PPC64:	 reltype = R_PPC64_ADDR64; gpfx = '_'; break;  |