Skip to content
Extraits de code Groupes Projets
Valider b48c8789 rédigé par Théotime DONNENFELD's avatar Théotime DONNENFELD
Parcourir les fichiers

Clean start dummy

parent d002d03a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #1122 annulé
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
Fichier ajouté
/**
* \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;
}
Fichier ajouté
#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;
}
/**
* \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;
}
#ifndef __TEST__H
#define __TEST__H
void mock1();
void mock2();
void mock3();
void mock4();
#endif
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter