Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill Williams
What is Componentization? Software Project Public Interface Neat Idea Deconstruction of Dyninst 2
Software Project Neat Idea What is Componentization? Public Interface Component Public Interface Component Deconstruction of Dyninst 3
Why Components? Expose existing functionality Build new tools easily Orthogonality Testability Improved code quality Deconstruction of Dyninst 4
Dyninst and the Components AST Binary Process Stackwalker API Stackwalker API Patch API Patch API Symtab API Symtab API DataFlow API DataFlow API Instruction API Parse API Parse API Code Gen Code Gen ProcControl API Binary = Existing Component = New Component = Proposed DyninstAPI
ParseAPI: Defining the component Block Edge Function Cached register liveness info Instrumentability InstPoints Dyninst CFG model Deconstruction of Dyninst 6
ParseAPI: Defining the component Block Edge Function Cached register liveness info Instrumentability InstPoints Dyninst extensionsParseAPI CFG model Deconstruction of Dyninst 7
PatchAPI: Refine your assumptions Deconstruction of Dyninst 8 PatchAPI Dyninst Paradyn
SymtabAPI: Creating good abstractions …hiding messy internals Great interface… Deconstruction of Dyninst 9 ELF PE XCOFF
InstructionAPI: Adding missing features Old: Control flow and not much else Deconstruction of Dyninst 10
InstructionAPI: Adding missing features New: control flow and data flow Deconstruction of Dyninst 11
ProcControlAPI: Build one to throw away Too many features, and I don’t need all of them! Deconstruction of Dyninst 12
ProcControlAPI: Build one to throw away Ah, something that just does what I need! Deconstruction of Dyninst 13
Stackwalker: When customers attack Dyninst requirements Call Stack Frame type Normal Optimized Signal handler Instrumentation Location 3 rd party Platform Linux Windows Solaris AIX Call Stack Frame type Normal Optimized Signal handler Location 1 st party 3 rd party Platform Linux BlueGene STAT requirements Deconstruction of Dyninst 14
DataflowAPI: Cool isn’t enough Customers: the difference between a module and a component Deconstruction of Dyninst 15
What we’ve learned Internal and external users driving interface design Test new interfaces Change code incrementally Keep your project’s details where they belong Deconstruction of Dyninst 16
Componentization Tradeoffs Stability vs. improvement Internal requirements vs. external requirements Development time vs. scope Structured vs. organic Early feedback vs. interface stability Deconstruction of Dyninst 17