简而言之,我正在寻找一种方法来编辑开源编译器或优化器,以将传统的锁实现更改为软件跨国内存事务。我有三种目标语言,C,C ++和Java。一种想法可能是使用GCC,因为它现在已经支持stm。问题是,我想不出一种方法来对GCJ转储的Java字节码实施这些更改。对于llvm也会出现相同的问题。
tldr;试图找到像gcc或llvm这样的编译器或优化器,我可以很容易地破解它们以更改源代码或源代码的中间表示形式。
最佳答案
如果您想要一个可以解析和转换C,C ++和Java的工具,则可以考虑使用DMS Software Reengineering Toolkit。
DMS解析语言的源代码,构建AST,允许您对这些AST应用过程或模式直接重写,并可以为修改后的程序重新生成有效的源文本。源代码到源代码的转换比过程转换要容易得多,因为您必须对树的结构了解得少得多,才能导航/修改它。
DMS具有front ends for Java, C, C99, and C++11 all in a variety of dialects,使DMS能够解析和打印这些语言并构造完整的符号表,这对于在代码上进行任何认真的转换绝对是必不可少的。对于C和Java,DMS可以提供control flow, dataflow and call graphs,在许多分析和转换任务中很有用。对于C ++,DMS具有控制流分析和数据流分析。
通过指定作为锁惯用语的模式,然后应用转换将其删除,您应该能够找到“传统”锁实现。