/dev/posts/

Avoiding to clean the stack

Published:

In two previous posts, I looked into cleaning the stack frame of a function before using it by adding assembly at the beginning of each function. This was done either by modifying LLVM with a custom codegen pass or by rewriting the assembly between the compiler and the assembler. The current implementation adds a loop at the beginning of every function. We look at the impact of this modification on the performance on the application.

Read more…

Cleaning the stack by filtering the assembly

Published:

In order to help the SimGridMC state comparison code, I wrote a proof-of-concept LLVM pass which cleans each stack frame before using it. However, SimGridMC currently does not work properly when compiled with clang/LLVM. We can do the same thing by pre-processing the assembly generated by the compiler before passing it to the linker: this is done by inserting a script between the compiler and the assembler. This script will rewrite the generated assembly by prepending stack-cleaning code at the beginning of each function.

Read more…

Cleaning the stack in a LLVM pass

Published:

In the previous episode, we implemented a LLVM pass which does nothing. Now we are trying to modify this to create a (proof-of-concept) LLVM pass which fills the current stack frame with zero before using it.

Read more…

Adding a basic LLVM pass

Published:

The SimGrid model checker uses memory introspection (of the heap, stack and global variables) in order to detect the equality of the state of a distributed application at the different nodes of its execution graph. One difficulty is to deal with uninitialised variables. The uninitialised global variables are usually not a big problem as their initial value is 0. The heap variables are dealt with by memseting to 0 the content of the buffers returned by malloc and friends. The case of uninitialised stack variables is more problematic as their value is whatever was at this place on the stack before. In order to evaluate the impact of those uninitialised variables, we would like to clean each stack frame before using them. This could be done with a LLVM plugin. Here is my first attempt to write a LLVM pass to modify the code of a function.

Read more…

Filtering the clipboard using UNIX filters

Published:

I had a few Joomla posts that I wanted to clean up semi-automatically. Here are a few scripts, to pass the content of the clipboard (or the current selection) through a UNIX filter.

Read more…

Joomla to Wordpress redirections

Published:

There are some good plugins to export Joomla content to WordPress. However, the free version does not rewrite the URIs. It is quite simple to read the Joomla database and generates a bunch of Apache Redirect directives.

Read more…

Compile a mixed 32 bit/64 bit wine for Debian

Published:

The Wine 🍷 wiki has instructions for building a shared WoW64 Wine : this needs two out of source builds. The issue is that some developement packages are not multiarch co-installable. Another wiki page for Ubuntu recommends setting up a 32-bit LXC. Here is how I did it without a 32-bit container on Debian 🍥 testing.

Read more…

Results on same-page-merging snapshots

Published:

In the previous episode, I talked about the implementation of a same-page-merging page store. On top of this, we can build same-page-merging snapshots for the SimGrid model checker.

Read more…

Sample watchpoints or breakpoints with GDB (and FlameGraph)

Published:

GDB can be used to get the stack each time a breakpoint is reached.

Read more…

Page store for the Simgrid model checker

Published:

The first (lower) layer of the per-page snapshot mechanism is a page store: its responsibility is to store immutable shareable reference-counted memory pages independently of the snapshoting logic. Snapshot management and representation, soft-dirty tracking will be handled in higher layer.

Read more…

Page 1 of 2 | | | JSON Feed | Atom Feed