PageRenderTime 60ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 1ms

/compiler/src/main/java/soot/options/soot_options.xml

https://github.com/EliDotNet/robovm
XML | 5727 lines | 5554 code | 80 blank | 93 comment | 0 complexity | 70dba4006a6939c0f5913541e1f76d83 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. <?xml-stylesheet type="text/xsl" href="soot_options.xsl" ?>
  2. <options>
  3. <intro>
  4. <p>
  5. The descriptions of Soot options talk about three categories of
  6. classes: argument classes, application classes, and library classes.</p>
  7. <p>
  8. <var>Argument classes</var> are those you specify explicitly to
  9. Soot. When you use Soot's command line interface, argument
  10. classes are those classes which are either listed explicitly on
  11. the command line or found in a directory specified with the
  12. <tt>-process-dir</tt> option. When you use the Soot's Eclipse
  13. plug-in, argument classes are those which you selected before
  14. starting Soot from the Navigator popup menu, or all classes in
  15. the current project if you started Soot from the Project
  16. menu.</p>
  17. <p>
  18. <var>Application classes</var> are classes that Soot analyzes,
  19. transforms, and turns into output files.</p>
  20. <p>
  21. <var>Library classes</var> are classes which are referred to,
  22. directly or indirectly, by the application classes, but which are
  23. not themselves application classes. Soot resolves these classes
  24. and reads <tt>.class</tt> or <tt>.jimple</tt> source files for
  25. them, but it does not perform transformations on library classes
  26. or write output files for them.</p>
  27. <p>
  28. All argument classes are necessarily application classes. When
  29. Soot <emph>is not</emph> in ``application mode'', argument
  30. classes are the only application classes; other classes
  31. referenced from the argument classes become library classes.</p>
  32. <p>
  33. When Soot <emph>is</emph> in application mode, every class
  34. referenced from the argument classes, directly or indirectly, is
  35. also an application class, unless its package name indicates that
  36. it is part of the standard Java runtime system.</p>
  37. <p>
  38. Users may fine-tune the designation of application and library
  39. classes using the Application Mode Options.
  40. </p>
  41. <p>
  42. Here is a simple example to clarify things. Suppose your program
  43. consists of three class files generated from the following
  44. source:
  45. <pre>
  46. // UI.java
  47. interface UI {
  48. public void display(String msg);
  49. }
  50. // HelloWorld.java
  51. class HelloWorld {
  52. public static void main(String[] arg) {
  53. UI ui = new TextUI();
  54. ui.display("Hello World");
  55. }
  56. }
  57. // TextUI.java
  58. import java.io.*;
  59. class TextUI implements UI {
  60. public void display(String msg) {
  61. System.out.println(msg);
  62. }
  63. }
  64. </pre></p>
  65. <p>
  66. If you run
  67. <pre>
  68. java soot.Main HelloWorld
  69. </pre>
  70. <tt>HelloWorld</tt> is the only argument class and the only
  71. application class. <tt>UI</tt> and <tt>TextUI</tt> are library
  72. classes, along with <tt>java.lang.System</tt>,
  73. <tt>java.lang.String</tt>, <tt>java.io.PrintStream</tt>, and a
  74. host of other classes from the Java runtime system that get
  75. dragged in indirectly by the references to <tt>String</tt> and
  76. <tt>System.out</tt>.</p>
  77. <p>
  78. If you run
  79. <pre>
  80. java soot.Main --app HelloWorld
  81. </pre>
  82. <tt>HelloWorld</tt> remains the
  83. only argument class, but the application classes include <tt>UI</tt>
  84. and <tt>TextUI</tt> as well as <tt>HelloWorld</tt>.
  85. <tt>java.lang.System</tt> et. al. remain library classes.
  86. </p>
  87. <p>
  88. If you run
  89. <pre>
  90. java soot.Main -i java. --app HelloWorld
  91. </pre>
  92. <tt>HelloWorld</tt> is still the only argument class, but the set
  93. of application classes includes the referenced Java runtime
  94. classes in packages whose names start with <tt>java.</tt> as well
  95. as <tt>HelloWorld</tt>, <tt>UI</tt>, and <tt>textUI</tt>. The set
  96. of library classes includes the referenced classes from other
  97. packages in the Java runtime.</p>
  98. </intro>
  99. <section>
  100. <name>General Options</name>
  101. <boolopt>
  102. <name>Help</name>
  103. <alias>h</alias>
  104. <alias>help</alias>
  105. <short_desc>Display help and exit</short_desc>
  106. <long_desc>
  107. Display the textual help message and exit immediately without
  108. further processing.
  109. </long_desc>
  110. </boolopt>
  111. <boolopt>
  112. <name>Phase List</name>
  113. <alias>pl</alias>
  114. <alias>phase-list</alias>
  115. <short_desc>Print list of available phases</short_desc>
  116. <long_desc>
  117. Print a list of the available phases and sub-phases, then exit.
  118. </long_desc>
  119. </boolopt>
  120. <listopt>
  121. <name>Phase Help</name>
  122. <alias>ph</alias>
  123. <alias>phase-help</alias>
  124. <set_arg_label>phase</set_arg_label>
  125. <short_desc>Print help for specified <use_arg_label/></short_desc>
  126. <long_desc>
  127. Print a help message about the phase or sub-phase named
  128. <use_arg_label/>, then exit. To see the help message of
  129. more than one phase, specify multiple phase-help options.
  130. </long_desc>
  131. </listopt>
  132. <boolopt>
  133. <name>Version</name>
  134. <alias>version</alias>
  135. <short_desc>Display version information and exit</short_desc>
  136. <long_desc>
  137. Display information about the version of Soot being run, then
  138. exit without further processing.
  139. </long_desc>
  140. </boolopt>
  141. <boolopt>
  142. <name>Verbose</name>
  143. <alias>v</alias>
  144. <alias>verbose</alias>
  145. <short_desc>Verbose mode</short_desc>
  146. <long_desc>
  147. Provide detailed information about what Soot is doing as it runs.
  148. </long_desc>
  149. </boolopt>
  150. <boolopt>
  151. <name>Interactive Mode</name>
  152. <alias>interactive-mode</alias>
  153. <short_desc>Run in interactive mode</short_desc>
  154. <long_desc>
  155. Runs interactively, with Soot providing detailed information as it iterates through intra-procedural analyses.
  156. </long_desc>
  157. </boolopt>
  158. <boolopt>
  159. <name>Application Mode</name>
  160. <alias>app</alias>
  161. <short_desc>Run in application mode</short_desc>
  162. <long_desc>
  163. <p>
  164. Run in application mode, processing all classes referenced by
  165. argument classes.</p>
  166. </long_desc>
  167. </boolopt>
  168. <boolopt>
  169. <name>Whole-Program Mode</name>
  170. <alias>w</alias>
  171. <alias>whole-program</alias>
  172. <short_desc>Run in whole-program mode</short_desc>
  173. <long_desc>
  174. <p>
  175. Run in whole program mode, taking into consideration the whole
  176. program when performing analyses and transformations. Soot
  177. uses the Call Graph Constructor to build a call graph for the
  178. program, then applies enabled transformations in the Whole-Jimple
  179. Transformation, Whole-Jimple Optimization, and Whole-Jimple
  180. Annotation packs before applying enabled intraprocedural
  181. transformations.</p>
  182. <p>
  183. Note that the Whole-Jimple Optimization pack is normally disabled
  184. (and thus not applied by whole program mode), unless you also
  185. specify the Whole Program Optimize option.</p>
  186. </long_desc>
  187. </boolopt>
  188. <boolopt>
  189. <name>Whole-Shimple Mode</name>
  190. <alias>ws</alias>
  191. <alias>whole-shimple</alias>
  192. <short_desc>Run in whole-shimple mode</short_desc>
  193. <long_desc>
  194. <p>
  195. Run in whole shimple mode, taking into consideration the whole program
  196. when performing Shimple analyses and transformations. Soot uses the
  197. Call Graph Constructor to build a call graph for the program, then
  198. applies enabled transformations in the Whole-Shimple Transformation
  199. and Whole-Shimple Optimization before applying enabled intraprocedural
  200. transformations.</p>
  201. <p>
  202. Note that the Whole-Shimple Optimization pack is normally disabled
  203. (and thus not applied by whole shimple mode), unless you also
  204. specify the Whole Program Optimize option.</p>
  205. </long_desc>
  206. </boolopt>
  207. <boolopt>
  208. <name>Validate</name>
  209. <alias>validate</alias>
  210. <short_desc>Run internal validation on bodies</short_desc>
  211. <long_desc>
  212. Causes internal checks to be done on bodies in the various Soot IRs,
  213. to make sure the transformations have not done something strange.
  214. This option may degrade Soot's performance.
  215. </long_desc>
  216. </boolopt>
  217. <boolopt>
  218. <name>Debug</name>
  219. <alias>debug</alias>
  220. <short_desc>Print various Soot debugging info</short_desc>
  221. <long_desc>
  222. Print various debugging information as Soot runs, particularly
  223. from the Baf Body Phase and the Jimple Annotation Pack Phase.
  224. </long_desc>
  225. </boolopt>
  226. <boolopt>
  227. <name>Debug Resolver</name>
  228. <alias>debug-resolver</alias>
  229. <short_desc>Print debugging info from SootResolver</short_desc>
  230. <long_desc>
  231. Print debugging information about class resolving.
  232. </long_desc>
  233. </boolopt>
  234. </section>
  235. <section>
  236. <name>Input Options</name>
  237. <stropt>
  238. <name>Soot Classpath</name>
  239. <alias>cp</alias>
  240. <alias>soot-class-path</alias>
  241. <alias>soot-classpath</alias>
  242. <set_arg_label>path</set_arg_label>
  243. <short_desc>Use <use_arg_label/> as the classpath for finding classes.</short_desc>
  244. <long_desc>
  245. <p>
  246. Use <use_arg_label/> as the list of directories in which Soot
  247. should search for classes. <use_arg_label/> should be a series of
  248. directories, separated by the path separator character for your
  249. system.</p>
  250. <p>
  251. If no classpath is set on the command line, but the system
  252. property <tt>soot.class.path</tt> has been set, Soot uses its
  253. value as the classpath.</p>
  254. <p>
  255. If neither the command line nor the system properties specify a
  256. Soot classpath, Soot falls back on a default classpath consisting
  257. of the value of the system property <tt>java.class.path</tt>
  258. followed <var>java.home</var><tt>/lib/rt.jar</tt>, where
  259. <var>java.home</var> stands for the contents of the system property
  260. <tt>java.home</tt> and <tt>/</tt> stands for the system file
  261. separator.</p>
  262. </long_desc>
  263. </stropt>
  264. <boolopt>
  265. <name>Prepend classpath</name>
  266. <alias>pp</alias>
  267. <alias>prepend-classpath</alias>
  268. <short_desc>Prepend the given soot classpath to the default classpath.</short_desc>
  269. <long_desc>
  270. <p>
  271. Instead of replacing the default soot classpath with the classpath given on the command line,
  272. prepent it with that classpath.
  273. The default classpath holds whatever is set in the CLASSPATH environment variable,
  274. followed by rt.jar (resolved through the JAVA-UNDERSCORE-HOME environment variable).
  275. If whole-program mode is enabled, jce.jar is also appended in the end.
  276. </p>
  277. </long_desc>
  278. </boolopt>
  279. <listopt>
  280. <name>Process Directories</name>
  281. <alias>process-dir</alias>
  282. <set_arg_label>dir</set_arg_label>
  283. <short_desc>Process all classes found in <use_arg_label/></short_desc>
  284. <long_desc>
  285. <p>
  286. Add all classes found in <use_arg_label/> to the set of argument classes
  287. which is analyzed and transformed by Soot. You can specify the
  288. option more than once, to add argument classes from multiple directories.
  289. </p>
  290. <p>
  291. If subdirectories of <use_arg_label/> contain <tt>.class</tt> or
  292. <tt>.jimple</tt> files, Soot assumes that the subdirectory names
  293. correspond to components of the classes' package names. If
  294. <use_arg_label/> contains <tt>subA/subB/MyClass.class</tt>, for
  295. instance, then Soot assumes <tt>MyClass</tt> is in package
  296. <tt>subA.subB</tt>.</p>
  297. </long_desc>
  298. </listopt>
  299. <boolopt>
  300. <name>Compute AST Metrics</name>
  301. <alias>ast-metrics</alias>
  302. <short_desc>Compute AST Metrics if performing java to jimple</short_desc>
  303. <long_desc>
  304. If this flag is set and soot converts java to jimple then AST metrics will be computed.
  305. </long_desc>
  306. </boolopt>
  307. <multiopt>
  308. <name>Input Source Precedence</name>
  309. <alias>src-prec</alias>
  310. <set_arg_label>format</set_arg_label>
  311. <short_desc>Sets source precedence to <use_arg_label/> files</short_desc>
  312. <long_desc>
  313. Sets <use_arg_label/> as Soot's preference for the type of source files to read when
  314. it looks for a class.
  315. </long_desc>
  316. <value>
  317. <name>Class File</name>
  318. <alias>c</alias>
  319. <alias>class</alias>
  320. <short_desc>Favour class files as Soot source</short_desc>
  321. <long_desc>
  322. Try to resolve classes first from <tt>.class</tt> files found in
  323. the Soot classpath. Fall back to <tt>.jimple</tt> files
  324. only when unable to find a <tt>.class</tt> file.
  325. </long_desc>
  326. <default/>
  327. </value>
  328. <value>
  329. <name>Only Class File</name>
  330. <alias>only-class</alias>
  331. <short_desc>Use only class files as Soot source</short_desc>
  332. <long_desc>
  333. Try to resolve classes first from <tt>.class</tt> files found in
  334. the Soot classpath. Do not try any other types of files even when
  335. unable to find a <tt>.class</tt> file.
  336. </long_desc>
  337. </value>
  338. <value>
  339. <name>Jimple File</name>
  340. <alias>J</alias>
  341. <alias>jimple</alias>
  342. <short_desc>Favour Jimple files as Soot source</short_desc>
  343. <long_desc>
  344. Try to resolve classes first from <tt>.jimple</tt> files found in
  345. the Soot classpath. Fall back to <tt>.class</tt> files only when
  346. unable to find a <tt>.jimple</tt> file.
  347. </long_desc>
  348. </value>
  349. <value>
  350. <name>Java File</name>
  351. <alias>java</alias>
  352. <short_desc>Favour Java files as Soot source</short_desc>
  353. <long_desc>
  354. Try to resolve classes first from <tt>.java</tt> files found in
  355. the Soot classpath. Fall back to <tt>.class</tt> files only when
  356. unable to find a <tt>.java</tt> file.
  357. </long_desc>
  358. </value>
  359. </multiopt>
  360. <boolopt>
  361. <name>Force complete resolver</name>
  362. <alias>full-resolver</alias>
  363. <short_desc>Force transitive resolving of referenced classes</short_desc>
  364. <long_desc>
  365. Normally, Soot resolves only that application classes and any classes that they
  366. refer to, along with any classes it needs for the Jimple typing, but it does not
  367. transitively resolve references in these additional classes that were resolved
  368. only because they were referenced. This switch forces full transitive resolution
  369. of all references found in all classes that are resolved, regardless of why they
  370. were resolved.
  371. In whole-program mode, class resolution is always fully transitive. Therefore,
  372. in whole-program mode, this switch has no effect, and class resolution is
  373. always performed as if it were turned on.
  374. </long_desc>
  375. </boolopt>
  376. <boolopt>
  377. <name>Allow Phantom References</name>
  378. <alias>allow-phantom-refs</alias>
  379. <short_desc>Allow unresolved classes; may cause errors</short_desc>
  380. <long_desc>
  381. Allow Soot to process a class even if it cannot find all classes
  382. referenced by that class. This may cause Soot to produce
  383. incorrect results.
  384. </long_desc>
  385. </boolopt>
  386. <boolopt>
  387. <name>Use J2ME mode</name>
  388. <alias>j2me</alias>
  389. <default>false</default>
  390. <short_desc>Use J2ME mode; changes assignment of types</short_desc>
  391. <long_desc>
  392. Use J2ME mode. J2ME does not have class Cloneable nor Serializable, so we have
  393. to change type assignment to not refer to those classes.
  394. </long_desc>
  395. </boolopt>
  396. <stropt>
  397. <name>Main Class</name>
  398. <alias>main-class</alias>
  399. <set_arg_label>class</set_arg_label>
  400. <short_desc>Sets the main class for whole-program analysis.</short_desc>
  401. <long_desc>
  402. <p>
  403. By default, the first class encountered with a main method is treated
  404. as the main class (entry point) in whole-program analysis. This option
  405. overrides this default.
  406. </p>
  407. </long_desc>
  408. </stropt>
  409. <boolopt>
  410. <name>Use Polyglot frontend</name>
  411. <alias>polyglot</alias>
  412. <default>false</default>
  413. <short_desc>Use Java 1.4 Polyglot frontend instead of JastAdd</short_desc>
  414. <long_desc>
  415. Use Java 1.4 Polyglot frontend instead of JastAdd, which supports Java 5 syntax.
  416. </long_desc>
  417. </boolopt>
  418. </section>
  419. <section>
  420. <name>Output Options</name>
  421. <stropt>
  422. <name>Output Directory</name>
  423. <alias>d</alias>
  424. <alias>output-dir</alias>
  425. <default>./sootOutput</default>
  426. <set_arg_label>dir</set_arg_label>
  427. <short_desc>Store output files in <use_arg_label/></short_desc>
  428. <long_desc>
  429. Store output files in <use_arg_label/>. <use_arg_label/> may be
  430. relative to the working directory.
  431. </long_desc>
  432. </stropt>
  433. <multiopt>
  434. <name>Output Format</name>
  435. <alias>f</alias>
  436. <alias>output-format</alias>
  437. <set_arg_label>format</set_arg_label>
  438. <short_desc>Set output format for Soot</short_desc>
  439. <long_desc>
  440. <p>
  441. Specify the format of output files Soot should produce, if
  442. any.</p>
  443. <p>
  444. Note that while the abbreviated formats (<tt>jimp</tt>,
  445. <tt>shimp</tt>, <tt>b</tt>, and <tt>grimp</tt>) are easier to
  446. read than their unabbreviated counterparts (<tt>jimple</tt>,
  447. <tt>shimple</tt>, <tt>baf</tt>, and <tt>grimple</tt>), they may
  448. contain ambiguities. Method signatures in the abbreviated
  449. formats, for instance, are not uniquely determined.</p>
  450. </long_desc>
  451. <value>
  452. <name>Jimple File</name>
  453. <alias>J</alias>
  454. <alias>jimple</alias>
  455. <short_desc>Produce <tt>.jimple</tt> Files</short_desc>
  456. <long_desc>
  457. Produce <tt>.jimple</tt> files, which contain a textual
  458. form of Soot's Jimple internal representation.
  459. </long_desc>
  460. </value>
  461. <value>
  462. <name>Jimp File</name>
  463. <alias>j</alias>
  464. <alias>jimp</alias>
  465. <short_desc>Produce <tt>.jimp</tt> (abbreviated Jimple) files</short_desc>
  466. <long_desc>
  467. Produce <tt>.jimp</tt> files, which contain an abbreviated form
  468. of Jimple.
  469. </long_desc>
  470. </value>
  471. <value>
  472. <name>Shimple File</name>
  473. <alias>S</alias>
  474. <alias>shimple</alias>
  475. <short_desc>Produce <tt>.shimple</tt> files</short_desc>
  476. <long_desc>
  477. Produce <tt>.shimple files</tt>, containing a textual form of
  478. Soot's SSA Shimple internal representation. Shimple adds
  479. Phi nodes to Jimple.
  480. </long_desc>
  481. </value>
  482. <value>
  483. <name>Shimp File</name>
  484. <alias>s</alias>
  485. <alias>shimp</alias>
  486. <short_desc>Produce <tt>.shimp</tt> (abbreviated Shimple) files</short_desc>
  487. <long_desc>
  488. Produce .shimp files, which contain an abbreviated form of
  489. Shimple.
  490. </long_desc>
  491. </value>
  492. <value>
  493. <name>Baf File</name>
  494. <alias>B</alias>
  495. <alias>baf</alias>
  496. <short_desc>Produce <tt>.baf</tt> files</short_desc>
  497. <long_desc>
  498. Produce <tt>.baf</tt> files, which contain a textual form of
  499. Soot's Baf internal representation.
  500. </long_desc>
  501. </value>
  502. <value>
  503. <name>Abbreviated Baf File</name>
  504. <alias>b</alias>
  505. <short_desc>Produce <tt>.b</tt> (abbreviated Baf) files</short_desc>
  506. <long_desc>
  507. Produce <tt>.b</tt> files, which contain an abbreviated form of Baf.
  508. </long_desc>
  509. </value>
  510. <value>
  511. <name>Grimp File</name>
  512. <alias>G</alias>
  513. <alias>grimple</alias>
  514. <short_desc>Produce <tt>.grimple</tt> files</short_desc>
  515. <long_desc>
  516. Produce <tt>.grimple</tt> files, which contain a textual
  517. form of Soot's Grimp internal representation.
  518. </long_desc>
  519. </value>
  520. <value>
  521. <name>Abbreviated Grimp File</name>
  522. <alias>g</alias>
  523. <alias>grimp</alias>
  524. <short_desc>Produce <tt>.grimp</tt> (abbreviated Grimp) files</short_desc>
  525. <long_desc>
  526. Produce <tt>.grimp</tt> files, which contain an abbreviated form
  527. of Grimp.
  528. </long_desc>
  529. </value>
  530. <value>
  531. <name>Xml File</name>
  532. <alias>X</alias>
  533. <alias>xml</alias>
  534. <short_desc>Produce <tt>.xml</tt> Files</short_desc>
  535. <long_desc>
  536. Produce <tt>.xml</tt> files containing an annotated
  537. version of the Soot's Jimple internal representation.
  538. </long_desc>
  539. </value>
  540. <value>
  541. <name>No Output File</name>
  542. <alias>n</alias>
  543. <alias>none</alias>
  544. <short_desc>Produce no output</short_desc>
  545. <long_desc>
  546. Produce no output files.
  547. </long_desc>
  548. </value>
  549. <value>
  550. <name>Jasmin File</name>
  551. <alias>jasmin</alias>
  552. <short_desc>Produce <tt>.jasmin</tt> files</short_desc>
  553. <long_desc>
  554. Produce <tt>.jasmin</tt> files, suitable as input to the jasmin
  555. bytecode assembler.
  556. </long_desc>
  557. </value>
  558. <value>
  559. <name>Class File</name>
  560. <alias>c</alias>
  561. <alias>class</alias>
  562. <default/>
  563. <short_desc>Produce <tt>.class</tt> Files</short_desc>
  564. <long_desc>
  565. Produce Java <tt>.class</tt> files, executable by any Java
  566. Virtual Machine.
  567. </long_desc>
  568. </value>
  569. <value>
  570. <name>Dava Decompiled File</name>
  571. <alias>d</alias>
  572. <alias>dava</alias>
  573. <short_desc>Produce dava-decompiled <tt>.java</tt> files</short_desc>
  574. <long_desc>
  575. Produce <tt>.java</tt> files generated by the Dava decompiler.
  576. </long_desc>
  577. </value>
  578. </multiopt>
  579. <boolopt>
  580. <name>Output Jar File</name>
  581. <alias>outjar</alias>
  582. <alias>output-jar</alias>
  583. <short_desc>Make output dir a Jar file instead of dir</short_desc>
  584. <long_desc>
  585. Saves output files into a Jar file instead of a directory. The output
  586. Jar file name should be specified using the Output Directory
  587. (<tt>output-dir</tt>) option. Note that if the output Jar file exists
  588. before Soot runs, any files inside it will first be removed.
  589. </long_desc>
  590. </boolopt>
  591. <boolopt>
  592. <name>Save Tags to XML</name>
  593. <alias>xml-attributes</alias>
  594. <short_desc>Save tags to XML attributes for Eclipse</short_desc>
  595. <long_desc>
  596. Save in XML format a variety of tags which Soot has attached to
  597. its internal representations of the application classes. The XML
  598. file can then be read by the Soot plug-in for the Eclipse IDE,
  599. which can display the annotations together with the program
  600. source, to aid program understanding.
  601. </long_desc>
  602. </boolopt>
  603. <boolopt>
  604. <name>Print Tags in Output</name>
  605. <alias>print-tags</alias>
  606. <alias>print-tags-in-output</alias>
  607. <short_desc>Print tags in output files after stmt</short_desc>
  608. <long_desc>
  609. Print in output files (either in Jimple or Dave) a variety of tags which
  610. Soot has attached to
  611. its internal representations of the application classes. The tags will
  612. be printed on the line succeeding the stmt that they are attached to.
  613. </long_desc>
  614. </boolopt>
  615. <boolopt>
  616. <name>Don't Output Source File Attribute</name>
  617. <alias>no-output-source-file-attribute</alias>
  618. <short_desc>Don't output Source File Attribute when producing class files</short_desc>
  619. <long_desc>
  620. Don't output Source File Attribute when producing class files.
  621. </long_desc>
  622. </boolopt>
  623. <boolopt>
  624. <name>Don't Output Inner Classes Attribute</name>
  625. <alias>no-output-inner-classes-attribute</alias>
  626. <short_desc>Don't output inner classes attribute in class files</short_desc>
  627. <long_desc>
  628. Don't output inner classes attribute in class files.
  629. </long_desc>
  630. </boolopt>
  631. <listopt>
  632. <name>Body Dumping Phases</name>
  633. <alias>dump-body</alias>
  634. <set_arg_label>phaseName</set_arg_label>
  635. <short_desc>Dump the internal representation of each method before and after phase <use_arg_label/></short_desc>
  636. <long_desc>
  637. <p>
  638. Specify that <use_arg_label/> is one of the phases to be dumped.
  639. For example <code>-dump-body jb -dump-body jb.a</code> would dump each
  640. method before and after the <code>jb</code> and <code>jb.a</code>
  641. phases. The pseudo phase name ``<code>ALL</code>''
  642. causes all phases to be dumped.</p>
  643. <p>
  644. Output files appear in subdirectories under the
  645. soot output directory, with names like
  646. <var>className</var><code>/</code><var>methodSignature</var><code>/</code><var>phasename</var><code>-</code><var>graphType</var><code>-</code><var>number</var><code>.in</code>
  647. and
  648. <var>className</var><code>/</code><var>methodSignature</var><code>/</code><var>phasename</var><code>-</code><var>graphType</var><code>-</code><var>number</var><code>.out</code>.
  649. The ``<code>in</code>'' and
  650. ``<code>out</code>'' suffixes distinguish the internal
  651. representations of the method before and after the phase
  652. executed.</p>
  653. </long_desc>
  654. </listopt>
  655. <listopt>
  656. <name>CFG Dumping Phases</name>
  657. <alias>dump-cfg</alias>
  658. <set_arg_label>phaseName</set_arg_label>
  659. <short_desc>Dump the internal representation of each CFG constructed during phase <use_arg_label/></short_desc>
  660. <long_desc>
  661. <p>
  662. Specify that any control flow graphs constructed during the
  663. <use_arg_label/> phases should be dumped.
  664. For example <code>-dump-cfg jb -dump-cfg bb.lso</code> would dump
  665. all
  666. CFGs constructed during the <code>jb</code> and <code>bb.lso</code>
  667. phases. The pseudo phase name ``<code>ALL</code>''
  668. causes CFGs constructed in all phases to be dumped.</p>
  669. <p>The control flow graphs are dumped in the form
  670. of a file containing input to <code>dot</code> graph visualization
  671. tool. Output <code>dot</code> files are stored beneath the soot
  672. output directory, in files with names like:
  673. <var>className</var><code>/</code><var>methodSignature</var><code>/</code><var>phasename</var><code>-</code><var>graphType</var><code>-</code><var>number</var><code>.dot</code>,
  674. where <var>number</var> serves to distinguish graphs in phases
  675. that produce more than one (for example, the Aggregator may
  676. produce multiple <code>ExceptionalUnitGraph</code>s).</p>
  677. </long_desc>
  678. </listopt>
  679. <boolopt>
  680. <name>Show Exception Destinations</name>
  681. <alias>show-exception-dests</alias>
  682. <default>true</default>
  683. <short_desc>Include exception destination edges as well as CFG edges in dumped CFGs</short_desc>
  684. <long_desc>
  685. Indicate whether to show exception destination edges as
  686. well as control flow edges in
  687. dumps of exceptional control flow graphs.
  688. </long_desc>
  689. </boolopt>
  690. <boolopt>
  691. <name>GZipped IR output</name>
  692. <alias>gzip</alias>
  693. <default>false</default>
  694. <short_desc>GZip IR output files</short_desc>
  695. <long_desc>
  696. This option causes Soot to compress output files of intermediate representations
  697. with GZip. It does not apply to class files output by Soot.
  698. </long_desc>
  699. </boolopt>
  700. </section>
  701. <section>
  702. <name>Processing Options</name>
  703. <phaseopt>
  704. <name>Phase Options</name>
  705. <alias>p</alias>
  706. <alias>phase-option</alias>
  707. <set_arg_label>phase opt:val</set_arg_label>
  708. <short_desc>Set <var>phase</var>&apos;s <var>opt</var> option to <var>value</var></short_desc>
  709. <long_desc>
  710. <p>
  711. Set <var>phase</var>'s run-time option named <var>opt</var> to
  712. <var>value</var>.</p>
  713. <p>
  714. This is a mechanism for specifying phase-specific options to
  715. different parts of Soot. See <var>Soot phase options</var> for
  716. details about the available phases and options.</p>
  717. </long_desc>
  718. <phase>
  719. <name>Jimple Body Creation</name>
  720. <alias>jb</alias>
  721. <class>JBOptions</class>
  722. <short_desc>Creates a <tt>JimpleBody</tt> for each method</short_desc>
  723. <long_desc>
  724. Jimple Body Creation creates a <tt>JimpleBody</tt> for each input
  725. method, using either coffi, to read <tt>.class</tt> files, or the
  726. jimple parser, to read <tt>.jimple</tt> files.
  727. </long_desc>
  728. <boolopt>
  729. <name>Enabled</name>
  730. <alias>enabled</alias>
  731. <default>true</default>
  732. <short_desc/>
  733. <long_desc/>
  734. </boolopt>
  735. <boolopt>
  736. <name>Use Original Names</name>
  737. <alias>use-original-names</alias>
  738. <default>false</default>
  739. <short_desc/>
  740. <long_desc>
  741. Retain the original names for local variables when the source
  742. includes those names. Otherwise, Soot gives variables generic
  743. names based on their types.
  744. </long_desc>
  745. </boolopt>
  746. <boolopt>
  747. <name>Preserve source-level annotations</name>
  748. <alias>preserve-source-annotations</alias>
  749. <default>false</default>
  750. <short_desc/>
  751. <long_desc>
  752. Preserves annotations of retention type SOURCE. (for
  753. everything but package and local variable annotations)
  754. </long_desc>
  755. </boolopt>
  756. <sub_phase>
  757. <name>Local Splitter</name>
  758. <alias>jb.ls</alias>
  759. <boolopt>
  760. <name>Enabled</name>
  761. <alias>enabled</alias>
  762. <default>true</default>
  763. </boolopt>
  764. <short_desc>Local splitter: one local per DU-UD web</short_desc>
  765. <long_desc>
  766. The Local Splitter identifies DU-UD webs for local variables and
  767. introduces new variables so that each disjoint web is associated
  768. with a single local.
  769. </long_desc>
  770. </sub_phase>
  771. <sub_phase>
  772. <name>Jimple Local Aggregator</name>
  773. <alias>jb.a</alias>
  774. <short_desc>Aggregator: removes some unnecessary copies</short_desc>
  775. <long_desc>
  776. <p>
  777. The Jimple Local Aggregator removes some unnecessary copies by
  778. combining local variables. Essentially, it finds definitions
  779. which have only a single use and, if it is safe to do so, removes
  780. the original definition after replacing the use with the
  781. definition's right-hand side.</p>
  782. <p>
  783. At this stage in <tt>JimpleBody</tt> construction, local
  784. aggregation serves largely to remove the copies to and from stack
  785. variables which simulate load and store instructions in the
  786. original bytecode.</p>
  787. </long_desc>
  788. <boolopt>
  789. <name>Enabled</name>
  790. <alias>enabled</alias>
  791. <default>true</default>
  792. </boolopt>
  793. <boolopt>
  794. <name>Only Stack Locals</name>
  795. <alias>only-stack-locals</alias>
  796. <long_desc>
  797. Only aggregate locals that represent stack locations in the
  798. original bytecode. (Stack locals can be distinguished in Jimple
  799. by the <dollar/> character with which their names begin.)
  800. </long_desc>
  801. <default>true</default>
  802. </boolopt>
  803. </sub_phase>
  804. <sub_phase>
  805. <name>Unused Local Eliminator</name>
  806. <alias>jb.ule</alias>
  807. <short_desc>Unused local eliminator</short_desc>
  808. <long_desc>
  809. The Unused Local Eliminator removes any unused locals from the
  810. method.
  811. </long_desc>
  812. <boolopt>
  813. <name>Enabled</name>
  814. <alias>enabled</alias>
  815. <default>true</default>
  816. </boolopt>
  817. </sub_phase>
  818. <sub_phase>
  819. <short_desc>Assigns types to locals</short_desc>
  820. <long_desc>
  821. The Type Assigner gives local variables types which will
  822. accommodate the values stored in them over the course of the
  823. method.
  824. </long_desc>
  825. <name>Type Assigner</name>
  826. <class>JBTROptions</class>
  827. <alias>jb.tr</alias>
  828. <boolopt>
  829. <name>Enabled</name>
  830. <alias>enabled</alias>
  831. <default>true</default>
  832. </boolopt>
  833. <boolopt>
  834. <name>Ignore wrong static-ness</name>
  835. <alias>ignore-wrong-staticness</alias>
  836. <default>false</default>
  837. <short_desc>Ignores errors due to wrong staticness</short_desc>
  838. <long_desc>
  839. Some projects have been shown to contain invalid bytecode that tries to access
  840. a static field or method in a non-static way or the other way around. The VM's bytecode
  841. verifier will reject such bytecode when loaded into the VM. This option, when enabled,
  842. causes to create Jimple bodies in such cases nontheless, ignoring the error.
  843. </long_desc>
  844. </boolopt>
  845. <boolopt>
  846. <name>Use older type assigner</name>
  847. <alias>use-older-type-assigner</alias>
  848. <default>false</default>
  849. <short_desc>Enables the older type assigner</short_desc>
  850. <long_desc>
  851. This enables the older type assigner that was in use until May 2008.
  852. The current type assigner is a reimplementation by Ben Bellamy
  853. that uses an entirely new and faster algorithm which always assigns
  854. the most narrow type possible. If compare-type-assigners is on,
  855. this option causes the older type assigner to execute first.
  856. (Otherwise the newer one is executed first.)
  857. </long_desc>
  858. </boolopt>
  859. <boolopt>
  860. <name>Compare type assigners</name>
  861. <alias>compare-type-assigners</alias>
  862. <default>false</default>
  863. <short_desc>Compares Ben Bellamy's and the older type assigner</short_desc>
  864. <long_desc>
  865. Enables comparison (both runtime and results) of Ben Bellamy's type assigner with the
  866. older type assigner that was in Soot.
  867. </long_desc>
  868. </boolopt>
  869. </sub_phase>
  870. <sub_phase>
  871. <name>Unsplit-originals Local Packer</name>
  872. <alias>jb.ulp</alias>
  873. <short_desc>Local packer: minimizes number of locals</short_desc>
  874. <long_desc>
  875. The Unsplit-originals Local Packer executes only when the
  876. `<tt>use-original-names</tt>&apos; option is chosen for the
  877. `<tt>jb</tt>&apos; phase. The Local Packer attempts to minimize
  878. the number of local variables required in a method by reusing the
  879. same variable for disjoint DU-UD webs. Conceptually, it is the
  880. inverse of the Local Splitter.
  881. </long_desc>
  882. <boolopt>
  883. <name>Enabled</name>
  884. <alias>enabled</alias>
  885. <default>true</default>
  886. <short_desc/>
  887. <long_desc/>
  888. </boolopt>
  889. <boolopt>
  890. <name>Unsplit Original Locals</name>
  891. <alias>unsplit-original-locals</alias>
  892. <default>true</default>
  893. <short_desc/>
  894. <long_desc>
  895. Use the variable names in the original source as a guide when
  896. determining how to share local variables among non-interfering
  897. variable usages. This recombines named locals which were split by
  898. the Local Splitter.
  899. </long_desc>
  900. </boolopt>
  901. </sub_phase>
  902. <sub_phase>
  903. <name>Local Name Standardizer</name>
  904. <alias>jb.lns</alias>
  905. <short_desc>Local name standardizer</short_desc>
  906. <long_desc>
  907. The Local Name Standardizer assigns generic names to local variables.
  908. </long_desc>
  909. <boolopt>
  910. <name>Enabled</name>
  911. <alias>enabled</alias>
  912. <default>true</default>
  913. <short_desc/>
  914. <long_desc/>
  915. </boolopt>
  916. <boolopt>
  917. <name>Only Stack Locals</name>
  918. <alias>only-stack-locals</alias>
  919. <default>false</default>
  920. <short_desc/>
  921. <long_desc>
  922. Only standardizes the names of variables that represent stack
  923. locations in the original bytecode. This becomes the default when
  924. the `<tt>use-original-names</tt>&apos; option is specified for
  925. the `<tt>jb</tt>&apos; phase.
  926. </long_desc>
  927. </boolopt>
  928. </sub_phase>
  929. <sub_phase>
  930. <name>Copy Propagator</name>
  931. <alias>jb.cp</alias>
  932. <short_desc>Copy propagator</short_desc>
  933. <long_desc>
  934. This phase performs cascaded copy propagation.
  935. If the propagator encounters situations of the form:
  936. <pre>
  937. A: a = ...;
  938. ...
  939. B: x = a;
  940. ...
  941. C: ... = ... x;
  942. </pre>
  943. where <tt>a</tt> and <tt>x</tt> are each defined only once (at
  944. <tt>A</tt> and <tt>B</tt>, respectively), then it can propagate
  945. immediately without checking between <tt>B</tt> and <tt>C</tt>
  946. for redefinitions of <tt>a</tt>. In
  947. this case the propagator is global.
  948. Otherwise, if <tt>a</tt> has multiple definitions then the
  949. propagator checks for redefinitions and propagates copies
  950. only within extended basic blocks.
  951. </long_desc>
  952. <boolopt>
  953. <name>Enabled</name>
  954. <alias>enabled</alias>
  955. <default>true</default>
  956. <short_desc/>
  957. <long_desc/>
  958. </boolopt>
  959. <boolopt>
  960. <name>Only Regular Locals</name>
  961. <alias>only-regular-locals</alias>
  962. <default>false</default>
  963. <short_desc/>
  964. <long_desc>
  965. Only propagate copies through ``regular&apos;&apos; locals, that is,
  966. those declared in the source bytecode.
  967. </long_desc>
  968. </boolopt>
  969. <boolopt>
  970. <name>Only Stack Locals</name>
  971. <alias>only-stack-locals</alias>
  972. <default>true</default>
  973. <short_desc/>
  974. <long_desc>
  975. Only propagate copies through locals that represent stack locations in
  976. the original bytecode.
  977. </long_desc>
  978. </boolopt>
  979. </sub_phase>
  980. <sub_phase>
  981. <name>Dead Assignment Eliminator</name>
  982. <alias>jb.dae</alias>
  983. <short_desc>Dead assignment eliminator</short_desc>
  984. <long_desc>
  985. The Dead Assignment Eliminator eliminates assignment statements
  986. to locals whose values are not subsequently used, unless
  987. evaluating the right-hand side of the assignment may cause
  988. side-effects.
  989. </long_desc>
  990. <boolopt>
  991. <name>Enabled</name>
  992. <alias>enabled</alias>
  993. <default>true</default>
  994. <short_desc/>
  995. <long_desc/>
  996. </boolopt>
  997. <boolopt>
  998. <name>Only Stack Locals</name>
  999. <alias>only-stack-locals</alias>
  1000. <default>true</default>
  1001. <short_desc/>
  1002. <long_desc>
  1003. Only eliminate dead assignments to locals that represent stack
  1004. locations in the original bytecode.
  1005. </long_desc>
  1006. </boolopt>
  1007. </sub_phase>
  1008. <sub_phase>
  1009. <name>Post-copy propagation Unused Local Eliminator</name>
  1010. <alias>jb.cp-ule</alias>
  1011. <short_desc>Post-copy propagation unused local eliminator</short_desc>
  1012. <long_desc>
  1013. This phase removes any locals that are unused after copy propagation.
  1014. </long_desc>
  1015. <boolopt>
  1016. <name>Enabled</name>
  1017. <alias>enabled</alias>
  1018. <default>true</default>
  1019. </boolopt>
  1020. </sub_phase>
  1021. <sub_phase>
  1022. <name>Local Packer</name>
  1023. <alias>jb.lp</alias>
  1024. <short_desc>Local packer: minimizes number of locals</short_desc>
  1025. <long_desc>
  1026. The Local Packer attempts to minimize the number of local
  1027. variables required in a method by reusing the same variable for
  1028. disjoint DU-UD webs. Conceptually, it is the inverse of the
  1029. Local Splitter.
  1030. </long_desc>
  1031. <boolopt>
  1032. <name>Enabled</name>
  1033. <alias>enabled</alias>
  1034. <default>false</default>
  1035. </boolopt>
  1036. <boolopt>
  1037. <name>Unsplit Original Locals</name>
  1038. <alias>unsplit-original-locals</alias>
  1039. <default>false</default>
  1040. <long_desc>
  1041. Use the variable names in the original source as a guide when
  1042. determining how to share local variables across non-interfering
  1043. variable usages. This recombines named locals which were split by
  1044. the Local Splitter.
  1045. </long_desc>
  1046. </boolopt>
  1047. </sub_phase>
  1048. <sub_phase>
  1049. <name>Nop Eliminator</name>
  1050. <alias>jb.ne</alias>
  1051. <short_desc>Nop eliminator</short_desc>
  1052. <long_desc>
  1053. The Nop Eliminator removes <tt>nop</tt> statements from the method.
  1054. </long_desc>
  1055. <boolopt>
  1056. <name>Enabled</name>
  1057. <alias>enabled</alias>
  1058. <default>true</default>
  1059. </boolopt>
  1060. </sub_phase>
  1061. <sub_phase>
  1062. <name>Unreachable Code Eliminator</name>
  1063. <alias>jb.uce</alias>
  1064. <short_desc>Unreachable code eliminator</short_desc>
  1065. <long_desc>
  1066. The Unreachable Code Eliminator removes unreachable code and
  1067. traps whose catch blocks are empty.
  1068. </long_desc>
  1069. <boolopt>
  1070. <name>Enabled</name>
  1071. <alias>enabled</alias>
  1072. <default>true</default>
  1073. </boolopt>
  1074. <boolopt>
  1075. <name>Remove unreachable traps</name>
  1076. <alias>remove-unreachable-traps</alias>
  1077. <default>false</default>
  1078. <long_desc>
  1079. Remove exception table entries when none of the protected instructions can
  1080. throw the exception being caught.
  1081. </long_desc>
  1082. </boolopt>
  1083. </sub_phase>
  1084. <sub_phase>
  1085. <name>Trap Tightener</name>
  1086. <alias>jb.tt</alias>
  1087. <short_desc>Trap Tightener</short_desc>
  1088. <long_desc>
  1089. The Trap Tightener changes the area protected by each exception handler,
  1090. so that it begins with the first instruction in the old protected
  1091. area which is actually capable of throwing an exception caught by the
  1092. handler, and ends just after the last instruction in the old
  1093. protected area which can throw an exception caught by the
  1094. handler. This reduces the chance of producing unverifiable code
  1095. as a byproduct of pruning exceptional control flow within CFGs.
  1096. </long_desc>
  1097. <boolopt>
  1098. <name>Enabled</name>
  1099. <alias>enabled</alias>
  1100. <default>false</default>
  1101. </boolopt>
  1102. </sub_phase>
  1103. </phase>
  1104. <phase>
  1105. <name>Java To Jimple Body Creation</name>
  1106. <alias>jj</alias>
  1107. <class>JJOptions</class>
  1108. <short_desc>Creates a <tt>JimpleBody</tt> for each method directly from source</short_desc>
  1109. <long_desc>
  1110. Jimple Body Creation creates a <tt>JimpleBody</tt> for each input
  1111. method, using polyglot, to read <tt>.java</tt> files.
  1112. </long_desc>
  1113. <boolopt>
  1114. <name>Enabled</name>
  1115. <alias>enabled</alias>
  1116. <default>true</default>
  1117. <short_desc/>
  1118. <long_desc/>
  1119. </boolopt>
  1120. <boolopt>
  1121. <name>Use Original Names</name>
  1122. <alias>use-original-names</alias>
  1123. <default>true</default>
  1124. <short_desc/>
  1125. <long_desc>
  1126. Retain the original names for local variables when the source
  1127. includes those names. Otherwise, Soot gives variables generic
  1128. names based on their types.
  1129. </long_desc>
  1130. </boolopt>
  1131. <sub_phase>
  1132. <name>Local Splitter</name>
  1133. <alias>jj.ls</alias>
  1134. <boolopt>
  1135. <name>Enabled</name>
  1136. <alias>enabled</alias>
  1137. <default>false</default>
  1138. </boolopt>
  1139. <short_desc>Local splitter: one local per DU-UD web</short_desc>
  1140. <long_desc>
  1141. The Local Splitter identifies DU-UD webs for local variables and
  1142. introduces new variables so that each disjoint web is associated
  1143. with a single local.
  1144. </long_desc>
  1145. </sub_phase>
  1146. <sub_phase>
  1147. <name>Jimple Local Aggregator</name>
  1148. <alias>jj.a</alias>
  1149. <short_desc>Aggregator: removes some unnecessary copies</short_desc>
  1150. <long_desc>
  1151. <p>
  1152. The Jimple Local Aggregator removes some unnecessary copies by
  1153. combining local variables. Essentially, it finds definitions
  1154. which have only a single use and, if it is safe to do so, removes
  1155. the original definition after replacing the use with the
  1156. definition's right-hand side.</p>
  1157. <p>
  1158. At this stage in <tt>JimpleBody</tt> construction, local
  1159. aggregation serves largely to remove the copies to and from stack
  1160. variables which simulate load and store instructions in the
  1161. original bytecode.</p>
  1162. </long_desc>
  1163. <boolopt>
  1164. <name>Enabled</name>
  1165. <alias>enabled</alias>
  1166. <default>true</default>
  1167. </boolopt>
  1168. <boolopt>
  1169. <name>Only Stack Locals</name>
  1170. <alias>only-stack-locals</alias>
  1171. <long_desc>
  1172. Only aggregate locals that represent stack locations in the
  1173. original bytecode. (Stack locals can be distinguished in Jimple
  1174. by the <dollar/> character with which their names begin.)
  1175. </long_desc>
  1176. <default>true</default>
  1177. </boolopt>
  1178. </sub_phase>
  1179. <sub_phase>
  1180. <name>Unused Local Eliminator</name>
  1181. <alias>jj.ule</alias>
  1182. <short_desc>Unused local eliminator</short_desc>
  1183. <long_desc>
  1184. The Unused Local Eliminator removes any unused locals from the
  1185. method.
  1186. </long_desc>
  1187. <boolopt>
  1188. <name>Enabled</name>
  1189. <alias>enabled</alias>
  1190. <default>true</default>
  1191. </boolopt>
  1192. </sub_phase>
  1193. <sub_phase>
  1194. <short_desc>Assigns types to locals</short_desc>
  1195. <long_desc>
  1196. The Type Assigner gives local variables types which will
  1197. accommodate the values stored in them over the course of the
  1198. method.
  1199. </long_desc>
  1200. <name>Type Assigner</name>
  1201. <alias>jj.tr</alias>
  1202. <boolopt>
  1203. <name>Enabled</name>
  1204. <alias>enabled</alias>
  1205. <default>false</default>
  1206. </boolopt>
  1207. </sub_phase>
  1208. <sub_phase>
  1209. <name>Unsplit-originals Local Packer</name>
  1210. <alias>jj.ulp</alias>
  1211. <short_desc>Local packer: minimizes number of locals</short_desc>
  1212. <long_desc>
  1213. The Unsplit-originals Local Packer executes only when the
  1214. `<tt>use-original-names</tt>&apos; option is chosen for the
  1215. `<tt>jb</tt>&apos; phase. The Local Packer attempts to minimize
  1216. the number of local variables required in a method by reusing the
  1217. same variable for disjoint DU-UD webs. Conceptually, it is the
  1218. inverse of the Local Splitter.
  1219. </long_desc>
  1220. <boolopt>
  1221. <name>Enabled</name>
  1222. <alias>enabled</alias>
  1223. <default>false</default>
  1224. <short_desc/>
  1225. <long_desc/>
  1226. </boolopt>
  1227. <boolopt>
  1228. <name>Unsplit Original Locals</name>
  1229. <alias>unsplit-original-locals</alias>
  1230. <default>false</default>
  1231. <short_desc/>
  1232. <long_desc>
  1233. Use the variable names in the original source as a guide when
  1234. determining how to share local variables among non-interfering
  1235. variable usages. This recombines named locals which were split by
  1236. the Local Splitter.
  1237. </long_desc>
  1238. </boolopt>
  1239. </sub_phase>
  1240. <sub_phase>
  1241. <name>Local Name Standardizer</name>
  1242. <alias>jj.lns</alias>
  1243. <short_desc>Local name standardizer</short_desc>
  1244. <long_desc>
  1245. The Local Name Standardizer assigns generic names to local variables.
  1246. </long_desc>
  1247. <boolopt>
  1248. <name>Enabled</name>
  1249. <alias>enabled</alias>
  1250. <default>true</default>
  1251. <short_desc/>
  1252. <long_desc/>
  1253. </boolopt>
  1254. <boolopt>
  1255. <name>Only Stack Locals</name>
  1256. <alias>only-stack-locals</alias>
  1257. <default>false</default>
  1258. <short_desc/>
  1259. <long_desc>
  1260. Only standardizes the names of variables that represent stack
  1261. locations in the original bytecode. This becomes the default when
  1262. the `<tt>use-original-names</tt>&apos; option is specified for
  1263. the `<tt>jb</tt>&apos; phase.
  1264. </long_desc>
  1265. </boolopt>
  1266. </sub_phase>
  1267. <sub_phase>
  1268. <name>Copy Propagator</name>
  1269. <alias>jj.cp</alias>
  1270. <short_desc>Copy propagator</short_desc>
  1271. <long_desc>
  1272. This phase performs cascaded copy propagation.
  1273. If the propagator encounters situations of the form:
  1274. <pre>
  1275. A: a = ...;
  1276. ...
  1277. B: x = a;
  1278. ...
  1279. C: ... = ... x;
  1280. </pre>
  1281. where <tt>a</tt> and <tt>x</tt> are each defined only once (at
  1282. <tt>A</tt> and <tt>B</tt>, respectively), then it can propagate
  1283. immediately without checking between <tt>B</tt> and <tt>C</tt>
  1284. for redefinitions of <tt>a</tt>. In
  1285. this case the propagator is global.
  1286. Otherwise, if <tt>a</tt> has multiple definitions then the
  1287. propagator checks for redefinitions and propagates copies
  1288. only within extended basic blocks.
  1289. </long_desc>
  1290. <boolopt>
  1291. <name>Enabled</name>
  1292. <alias>enabled</alias>
  1293. <default>true</default>
  1294. <short_desc/>
  1295. <long_desc/>
  1296. </boolopt>
  1297. <boolopt>
  1298. <name>Only Regular Locals</name>
  1299. <alias>only-regular-locals</alias>
  1300. <default>false</default>
  1301. <short_desc/>
  1302. <long_desc>
  1303. Only propagate copies through ``regular&apos;&apos; locals, that is,
  1304. those declared in the source bytecode.
  1305. </long_desc>
  1306. </boolopt>
  1307. <boolopt>
  1308. <name>Only Stack Locals</name>
  1309. <alias>only-stack-locals</alias>
  1310. <default>true</default>
  1311. <short_desc/>
  1312. <long_desc>
  1313. Only propagate copies through locals that represent stack locations in
  1314. the original bytecode.
  1315. </long_desc>
  1316. </boolopt>
  1317. </sub_phase>
  1318. <sub_phase>
  1319. <name>Dead Assignment Eliminator</name>
  1320. <alias>jj.dae</alias>
  1321. <short_desc>Dead assignment eliminator</short_desc>
  1322. <long_desc>
  1323. The Dead Assignment Eliminator eliminates assignment statements
  1324. to locals whose values are not subsequently used, unless
  1325. evaluating the right-hand side of the assignment may cause
  1326. side-effects.
  1327. </long_desc>
  1328. <boolopt>
  1329. <name>Enabled</name>
  1330. <alias>enabled</alias>
  1331. <default>true</default>
  1332. <short_desc/>
  1333. <long_desc/>
  1334. </boolopt>
  1335. <boolopt>
  1336. <name>Only Stack Locals</name>
  1337. <alias>only-stack-locals</alias>
  1338. <default>true</default>
  1339. <short_desc/>
  1340. <long_desc>
  1341. Only eliminate dead assignments to locals that represent stack
  1342. locations in the original bytecode.
  1343. </long_desc>
  1344. </boolopt>
  1345. </sub_phase>
  1346. <sub_phase>
  1347. <name>Post-copy propagation Unused Local Eliminator</name>
  1348. <alias>jj.cp-ule</alias>
  1349. <short_desc>Post-copy propagation unused local eliminator</short_desc>
  1350. <long_desc>
  1351. This phase removes any locals that are unused after copy propagation.
  1352. </long_desc>
  1353. <boolopt>
  1354. <name>Enabled</name>
  1355. <alias>enabled</alias>
  1356. <default>true</default>
  1357. </boolopt>
  1358. </sub_phase>
  1359. <sub_phase>
  1360. <name>Local Packer</name>
  1361. <alias>jj.lp</alias>
  1362. <short_desc>Local packer: minimizes number of locals</short_desc>
  1363. <long_desc>
  1364. The Local Packer attempts to minimize the number of local
  1365. variables required in a method by reusing the same variable for
  1366. disjoint DU-UD webs. Conceptually, it is the inverse of the
  1367. Local Splitter.
  1368. </long_desc>
  1369. <boolopt>
  1370. <name>Enabled</name>
  1371. <alias>enabled</alias>
  1372. <default>false</default>
  1373. </boolopt>
  1374. <boolopt>
  1375. <name>Unsplit Original Locals</name>
  1376. <alias>unsplit-original-locals</alias>
  1377. <default>false</default>
  1378. <long_desc>
  1379. Use the variable names in the original source as a guide when
  1380. determining how to share local variables across non-interfering
  1381. variable usages. This recombines named locals which were split by
  1382. the Local Splitter.
  1383. </long_desc>
  1384. </boolopt>
  1385. </sub_phase>
  1386. <sub_phase>
  1387. <name>Nop Eliminator</name>
  1388. <alias>jj.ne</alias>
  1389. <short_desc>Nop eliminator</short_desc>
  1390. <long_desc>
  1391. The Nop Eliminator removes <tt>nop</tt> statements from the method.
  1392. </long_desc>
  1393. <boolopt>
  1394. <name>Enabled</name>
  1395. <alias>enabled</alias>
  1396. <default>true</default>
  1397. </boolopt>
  1398. </sub_phase>
  1399. <sub_phase>
  1400. <name>Unreachable Code Eliminator</name>
  1401. <alias>jj.uce</alias>
  1402. <short_desc>Unreachable code eliminator</short_desc>
  1403. <long_desc>
  1404. The Unreachable Code Eliminator removes unreachable code and
  1405. traps whose catch blocks are empty.
  1406. </long_desc>
  1407. <boolopt>
  1408. <name>Enabled</name>
  1409. <alias>enabled</alias>
  1410. <default>true</default>
  1411. </boolopt>
  1412. </sub_phase>
  1413. </phase>
  1414. <radio_phase>
  1415. <name>Call Graph Constructor</name>
  1416. <alias>cg</alias>
  1417. <class>CGOptions</class>
  1418. <short_desc>Call graph constructor</short_desc>
  1419. <long_desc>
  1420. The Call Grap

Large files files are truncated, but you can click here to view the full file