xpcom/reflect/xptcall/public/genstubs.pl

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:44507fa3d988
1 #!/usr/local/bin/perl
2 # This Source Code Form is subject to the terms of the Mozilla Public
3 # License, v. 2.0. If a copy of the MPL was not distributed with this
4 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
6
7 # This is used to generate stub entry points. We generate a file to
8 # be included in the declaraion and a file to be used for expanding macros
9 # to represent the implementation of the stubs.
10
11 #
12 # if "$entry_count" is ever changed and the .inc files regenerated then
13 # the following issues need to be addressed:
14 #
15 # 1) The current Linux ARM code has a limitation of only having 256-3 stubs,
16 # as a result of the limitations of immediate values in ARM assembly.
17 #
18 # This number is verified by the IDL parser in xpcom/idl-parser/xpidl.py, as
19 # well as in xpcom/reflect/xptinfo/src/xptiInterfaceInfoManager.cpp, to
20 # prevent generating interfaces or loading xpt files that would cause the
21 # stubs to run off the entries.
22 # If you change this number, please update that location.
23
24 # 3 entries are already 'used' by the 3 methods of nsISupports.
25 # 3+247+5=255 This should get us in under the Linux ARM limitation
26 $entry_count = 247;
27 $sentinel_count = 5;
28
29 $decl_name = "xptcstubsdecl.inc";
30 $def_name = "xptcstubsdef.inc";
31
32 ##
33 ## Write the declarations include file
34 ##
35
36 die "Can't open $decl_name" if !open(OUTFILE, ">$decl_name");
37
38 print OUTFILE "/* generated file - DO NOT EDIT */\n\n";
39 print OUTFILE "/* includes ",$entry_count," stub entries, and ",
40 $sentinel_count," sentinel entries */\n\n";
41 print OUTFILE "/*\n";
42 print OUTFILE "* declarations of normal stubs...\n";
43 print OUTFILE "* 0 is QueryInterface\n";
44 print OUTFILE "* 1 is AddRef\n";
45 print OUTFILE "* 2 is Release\n";
46 print OUTFILE "*/\n";
47 print OUTFILE "#if !defined(__ia64) || (!defined(__hpux) && !defined(__linux__) && !defined(__FreeBSD__))\n";
48 for($i = 0; $i < $entry_count; $i++) {
49 print OUTFILE "NS_IMETHOD Stub",$i+3,"();\n";
50 }
51 print OUTFILE "#else\n";
52 for($i = 0; $i < $entry_count; $i++) {
53 print OUTFILE "NS_IMETHOD Stub",$i+3,"(uint64_t,uint64_t,\n";
54 print OUTFILE " uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t);\n";
55
56 }
57 print OUTFILE "#endif\n";
58
59 print OUTFILE "\n/* declarations of sentinel stubs */\n";
60
61 for($i = 0; $i < $sentinel_count; $i++) {
62 print OUTFILE "NS_IMETHOD Sentinel",$i,"();\n";
63 }
64 close(OUTFILE);
65
66
67 ##
68 ## Write the definitions include file. This assumes a macro will be used to
69 ## expand the entries written...
70 ##
71
72 die "Can't open $def_name" if !open(OUTFILE, ">$def_name");
73
74 ## Disabled for bug 275004 - followup to fix is Bug 419604
75 my $warn_inc_is_generated = 0;
76 if ($warn_inc_is_generated) {
77 print OUTFILE "/* generated file - DO NOT EDIT */\n\n";
78 print OUTFILE "/* includes ",$entry_count," stub entries, and ",
79 $sentinel_count," sentinel entries */\n\n";
80 }
81
82 for($i = 0; $i < $entry_count; $i++) {
83 print OUTFILE "STUB_ENTRY(",$i+3,")\n";
84 }
85
86 for($i = 0; $i < $sentinel_count; $i++) {
87 print OUTFILE "SENTINEL_ENTRY(",$i,")\n";
88 }

mercurial