# Program to determine -Ttext parameter for ld
# $Id: //depot/rel/Foxhill/dot.8/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:
