| # Program to determine -Ttext parameter for ld |
| # $Id: //depot/rel/Eaglenest/Xtensa/OS/xtos/textaddr#1 $ |
| |
| # Copyright (c) 2001 Tensilica Inc. |
| # |
| # Permission is hereby granted, free of charge, to any person obtaining |
| # a copy of this software and associated documentation files (the |
| # "Software"), to deal in the Software without restriction, including |
| # without limitation the rights to use, copy, modify, merge, publish, |
| # distribute, sublicense, and/or sell copies of the Software, and to |
| # permit persons to whom the Software is furnished to do so, subject to |
| # the following conditions: |
| # |
| # The above copyright notice and this permission notice shall be included |
| # in all copies or substantial portions of the Software. |
| # |
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
| # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| |
| package textaddr; |
| |
| use strict; |
| use FileHandle; |
| |
| { |
| $::myname = 'textaddr'; |
| |
| die("Usage is: $::myname objfile label address\n") |
| unless @ARGV == 3; |
| my($objfile, $label, $address) = @ARGV; |
| |
| |
| my $nm = new FileHandle "xt-nm $objfile|"; |
| die("$::myname: $!, opening pipe to xt-nm $objfile.\n") |
| unless $nm; |
| while (<$nm>) { |
| if (/^([0-9a-f]{8}) . (\w+)$/) { |
| my $oaddress = $1; |
| my $olabel = $2; |
| if ($olabel eq $label) { |
| printf ("0x%x\n", hex($address) - hex($oaddress)); |
| exit(0); |
| } |
| } |
| } |
| die ("$::myname: $label not found in $objfile.\n"); |
| } |
| |
| # |
| # Local Variables: |
| # mode:perl |
| # perl-indent-level:2 |
| # cperl-indent-level:2 |
| # End: |