diff options
author | axis <qt-info@nokia.com> | 2009-09-04 08:48:38 (GMT) |
---|---|---|
committer | axis <qt-info@nokia.com> | 2009-10-23 15:32:21 (GMT) |
commit | ec7009af05cc91797ac90292add5e4dd5cea2973 (patch) | |
tree | d552c4c63e4d2a27c350e00e2d87d052a7d5b607 /bin | |
parent | 8782f3387bcd1dff3d44ae17ab0547ce08478fb1 (diff) | |
download | Qt-ec7009af05cc91797ac90292add5e4dd5cea2973.zip Qt-ec7009af05cc91797ac90292add5e4dd5cea2973.tar.gz Qt-ec7009af05cc91797ac90292add5e4dd5cea2973.tar.bz2 |
Changed the generation of def files and ordinal maps.
Instead of just creating a list, we now create a complete def file
using makedeffile and then create the ordinal map from that.
In addition we make an exp file, in the same way that Symbian does.
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/makedeffile | 48 | ||||
-rwxr-xr-x | bin/makeexpfile | 39 | ||||
-rwxr-xr-x | bin/makeordinalmap | 41 |
3 files changed, 93 insertions, 35 deletions
diff --git a/bin/makedeffile b/bin/makedeffile new file mode 100755 index 0000000..e1534c4 --- /dev/null +++ b/bin/makedeffile @@ -0,0 +1,48 @@ +#!/usr/bin/perl -w + +my $deffile = $ARGV[0]; + +shift @ARGV; + +sub uniqueify { + # String must be sorted beforehand. + my $c; + my $last = $_[0]; + for ($c = 1; $c < scalar(@_); $c++) { + if ($_[$c] eq $last) { + splice(@_, $c, 1); + $c--; + } else { + $last = $_[$c]; + } + } + + return @_; +} + +my @exports; + +foreach (@ARGV) { + my $file; + open($file, "< $_") or die("Could not open $_"); + while (<$file>) { + s/[\r\n]//g; + push (@exports, $_); + } + close($file); +} + +@exports = sort(@exports); + +@exports = uniqueify(@exports); + +open(HANDLE, "> $deffile"); +print (HANDLE "EXPORTS\n; NEW:\n"); +for (my $c = 0; $c < scalar(@exports); $c++) { + if ($exports[$c] =~ /[ ]*([^ ]+)(.*)/) { + print (HANDLE "\t$1 \@ " . ($c + 1) . " NONAME$2\n"); + } +} +print(HANDLE "\n"); +close(HANDLE); + diff --git a/bin/makeexpfile b/bin/makeexpfile new file mode 100755 index 0000000..521791d --- /dev/null +++ b/bin/makeexpfile @@ -0,0 +1,39 @@ +#!/usr/bin/perl -w + +my $deffile = $ARGV[0]; +my $target = $ARGV[1]; + +my @exports; +open (HANDLE, "< $deffile") or die ("Could not open $deffile"); +while (<HANDLE>) { + while (/(_Z[^ ]+)/xg) { + push (@exports, $1); + } +} +close(HANDLE); + +open(HANDLE, "> $target.s") or die("Could not open $target.s"); +print (HANDLE "\tEXPORT __DLL_Export_Table__\n\n"); +print (HANDLE "\tEXPORT |DLL##ExportTable|\n\n"); +print (HANDLE "\tEXPORT |DLL##ExportTableSize|\n\n"); +print (HANDLE "\tAREA ExportTable, CODE\n"); +print (HANDLE "__DLL_Export_Table__\n"); +print (HANDLE "\tBX lr\n"); +print (HANDLE "|DLL##ExportTableSize|\n"); +print (HANDLE "\tDCD " . scalar(@exports) . "\n"); +print (HANDLE "|DLL##ExportTable|\n"); +print (HANDLE "\tPRESERVE8\n\n"); +for (my $c = 0; $c < scalar(@exports); $c++) { + print (HANDLE "\tIMPORT $exports[$c]\n"); + print (HANDLE "\tDCD $exports[$c] ; \@ ". ($c + 1) . "\n"); +} +print (HANDLE "\n"); +print (HANDLE "\tAREA |.directive|, READONLY, NOALLOC\n"); +print (HANDLE "\tDCB \"#<SYMEDIT>#\\n\"\n"); +print (HANDLE "\tDCB \"EXPORT DLL##ExportTable\\n\"\n"); +print (HANDLE "\tDCB \"EXPORT DLL##ExportTableSize\\n\"\n"); +print (HANDLE "\tEND\n"); +close(HANDLE); + +my $result = system("armasm --apcs /inter -o $target $target.s"); +die("Could not execute armar") if ($result); diff --git a/bin/makeordinalmap b/bin/makeordinalmap index 940a9e4..4642772 100755 --- a/bin/makeordinalmap +++ b/bin/makeordinalmap @@ -1,46 +1,17 @@ #!/usr/bin/perl -w my $objects_dir = $ARGV[0]; -my $target = $ARGV[1]; +my $deffile = $ARGV[1]; my $dllFile = $ARGV[2]; - -shift @ARGV; -shift @ARGV; -shift @ARGV; - -sub uniqueify { - # String must be sorted beforehand. - my $c; - my $last = $_[0]; - for ($c = 1; $c < scalar(@_); $c++) { - if ($_[$c] eq $last) { - splice(@_, $c, 1); - $c--; - } else { - $last = $_[$c]; - } - } - - return @_; -} +my $target = $ARGV[3]; my @exports; - -foreach (@ARGV) { - my $file; - open($file, "< $_") or die("Could not open $_"); - while (<$file>) { - push (@exports, $_); +open (HANDLE, "< $deffile") or die ("Could not open $deffile"); +while (<HANDLE>) { + while (/(_Z[^ ]+)/xg) { + push (@exports, $1); } - close($file); } - -@exports = sort(@exports); - -@exports = uniqueify(@exports); - -open(HANDLE, "> test.txt"); -print (HANDLE join("", @exports)); close(HANDLE); my @ordinalfiles; |