comparison example/get_segment/spe/ovly_table.pl @ 465:40af9fc1d428

fix get_segement
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 30 Sep 2009 11:37:15 +0900
parents 942f451341a4
children
comparison
equal deleted inserted replaced
464:01b321c86747 465:40af9fc1d428
75 75
76 my $elf = ReadElf->new; 76 my $elf = ReadElf->new;
77 77
78 my $file = shift; 78 my $file = shift;
79 if (! -e $file) { 79 if (! -e $file) {
80 open(H,">createTask_offset.h"); 80 open(H,">runTask_offset.h");
81 for my $header (@ARGV) { 81 for my $header (@ARGV) {
82 open(HD,"<$header") or die("Can't open $header"); 82 open(HD,"<$header") or die("Can't open $header");
83 my $class = $header; 83 my $class = $header;
84 my $entry = 0; 84 my $entry = 0;
85 $class =~ s/\.cc//; 85 $class =~ s/\.cc//;
86 while(<HD>) { 86 while(<HD>) {
87 if (/SchedDefineDynamicTask\(\s*(\w+)\s*,\s*(\d+)\s*\)/) { 87 if (/SchedDefineDynamicTask\(\s*(\w+)\s*,\s*(\d+)\s*\)/) {
88 print H "#define createTask_${class}_offset 0x$entry\n"; 88 print H "#define runTask_${class}_offset 0x$entry\n";
89 last; 89 last;
90 } 90 }
91 } 91 }
92 } 92 }
93 exit(0); 93 exit(0);
98 my $base = $elf->segment(".segment0")->{addr}; 98 my $base = $elf->segment(".segment0")->{addr};
99 99
100 my @ldfiles; 100 my @ldfiles;
101 my $ldsegment = ""; 101 my $ldsegment = "";
102 102
103 open(H,">createTask_offset.h"); 103 open(H,">runTask_offset.h");
104 print H "#ifndef RUNTASK_OFFSET_H\n";
105 print H "#define RUNTASK_OFFSET_H\n";
104 for my $header (@ARGV) { 106 for my $header (@ARGV) {
105 open(HD,"<$header") or die("Can't open $header"); 107 open(HD,"<$header") or die("Can't open $header");
106 while(<HD>) { 108 while(<HD>) {
107 if (/SchedDefineDynamicTask\(\s*(\w+)\s*,\s*(\d+)\s*\)/) { 109 if (/SchedDefineDynamicTask\(\s*(\w+)\s*,\s*(\d+)\s*\)/) {
108 my $class = $1; 110 my $class = $1;
109 my $segment = $2; 111 my $segment = $2;
110 my $entry = $elf->symbol("createTask_$class")->{value}; 112 my $entry = $elf->symbol("runTask_$class")->{value};
111 print H "#define createTask_${class}_offset (0x$entry-0x$base)\n"; 113 print H "#define runTask_${class}_offset (0x$entry-0x$base)\n";
112 my $ofile = $header; 114 my $ofile = $header;
113 $ofile =~ s/\.cc/.o/; 115 $ofile =~ s/\.cc/.o/;
114 push(@ldfiles,$ofile); 116 push(@ldfiles,$ofile);
115 $ldsegment .= " .segment$segment { $ofile(.text) }\n"; 117 $ldsegment .= " .segment$segment { $ofile(.text) }\n";
116 last; 118 last;
117 } 119 }
118 } 120 }
119 } 121 }
122 print H "#endif\n";
120 123
121 my $ld_script = <<"EOFEOF"; 124 my $ld_script = <<"EOFEOF";
122 / \\.text / 125 / \\.text /
123 /\\\*\(\\.text/ 126 /\\\*\(\\.text/
124 s/\\\*\(\\.text/\*\( EXCLUDE_FILE(@ldfiles) .text/ 127 s/\\\*\(\\.text/\*\( EXCLUDE_FILE(@ldfiles) .text/