Mercurial > hg > Members > kono > Cerium
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/ |