From owner-freebsd-arch@FreeBSD.ORG Wed Sep 5 15:28:14 2012 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6535E106566C for ; Wed, 5 Sep 2012 15:28:14 +0000 (UTC) (envelope-from jonathan.robert.anderson@gmail.com) Received: from mail-ob0-f182.google.com (mail-ob0-f182.google.com [209.85.214.182]) by mx1.freebsd.org (Postfix) with ESMTP id 2007F8FC08 for ; Wed, 5 Sep 2012 15:28:13 +0000 (UTC) Received: by obbun3 with SMTP id un3so543749obb.13 for ; Wed, 05 Sep 2012 08:28:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:content-type; bh=AOLr3z5JgipOIdrXA12w0NxQC1zSV+6k+XXrD61BFXs=; b=N8OQxYnHhB9ITH0Zv1JLCAzlOMFbN3qN0vE+e3PKnozFvOHUQmpX7d0v58m7fke3gt amaq/rexl8H2IhgZDbSAovaCu1sL4R0TinZxzi2LjViZ71qsYaEN/W1re8pHeO7m24QN 7yx01QPBUADmh9J4RjSUJToGqLN14qbUMdudcK9qUMKnR7xIsIJCGzj38uebDuh6T4em v5z6MBwbiG4aCPtudKOB7Ps6HHHtPeinlOJg3piecsj3QDoku3AMS+vg2hrVxc4UO+qZ CKBxkqLnI56Nvbmc/hykbF4GZLJ6kfOUzXr6PcHBuLtzvqo+Z1kwCN8AvEen0h7Vyoec na9Q== MIME-Version: 1.0 Received: by 10.60.0.161 with SMTP id 1mr17957162oef.83.1346858893504; Wed, 05 Sep 2012 08:28:13 -0700 (PDT) Sender: jonathan.robert.anderson@gmail.com Received: by 10.60.24.164 with HTTP; Wed, 5 Sep 2012 08:28:13 -0700 (PDT) Date: Wed, 5 Sep 2012 16:28:13 +0100 X-Google-Sender-Auth: lNhTu3zbd32ryu1QqaSzlrHJl-E Message-ID: From: Jonathan Anderson To: freebsd-arch@freebsd.org Content-Type: multipart/mixed; boundary=e89a8fb1ffc2e8f05c04c8f605cf Subject: Call graphs with bsd.obj.mk X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 05 Sep 2012 15:28:14 -0000 --e89a8fb1ffc2e8f05c04c8f605cf Content-Type: text/plain; charset=UTF-8 Hi all, While doing some hacking recently, I really wanted a call graph. Clang and LLVM make this pretty easy, assuming you have the right CFLAGS, so a little build system integration seemed to be in order. I did this, it's pretty small and modular, and I find it useful, so I'm sharing this work with the list in the hope of putting it into -CURRENT. I've attached two BSD makefiles that let me produce call graphs from any directory that includes bsd.obj.mk (which notably includes binaries and libraries in src): - bsd.analysis.mk contains a 'callgraph' target that produces ${.OBJDIR}/_callgraph_.dot - bsd.llvm.mk contains a few LLVM helpers (e.g. to generate LLVM IR) If you have clang, llvm-link and opt installed, this allows you to generate a complete call graph for C code; assembler files are ignored because we don't currently have assembly -> IR transformations. The resulting graph can be pretty large and ugly (e.g. LLVM shows an "external node" pseudo-function that calls everything), but it can be filtered with scripts like those found at https://github.com/trombonehero/dot-tools to produce really useful graphs. llvm-link and opt aren't included in the bootstrap tools, so I'm currently doing this by installing the llvm-devel package. Perhaps we might copy llvm-link and opt over to /usr/obj/usr/src/tmp, possibly governed by a WITH_LLVM_TOOLS flag in src.conf or something? Jon -- Jonathan Anderson jonathan@FreeBSD.org http://freebsd.org/~jonathan/ --e89a8fb1ffc2e8f05c04c8f605cf Content-Type: application/octet-stream; name="bsd.analysis.mk" Content-Disposition: attachment; filename="bsd.analysis.mk" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h6qkstw70 IyAkRnJlZUJTRCQKIwojIFRoZSBpbmNsdWRlIGZpbGUgPGJzZC5hbmFseXNpcy5taz4gcHJvdmlk ZXMgc291cmNlIGNvZGUgYW5hbHlzaXMgdG9vbHMgbGlrZQojIEMgY2FsbCBncmFwaHMuCiMKIyAr KysgdGFyZ2V0cyArKysKIwojCWNhbGxncmFwaDoKIwkJR2VuZXJhdGUgYSBHcmFwaFZpeiAuZG90 IGZpbGUgaW4gJHsuT0JKRElSfS9fY2FsbGdyYXBoXy5kb3QgY29udGFpbmluZwojCQl0aGUgY2Fs bCBncmFwaCBvZiBhbGwgQyAoYW5kIG1heWJlIEMrKykgZnVuY3Rpb25zLgojCiMJCVRoZSByZXN1 bHRpbmcgZ3JhcGggbWF5IGJlIHF1aXRlIGxhcmdlLCBzbyB5b3UgbWF5IGxpa2UgdG8gZmlsdGVy IGl0CiMJCXVzaW5nIHNjcmlwdHMgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vdHJvbWJvbmVoZXJv L2RvdC10b29scy4KIwoKLmluY2x1ZGUgPGJzZC5pbml0Lm1rPgouaW5jbHVkZSA8YnNkLmxsdm0u bWs+CgouU1VGRklYRVM6IC5kb3QKCkRPVEZJTEVTPSAgJHtMTFZNX0JDOlI6Uy8kLy5kb3QvZ30K Q0xFQU5GSUxFUys9ICR7RE9URklMRVN9IF9jYWxsZ3JhcGhfLmRvdCBfY2FsbGdyYXBoXy5iYwoK Y2FsbGdyYXBoOiBfY2FsbGdyYXBoXy5kb3QKCl9jYWxsZ3JhcGhfLmJjOiAke0xMVk1fQkN9Cgls bHZtLWxpbmsgLW8gJEAgJD8KCiMgRXh0cmFjdCBjYWxsIGdyYXBoIGZyb20gTExWTSBJUiAoYmlu YXJ5IC5iYyBvciB0ZXh0dWFsIC5sbCkuCi5iYy5kb3Q6CglvcHQgLWFuYWx5emUgLWRvdC1jYWxs Z3JhcGggJDwKCW12IGNhbGxncmFwaC5kb3QgJEAgICAgICMgTExWTSBjdXJyZW50bHkgaGFyZGNv ZGVzIHRoZSAuZG90IG91dHB1dCBmaWxlCgoubGwuZG90OgoJb3B0IC1hbmFseXplIC1kb3QtY2Fs bGdyYXBoICQ8CgltdiBjYWxsZ3JhcGguZG90ICRAICAgICAjIExMVk0gY3VycmVudGx5IGhhcmRj b2RlcyB0aGUgLmRvdCBvdXRwdXQgZmlsZQoK --e89a8fb1ffc2e8f05c04c8f605cf Content-Type: application/octet-stream; name="bsd.llvm.mk" Content-Disposition: attachment; filename="bsd.llvm.mk" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h6qkstw91 IyAkRnJlZUJTRCQKIwojIFRoZSBpbmNsdWRlIGZpbGUgPGJzZC5sbHZtLm1rPiBoYW5kbGVzIExM Vk0tc3BlY2lmaWMgdGFza3MgbGlrZSBjb21waWxpbmcKIyBDIHRvIExMVk0gSVIuCiMKIyArKysg dGFyZ2V0cyArKysKIwojCWJjOgojCQljb21waWxlIGFsbCBDIHNvdXJjZXMgaW4gJHtTUkNTfSB0 byBiaW5hcnkgTExWTSBJUiBmb3JtYXQKIwojCWlyOgojCQljb21waWxlIGFsbCBDIHNvdXJjZXMg aW4gJHtTUkNTfSB0byB0ZXh0dWFsIExMVk0gSVIgZm9ybWF0CiMKCi5pbmNsdWRlIDxic2QuaW5p dC5taz4KCi5TVUZGSVhFUzogLmMgLmNjIC5jcHAgLmN4eCAuQyAuYmMgLmxsCgojIExMVk0gYnl0 ZWNvZGUgaXMgYSBiaW5hcnkgZm9ybWF0LgpMTFZNX0JDPSAgICAgJHtTUkNTOk4qLmg6TiouUzpS OlMvJC8uYmMvZ30KCiMgTExWTSBJUiBjb250YWlucyB0aGUgc2FtZSBpbmZvcm1hdGlvbiwgYnV0 IGluIGFuIGFzc2VtYmx5LWxpa2UgZm9ybWF0LgpMTFZNX0lSPSAgICAgJHtTUkNTOk4qLmg6Tiou UzpSOlMvJC8ubGwvZ30KCkNMRUFORklMRVMrPSAke0xMVk1fQkN9ICR7TExWTV9JUn0KCiMgQnVp bGQgYWxsIExMVk0gSVIgKGJpbmFyeSAuYmMgb3IgdGV4dHVhbCAubGwpLgpiYzogJHtMTFZNX0JD fQppcjogJHtMTFZNX0lSfQoKIyBDb21waWxlIEMgY29kZSB0byBiaW5hcnkgTExWTSBJUiBieXRl Y29kZS4KLmMuYmM6IHVzaW5nY2xhbmcKLmlmIGRlZmluZWQoUFJPR19DWFgpCgljbGFuZysrIC1j IC1lbWl0LWxsdm0gJHtDRkxBR1N9IC1vICRAICQ8Ci5lbHNlCgljbGFuZyAtYyAtZW1pdC1sbHZt ICR7Q0ZMQUdTfSAtbyAkQCAkPAouZW5kaWYKCiMgQ29tcGlsZSBDIGNvZGUgdG8gdGV4dHVhbCBM TFZNIElSIGZvcm1hdC4KLmMubGw6IHVzaW5nY2xhbmcKLmlmIGRlZmluZWQoUFJPR19DWFgpCglj bGFuZysrIC1TIC1lbWl0LWxsdm0gJHtDRkxBR1N9IC1vICRAICQ8Ci5lbHNlCgljbGFuZyAtUyAt ZW1pdC1sbHZtICR7Q0ZMQUdTfSAtbyAkQCAkPAouZW5kaWYKCiMgRW5zdXJlIHRoYXQgd2UgYXJl IGNvbXBpbGluZyB3aXRoIGNsYW5nLgp1c2luZ2NsYW5nOgouaWYgJHtNS19DTEFOR30gIT0gInll cyIKCUBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PSIKCUBlY2hvICJDIC0+IExMVk0gSVIgY29tcGlsYXRpb24g cmVxdWlyZXMgY2xhbmcuIgoJQGVjaG8gIllvdSBtYXkgd2lzaCB0byBlbmFibGUgV0lUSF9DTEFO RyBpbiAvZXRjL21ha2UuY29uZi4iCglAZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCglAZXhpdCAxCi5lbmRp ZgoK --e89a8fb1ffc2e8f05c04c8f605cf--