From 2396255a8ff979d90dc0b389ac11bad36cb73b7f Mon Sep 17 00:00:00 2001 From: mquinson Date: Wed, 3 Mar 2004 18:21:01 +0000 Subject: [PATCH] bootstraping tools git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@54 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/gras/DataDesc/datadesc_interface.h | 12 +- src/gras/DataDesc/ddt_remote.c | 194 +++++++++++++++++++++++++ 2 files changed, 205 insertions(+), 1 deletion(-) diff --git a/src/gras/DataDesc/datadesc_interface.h b/src/gras/DataDesc/datadesc_interface.h index 69fe2ab442..53a7df45da 100644 --- a/src/gras/DataDesc/datadesc_interface.h +++ b/src/gras/DataDesc/datadesc_interface.h @@ -20,8 +20,18 @@ void gras_datadesc_exit(void); /* free a given ddt */ void gras_ddt_free(gras_datadesc_type_t **type); -/* declare in the given set */ +/* declare in the given set, and retrieve afterward */ gras_error_t gras_ddt_register(gras_set_t *set, gras_datadesc_type_t *type); +gras_error_t gras_ddt_get_by_name(gras_set_t *set, + const char *name, + gras_datadesc_type_t **type); + + +/* create a type set, and bootstrap it by declaring all basic types in it */ +gras_error_t +gras_dd_typeset_create(int gras_arch, + gras_set_t **set); + #endif /* GRAS_DATADESC_INTERFACE_H */ diff --git a/src/gras/DataDesc/ddt_remote.c b/src/gras/DataDesc/ddt_remote.c index 42e596e6ae..5d574d7d65 100644 --- a/src/gras/DataDesc/ddt_remote.c +++ b/src/gras/DataDesc/ddt_remote.c @@ -10,6 +10,51 @@ #include "DataDesc/datadesc_private.h" +/* callback for array size when sending strings */ +static int +_strlen_cb(void *vars, + gras_datadesc_type_t *type, + void *data) { + + // (void)p_vars; /* FIXME(Oli): Why that? Avoid warning? That's not needed*/ + // (void)p_type; + + return 1+(long int)strlen(data); +} + +/*** + *** Table of all known architectures. + ***/ + +typedef struct { + const char *name; + + int endian; + + int sizeof_char; + int sizeof_short; + int sizeof_int; + int sizeof_long; + int sizeof_long_long; + + int sizeof_pdata; + int sizeof_pfunc; + + int sizeof_float; + int sizeof_double; +} gras_arch_sizes_t; + +const gras_arch_sizes_t gras_arch_sizes[] = { + {"i386", 0, 1,2,4,4,8, 4,4, 4,8} +}; + +const int gras_arch_sizes_count = 1; + +/** + * gras_free_ddt: + * + * gime that memory back, dude + */ static void gras_free_ddt(void *ddt) { gras_datadesc_type_t *type= (gras_datadesc_type_t *)ddt; @@ -18,6 +63,11 @@ static void gras_free_ddt(void *ddt) { } } +/** + * gras_ddt_register: + * + * Add a type to a type set + */ gras_error_t gras_ddt_register(gras_set_t *set, gras_datadesc_type_t *type) { return gras_set_add(set, @@ -25,3 +75,147 @@ gras_error_t gras_ddt_register(gras_set_t *set, &gras_free_ddt); } + +/** + * gras_ddt_get_by_name: + * + * Retrieve a type from its name + */ +gras_error_t gras_ddt_get_by_name(gras_set_t *set, + const char *name, + gras_datadesc_type_t **type) { + return gras_set_get_by_name(set,name,(gras_set_elm_t**)type); +} + +/** + * gras_dd_typeset_create: + * + * create a type set, and bootstrap it by declaring all basic types in it + */ +gras_error_t +gras_dd_typeset_create(int gras_arch, + gras_set_t **s) { + gras_error_t errcode; + gras_datadesc_type_t *ddt; /* What to add */ + gras_datadesc_type_t *elm; /* element of ddt when needed */ + gras_set_t *set; /* result */ + + if (gras_arch >= gras_arch_sizes_count) { + RAISE1(mismatch_error, "Remote architecture signature (=%d) unknown locally\n", gras_arch); + } + + TRY(gras_set_new(s)); + set=*s; + + TRY(gras_ddt_new_scalar("signed char", + gras_arch_sizes[gras_arch].sizeof_char, + e_gras_dd_scalar_encoding_sint, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + TRY(gras_ddt_new_scalar("unsigned char", + gras_arch_sizes[gras_arch].sizeof_char, + e_gras_dd_scalar_encoding_uint, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + + TRY(gras_ddt_new_scalar("signed short int", + gras_arch_sizes[gras_arch].sizeof_short, + e_gras_dd_scalar_encoding_sint, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + TRY(gras_ddt_new_scalar("unsigned short int", + gras_arch_sizes[gras_arch].sizeof_short, + e_gras_dd_scalar_encoding_uint, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + + TRY(gras_ddt_new_scalar("signed int", + gras_arch_sizes[gras_arch].sizeof_int, + e_gras_dd_scalar_encoding_sint, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + TRY(gras_ddt_new_scalar("unsigned int", + gras_arch_sizes[gras_arch].sizeof_int, + e_gras_dd_scalar_encoding_uint, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + + TRY(gras_ddt_new_scalar("signed long int", + gras_arch_sizes[gras_arch].sizeof_long, + e_gras_dd_scalar_encoding_sint, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + TRY(gras_ddt_new_scalar("unsigned long int", + gras_arch_sizes[gras_arch].sizeof_long, + e_gras_dd_scalar_encoding_uint, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + + TRY(gras_ddt_new_scalar("signed long long int", + gras_arch_sizes[gras_arch].sizeof_long_long, + e_gras_dd_scalar_encoding_sint, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + TRY(gras_ddt_new_scalar("unsigned long long int", + gras_arch_sizes[gras_arch].sizeof_long_long, + e_gras_dd_scalar_encoding_uint, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + + TRY(gras_ddt_new_scalar("data pointer", + gras_arch_sizes[gras_arch].sizeof_pdata, + e_gras_dd_scalar_encoding_uint, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + TRY(gras_ddt_new_scalar("function pointer", + gras_arch_sizes[gras_arch].sizeof_pfunc, + e_gras_dd_scalar_encoding_uint, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + + TRY(gras_ddt_new_scalar("float", + gras_arch_sizes[gras_arch].sizeof_float, + e_gras_dd_scalar_encoding_float, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + TRY(gras_ddt_new_scalar("double", + gras_arch_sizes[gras_arch].sizeof_float, + e_gras_dd_scalar_encoding_float, + NULL, + &ddt)); + TRY(gras_ddt_register(set,ddt)); + + TRY(gras_ddt_get_by_name(set,"unsigned char",&elm)); + TRY(gras_ddt_new_array("string", elm, 0, _strlen_cb, NULL, &ddt)); + TRY(gras_ddt_register(set,ddt)); + + + return no_error; +} + -- 2.20.1