diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2005-01-11 05:16:23 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2005-01-11 05:16:23 +0000 |
commit | 7fa6d52dda64c950717988c8be2aa32f0314ddda (patch) | |
tree | bb289e668bbeededb63ec88f1a70dca29576ff22 | |
parent | 7c7e9aa590a10a1bb6e7a7babc1d3769fc41a5ea (diff) |
* Add the use of LOADABLE_MODULE=1 in the makefile example
* Change the names of the resulting module to Hello instead of libHello
* Change lib/Debug -> Debug/lib per new makefile implementation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19459 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | docs/WritingAnLLVMPass.html | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/docs/WritingAnLLVMPass.html b/docs/WritingAnLLVMPass.html index e8f00a3cba..239dd67ea7 100644 --- a/docs/WritingAnLLVMPass.html +++ b/docs/WritingAnLLVMPass.html @@ -2,6 +2,7 @@ "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Writing an LLVM Pass</title> <link rel="stylesheet" href="llvm.css" type="text/css"> </head> @@ -169,21 +170,25 @@ source tree in the <tt>lib/Transforms/Hello</tt> directory.</p> LEVEL = ../../.. # Name of the library to build -LIBRARYNAME = hello +LIBRARYNAME = Hello -# Build a dynamically loadable shared object +# Build a dynamically linkable shared object SHARED_LIBRARY = 1 +# Make the shared library become a loadable module so the tools can +# dlopen/dlsym on the resulting library. +LOADABLE_MODULE + # Include the makefile implementation stuff include $(LEVEL)/Makefile.common </pre> <p>This makefile specifies that all of the <tt>.cpp</tt> files in the current directory are to be compiled and linked together into a -<tt>lib/Debug/libhello.so</tt> shared object that can be dynamically loaded by -the <tt>opt</tt> or <tt>analyze</tt> tools. If your operating system uses a -suffix other than .so (such as windows or Mac OS/X), the appropriate extension -will be used.</p> +<tt>Debug/lib/Hello.so</tt> shared object that can be dynamically loaded by +the <tt>opt</tt> or <tt>analyze</tt> tools via their <tt>-load</tt> options. +If your operating system uses a suffix other than .so (such as windows or +Mac OS/X), the appropriate extension will be used.</p> <p>Now that we have the build scripts set up, we just need to write the code for the pass itself.</p> @@ -290,7 +295,7 @@ depending on what it is to be used for. For "optimizations" we use the <p>Now that it's all together, compile the file with a simple "<tt>gmake</tt>" command in the local directory and you should get a new -"<tt>lib/Debug/libhello.so</tt> file. Note that everything in this file is +"<tt>Debug/lib/Hello.so</tt> file. Note that everything in this file is contained in an anonymous namespace: this reflects the fact that passes are self contained units that do not need external interfaces (although they can have them) to be useful.</p> @@ -316,7 +321,7 @@ through our transformation like this (or course, any bytecode file will work):</p> <pre> -$ opt -load ../../../lib/Debug/libhello.so -hello < hello.bc > /dev/null +$ opt -load ../../../Debug/lib/Hello.so -hello < hello.bc > /dev/null Hello: __main Hello: puts Hello: main @@ -333,7 +338,7 @@ interesting way, we just throw away the result of <tt>opt</tt> (sending it to <tt>opt</tt> with the <tt>--help</tt> option:</p> <pre> -$ opt -load ../../../lib/Debug/libhello.so --help +$ opt -load ../../../Debug/lib/Hello.so --help OVERVIEW: llvm .bc -> .bc modular optimizer USAGE: opt [options] <input bytecode> @@ -361,7 +366,7 @@ the execution time of your pass along with the other passes you queue up. For example:</p> <pre> -$ opt -load ../../../lib/Debug/libhello.so -hello -time-passes < hello.bc > /dev/null +$ opt -load ../../../Debug/lib/Hello.so -hello -time-passes < hello.bc > /dev/null Hello: __main Hello: puts Hello: main @@ -1286,7 +1291,7 @@ how our <a href="#basiccode">Hello World</a> pass interacts with other passes. Lets try it out with the <tt>gcse</tt> and <tt>licm</tt> passes:</p> <pre> -$ opt -load ../../../lib/Debug/libhello.so -gcse -licm --debug-pass=Structure < hello.bc > /dev/null +$ opt -load ../../../Debug/lib/Hello.so -gcse -licm --debug-pass=Structure < hello.bc > /dev/null Module Pass Manager Function Pass Manager Dominator Set Construction @@ -1323,7 +1328,7 @@ passes.</p> World</a> pass in between the two passes:</p> <pre> -$ opt -load ../../../lib/Debug/libhello.so -gcse -hello -licm --debug-pass=Structure < hello.bc > /dev/null +$ opt -load ../../../Debug/lib/Hello.so -gcse -hello -licm --debug-pass=Structure < hello.bc > /dev/null Module Pass Manager Function Pass Manager Dominator Set Construction @@ -1364,7 +1369,7 @@ href="#getAnalysisUsage"><tt>getAnalysisUsage</tt></a> method to our pass:</p> <p>Now when we run our pass, we get this output:</p> <pre> -$ opt -load ../../../lib/Debug/libhello.so -gcse -hello -licm --debug-pass=Structure < hello.bc > /dev/null +$ opt -load ../../../Debug/lib/Hello.so -gcse -hello -licm --debug-pass=Structure < hello.bc > /dev/null Pass Arguments: -gcse -hello -licm Module Pass Manager Function Pass Manager |