31,764 research outputs found

    Slot-based Calling Context Encoding

    Get PDF
    Calling context is widely used in software engineering areas such as profiling, debugging and event logging. It can also enhance some dynamic analysis such as data race detection. To obtain the calling context at runtime, current approaches either perform expensive stack walking to recover contexts or instrument the application and dynamically encode the context into an integer. The current encoding schemes are either not fully precise, or have high instrumentation and detection overhead, and scalability issue for large and highly recursive applications.We propose slot-based calling context encoding (SCCE), which consists of a scalable encoding for acyclic contexts and an efficient encoding for cyclic contexts. Evaluating with CPU 2006 benchmark suite, we show that our acyclic encoding is scalable, has very low instrumentation overhead, and an acceptable detection overhead. We also show that our cyclic encoding also has lower instrumentation and detection overhead than the state-of-the-art approach by significantly reducing the number of bytes pushed and checked for cyclic contexts

    Modular, Fully-abstract Compilation by Approximate Back-translation

    Full text link
    A compiler is fully-abstract if the compilation from source language programs to target language programs reflects and preserves behavioural equivalence. Such compilers have important security benefits, as they limit the power of an attacker interacting with the program in the target language to that of an attacker interacting with the program in the source language. Proving compiler full-abstraction is, however, rather complicated. A common proof technique is based on the back-translation of target-level program contexts to behaviourally-equivalent source-level contexts. However, constructing such a back- translation is problematic when the source language is not strong enough to embed an encoding of the target language. For instance, when compiling from STLC to ULC, the lack of recursive types in the former prevents such a back-translation. We propose a general and elegant solution for this problem. The key insight is that it suffices to construct an approximate back-translation. The approximation is only accurate up to a certain number of steps and conservative beyond that, in the sense that the context generated by the back-translation may diverge when the original would not, but not vice versa. Based on this insight, we describe a general technique for proving compiler full-abstraction and demonstrate it on a compiler from STLC to ULC. The proof uses asymmetric cross-language logical relations and makes innovative use of step-indexing to express the relation between a context and its approximate back-translation. The proof extends easily to common compiler patterns such as modular compilation and it, to the best of our knowledge, it is the first compiler full abstraction proof to have been fully mechanised in Coq. We believe this proof technique can scale to challenging settings and enable simpler, more scalable proofs of compiler full-abstraction

    On abstraction refinement for program analyses in Datalog

    Get PDF
    A central task for a program analysis concerns how to efficiently find a program abstraction that keeps only information relevant for proving properties of interest. We present a new approach for finding such abstractions for program analyses written in Datalog. Our approach is based on counterexample-guided abstraction refinement: when a Datalog analysis run fails using an abstraction, it seeks to generalize the cause of the failure to other abstractions, and pick a new abstraction that avoids a similar failure. Our solution uses a boolean satisfiability formulation that is general, complete, and optimal: it is independent of the Datalog solver, it generalizes the failure of an abstraction to as many other abstractions as possible, and it identifies the cheapest refined abstraction to try next. We show the performance of our approach on a pointer analysis and a typestate analysis, on eight real-world Java benchmark programs

    The CBRB regulon: Promoter dissection reveals novel insights into the CbrAB expression network in Pseudomonas putida

    Get PDF
    CbrAB is a high ranked global regulatory system exclusive of the Pseudomonads that responds to carbon limiting conditions. It has become necessary to define the particular regulon of CbrB and discriminate it from the downstream cascades through other regulatory components. We have performed in vivo binding analysis of CbrB in P. putida and determined that it directly controls the expression of at least 61 genes; 20% involved in regulatory functions, including the previously identified CrcZ and CrcY small regulatory RNAs. The remaining are porines or transporters (20%), metabolic enzymes (16%), activities related to protein translation (5%) and orfs of uncharacterised function (38%). Amongst the later, we have selected the operon PP2810-13 to make an exhaustive analysis of the CbrB binding sequences, together with those of crcZ and crcY. We describe the implication of three independent non-palindromic subsites with a variable spacing in three different targets; CrcZ, CrcY and operon PP2810-13 in the CbrAB activation. CbrB is a quite peculiar σN—depen-dent activator since it is barely dependent on phosphorylation for transcriptional activation. With the depiction of the precise contacts of CbrB with the DNA, the analysis of the multi-merisation status and its dependence on other factors such as RpoN o IHF, we propose a model of transcriptional activation.Ministerio de Economía y Competitividad BIO2014-57545-

    Analysis of Calling Context Encoding and Decoding Algorithms

    Get PDF
    The calling context of a program is recorded via a call stack for event logging, debugging, and profiling. There are several calling context encoding and decoding schemes that record the calling context of a program. One such scheme we are introducing is DCCE, Distinguished Calling Context Encoding; it can encode a program's calling context using a single integer ID without the need to decode it later. Without the need to decode, DCCE has less overhead costs than other popular encoding schemes. Another advantage of DCCE is that it can distinguish between different calling contexts that have the same encoded ID and different ending nodes/functions. We want to compare DCCE with other existing algorithms in terms of running time and measure the improved efficiency overall. This research paper discusses the practical uses of calling context encoding, implementation methods for DCCE, and the efficiency improvements of DCCE compared to CCTLib encoding. Through our experiment, DCCE outperformed CCTLib by over 2 times of overall execution time
    corecore