diff --git a/Makefile b/Makefile
new file mode 100755
index 0000000000000000000000000000000000000000..27d00b35f6751f4f0495f1df8e230cfd364840e7
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,28 @@
+all: plugin
+
+FILE=main.c prog_test.c
+
+CXX=g++_810
+CC=gcc_810
+
+MPICC=mpicc
+
+PLUGIN_FLAGS=-I`$(CC) -print-file-name=plugin`/include -g -Wall -fno-rtti -shared -fPIC
+
+CFLAGS=-g -O3
+
+
+libplugin.so: plugin.cpp
+	 $(CXX) $(PLUGIN_FLAGS) -o $@ $<
+
+plugin: libplugin.so prog_test.c
+	$(MPICC) prog_test.c $(CFLAGS) -o $@ -fplugin=./$<
+
+%.pdf: %.dot
+	dot -Tpdf $< -o $@
+
+clean:
+	rm -rf *.pgr *.pdf plugin
+
+clean_all: clean
+	rm -rf libplugin.so *.dot plugin
diff --git a/libplugin.so b/libplugin.so
new file mode 100755
index 0000000000000000000000000000000000000000..97d39a670503e60fa206df47ea639a11afce5881
Binary files /dev/null and b/libplugin.so differ
diff --git a/main.c b/main.c
new file mode 100755
index 0000000000000000000000000000000000000000..3512d1bbc078171b7885608ec52b4142c1f9170c
--- /dev/null
+++ b/main.c
@@ -0,0 +1,15 @@
+/**
+ * \file main.c
+ * \brief Main du programme de test pour notre plugin
+*/
+#include <stdio.h>
+#include "prog_test.h"
+
+int main (int argc, char **argv) {
+
+	printf("begining main\n");
+	mock1();
+	printf("ending main\n");
+
+	return 0;
+}
diff --git a/plugin b/plugin
new file mode 100755
index 0000000000000000000000000000000000000000..62ebe8f26368633ec22acc9f138a7074fd8bdb65
Binary files /dev/null and b/plugin differ
diff --git a/plugin.cpp b/plugin.cpp
new file mode 100755
index 0000000000000000000000000000000000000000..e1fa0228992337eb1377ba239178403638ed2c86
--- /dev/null
+++ b/plugin.cpp
@@ -0,0 +1,110 @@
+#include <gcc-plugin.h>                                                          
+#include <plugin-version.h>                                                      
+#include <tree.h>                                                                
+#include <basic-block.h>                                                         
+#include <gimple.h>                                                              
+#include <tree-pass.h>                                                           
+#include <context.h>                                                             
+#include <function.h>                                                            
+#include <gimple-iterator.h>                                                     
+#include <c-family/c-pragma.h>
+#include "system.h"
+#include "vec.h"
+#include <string.h>
+
+int plugin_is_GPL_compatible;
+
+const pass_data my_pass_data =
+{
+        GIMPLE_PASS, /* type */
+        "NEW_PASS", /* name */
+        OPTGROUP_NONE, /* optinfo_flags */
+        TV_OPTIMIZE, /* tv_id */
+        0, /* properties_required */
+        0, /* properties_provided */
+        0, /* properties_destroyed */
+        0, /* todo_flags_start */
+        0, /* todo_flags_finish */
+};
+
+
+
+static void my_pragma_action(cpp_reader *ARG_UNUSED(dummy))
+{
+	printf("****** Pragam detected: ******\n");
+	printf("\n\n");
+}
+
+
+static void register_my_pragma(void *event_data, void *data)
+{
+	c_register_pragma ("instrumente", "function", my_pragma_action);
+}
+
+
+class my_pass : public gimple_opt_pass
+{
+        public:
+                my_pass (gcc::context *ctxt)
+                        : gimple_opt_pass (my_pass_data, ctxt)
+                {}
+
+                /* opt_pass methods: */
+                my_pass *clone ()
+                {
+                        return new my_pass(g);
+                }
+
+
+
+                /* Gate function (shall we apply this pass?) */
+                bool gate (function * fun)
+                {
+                        printf("plugin: gate... \n");
+                        return true;
+                }
+
+
+
+                /* Execute function */
+                unsigned int execute (function *fun)
+                {
+                        printf("plugin: execute...\n");
+			return 0;
+                }
+};
+
+
+int plugin_init(struct plugin_name_args * plugin_info, struct plugin_gcc_version * version)
+{
+
+	fprintf(stderr, "\n*********************************\n");
+	fprintf(stderr, "init - plugin dilasser/donnenfeld\n");
+	fprintf(stderr, "*********************************\n\n\n");
+
+	if(!plugin_default_version_check(version, &gcc_version)) return 1;
+
+	struct register_pass_info my_pass_info;
+	
+        my_pass p(g);
+
+        my_pass_info.pass = &p;
+        my_pass_info.reference_pass_name = "cfg";
+        my_pass_info.ref_pass_instance_number = 0;
+        my_pass_info.pos_op = PASS_POS_INSERT_AFTER;
+
+
+
+	//REGISTER PASS
+        register_callback(plugin_info->base_name,
+                        PLUGIN_PASS_MANAGER_SETUP,
+                        NULL,
+                        &my_pass_info);
+
+	// REGISTER PRAGMA
+	register_callback("plugin_name", PLUGIN_PRAGMAS, register_my_pragma, NULL );
+
+
+	return 0;
+}
+
diff --git a/prog_test.c b/prog_test.c
new file mode 100755
index 0000000000000000000000000000000000000000..8e5bbfa74e3b0a090c23c1538716912e1a9845ec
--- /dev/null
+++ b/prog_test.c
@@ -0,0 +1,36 @@
+/**
+ * \file main.c
+ * \brief TEST PLUGIN
+*/
+#include <stdio.h>
+#include "prog_test.h"
+
+#pragma instrumente function mock1
+#pragma instrumente function mock2
+#pragma instrumente function mock3,mock5
+#pragma instrumente function (mock4,mock6)
+#pragma instrumente function CANARD
+#pragma instrumente function mock1
+#pragma instrumente function (coincoin
+
+void mock1() {
+	printf("mock1\n");
+	#pragma instrumente function MOCK1
+}
+
+void mock2() {
+	printf("mock2\n");
+}
+
+void mock3() {
+	printf("mock3\n");
+}
+
+void mock4() {
+	printf("mock4\n");
+}
+
+int main(int argc, char *argv[])
+{
+	return 0;
+}
diff --git a/prog_test.h b/prog_test.h
new file mode 100755
index 0000000000000000000000000000000000000000..68401f4f4a7c94e4de83446ae6c0bc2041935897
--- /dev/null
+++ b/prog_test.h
@@ -0,0 +1,9 @@
+#ifndef __TEST__H
+#define __TEST__H
+
+void mock1();
+void mock2();
+void mock3();
+void mock4();
+
+#endif