{"id":5,"date":"2020-08-06T20:38:34","date_gmt":"2020-08-06T12:38:34","guid":{"rendered":"http:\/\/47.108.144.50\/?p=5"},"modified":"2020-08-07T11:17:36","modified_gmt":"2020-08-07T03:17:36","slug":"%e4%bb%a3%e7%a0%81%e4%bf%9d%e6%8a%a41%e4%b9%8b%e7%8e%af%e5%a2%83%e4%bf%9d%e6%8a%a4","status":"publish","type":"post","link":"http:\/\/pareto.fun\/?p=5","title":{"rendered":"\u4ee3\u7801\u4fdd\u62a41\u4e4b\u73af\u5883\u914d\u7f6e"},"content":{"rendered":"\n<p>\u6700\u8fd1\u5e94\u8981\u6c42\u505a\u4ee3\u7801\u4fdd\u62a4\uff0c\u5728\u7f51\u4e0a\u641c\u7d22\u76f8\u5173\u8d44\u6599\uff0c\u627e\u5230\u4e00\u4f4d\u5927\u4f6c\u505a\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u51c6\u5907\u590d\u73b0\u4e00\u904d\uff0c\u5e76\u5728\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u52a0\u4e0a\u81ea\u5df1\u7684\u7406\u89e3\u3002<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">llvm\u548cclang \u7f16\u8bd1\u5b89\u88c5<\/h1>\n\n\n\n<p>clang \u662fgcc\u7684\u66ff\u4ee3\u548c\u5347\u7ea7\uff0cllvm\u8d1f\u8d23\u5904\u7406\u4ee3\u7801\u4f18\u5316\u53ef\u4ee5\u5bf9\u4e2d\u95f4\u4ee3\u7801\u8fdb\u884c\u64cd\u4f5c\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u73af\u5883\uff1a<\/h2>\n\n\n\n<p>ubuntu18 cmake 3.18.0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">clang-10.0\u548cllvm10.0\u5b89\u88c5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b89\u88c5cmake<\/h3>\n\n\n\n<p>cmake\u7684\u7248\u672c\u592a\u4f4e\uff0c\u5c31\u7528\u6e90\u7801\u7f16\u8bd1\u9ad8\u7248\u672c\u7684cmake\u3002==&gt;<a href=\"https:\/\/cmake.org\/download\/\">https:\/\/cmake.org\/download\/<\/a> \u4e0b\u8f7d\u9700\u8981\u7684\u7248\u672c\uff0c\u5177\u4f53\u9700\u8981\u7684\u7248\u672c\u53d6\u51b3\u4f60\u8981\u7f16\u8bd1\u7684llvm\u548cclang\u7684\u7248\u672c<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">tar -xf cmake****<br>.\/bootstrap --prefix=\/usr<br>make &amp;&amp; make install <\/pre>\n\n\n\n<p>\u4e2d\u95f4\u53ef\u80fd\u9047\u5230openssl\u76f8\u5173\u7684\u95ee\u9898,\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u53ef\u4ee5\u89e3\u51b3\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt-get install libssl-dev<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b89\u88c5llvm<\/h3>\n\n\n\n<p>\u8fd8\u662f\u6309\u7167\u5b98\u7f51\u63d0\u4f9b\u7684\u65b9\u6848\u8fdb\u884c\u5b89\u88c5\uff0c\u5b98\u7f51\u4e5f\u63d0\u4f9b\u4e86\u514d\u7f16\u8bd1\u4e0b\u8f7d\u89e3\u538b\u4ee5\u540e\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u7684\u5305\uff0c\u5efa\u8bae\u4e0b\u8f7d\u4e0b\u6765\u76f4\u63a5\u4f7f\u7528\uff0c\u6e90\u7801\u7f16\u8bd1\u8fd8\u662f\u8e29\u4e86\u4e0d\u5c11\u5751\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">git clone https:\/\/github.com\/llvm\/llvm-project.git<br>cd llvm-project<br>mv clang llvm\/tools\/<br>mkdir build<br>cd build<br>cmake -G \"Unix MakeFiles\" -DCMAKE_BUILD_TYPE=Release ..\/llvm<br>make &amp;&amp; make install <\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u7f16\u8bd1\u3001\u52a0\u8f7d\u5355\u72ec\u7684Pass<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u7f16\u5199CMakeLists.txt<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">cmake_minimum_required(VERSION 3.1)<br>project(Skeleton)<br>\u200b<br>set(CMAKE_CXX_STANDARD 14)<br>set(CMAKE_CXX_STANDARD_REQUIRED ON)<br>set(CMAKE_CXX_EXTENSIONS OFF)<br>\u200b<br>\u200b<br>find_package(LLVM REQUIRED CONFIG)<br>add_definitions(${LLVM_DEFINITIONS})<br>include_directories(${LLVM_INCLUDE_DIRS})<br>link_directories(${LLVM_LIBRARY_DIRS})<br>\u200b<br>\u200b<br>add_subdirectory(skeleton)  # Use your pass name here.<br>\u200b<br>set_target_properties(SkeletonPass PROPERTIES COMPILE_FLAGS \"-D__GLIBCXX_USE_CXX11_ABI=0 -fno-rtti\" )<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7f16\u8bd1\uff0c\u52a0\u8f7dso\u6587\u4ef6<\/h2>\n\n\n\n<p>\u4f7f\u7528clang \u6216clang++\u7f16\u8bd1Skeleton.c<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mkdir build<br>cd build<br>cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_CC_COMPILER=clang -DCMAKE_EXPORT_COMPILE_COMMANDS=1  ..<br>make <\/pre>\n\n\n\n<p>\u6d4b\u8bd5\u4ee3\u7801new.cc<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;new&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br>int main(void){<br>    cout &lt;&lt; \"123\" &lt;&lt;endl;<br>    return 0;<br>}<br>\u200b<\/pre>\n\n\n\n<p>\u52a0\u8f7dso ,\u770b\u547d\u4ee4\u884c\u5c31\u53ef\u4ee5\u770b\u51fa\u5404\u6587\u4ef6\u6307\u5411\u5173\u7cfb\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">clang++ -Xclang -load -Xclang ~\/Templates\/llvm-pass-tutorial\/b\/skeleton\/libSkeletonPass.* ~\/Templates\/new.cc <\/pre>\n\n\n\n<p>\u6211\u7684\u7ed3\u679c\u662f\u8fd9\u6837 \uff0c\u5e94\u8be5\u662f\u6210\u529f\u4e86\u7684\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">I saw a function called __cxx_global_var_init!<br>I saw a function called main!<br>I saw a function called _GLOBAL__sub_I_new.cc!<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><a href=\"https:\/\/www.leadroyal.cn\/?p=645\">https:\/\/www.leadroyal.cn\/?p=645<\/a> \u5927\u4f6c\u539f\u6587 <a href=\"https:\/\/www.jianshu.com\/p\/b08b338d0c62\">https:\/\/www.jianshu.com\/p\/b08b338d0c62<\/a> clang\u548cllvm\u89e3\u91ca <a href=\"https:\/\/releases.llvm.org\/7.0.0\/docs\/GettingStarted.html\">https:\/\/releases.llvm.org\/7.0.0\/docs\/GettingStarted.html<\/a> \u5b98\u65b9\u5b89\u88c5\u6587\u6863<\/p><p><a href=\"https:\/\/www.leadroyal.cn\/?p=1014\">https:\/\/www.leadroyal.cn\/?p=1014<\/a> \u89e3\u51b3_ZN4llvm23EnableABIBreakingChecksE<\/p><p><a href=\"https:\/\/quentinmayo.com\/2019\/12\/17\/1-getting-started-by-building-llvm-from-source-late-2019-edition\/\">https:\/\/quentinmayo.com\/2019\/12\/17\/1-getting-started-by-building-llvm-from-source-late-2019-edition\/<\/a><\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>\u6700\u8fd1\u5e94\u8981\u6c42\u505a\u4ee3\u7801\u4fdd\u62a4\uff0c\u5728\u7f51\u4e0a\u641c\u7d22\u76f8\u5173\u8d44\u6599\uff0c\u627e\u5230\u4e00\u4f4d\u5927\u4f6c\u505a\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u51c6\u5907\u590d\u73b0\u4e00\u904d\uff0c\u5e76\u5728\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u52a0\u4e0a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/pareto.fun\/index.php?rest_route=\/wp\/v2\/posts\/5"}],"collection":[{"href":"http:\/\/pareto.fun\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pareto.fun\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pareto.fun\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/pareto.fun\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5"}],"version-history":[{"count":4,"href":"http:\/\/pareto.fun\/index.php?rest_route=\/wp\/v2\/posts\/5\/revisions"}],"predecessor-version":[{"id":13,"href":"http:\/\/pareto.fun\/index.php?rest_route=\/wp\/v2\/posts\/5\/revisions\/13"}],"wp:attachment":[{"href":"http:\/\/pareto.fun\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pareto.fun\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pareto.fun\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}