Hello, While having a look at some mig types, I happened to remember about this old mail in my mbox, and took the time to have a look, it's now (at last!) applied, thanks!
Samuel Flavio Cruz, le mar. 19 avril 2016 03:05:13 -0400, a ecrit: > Also removed itMakeIntType which was not used anymore. > > Users can use char, int, and short types without having to define them. > These types are defined using the builtin MACH_MSG_TYPE_* types and are > architecture independent since they have the same size as the C char, > short and int. > > If these basic types are redefined, MIG will still produce stub code but > will produce a warning. > > * cpu.sym: Define sizeof_int, char, short. > * tests/base_types.defs: Remove int. > * tests/good/complex-types.defs: Use byte instead of char. > * tests/good/directions: Remove char and int. > * tests/good/types.defs: Remove char and also use short as a parameter > in 'alltypes'. > * type.c: Define itCIntTypeDecl. Remove itMakeIntType. Call itInsert for > char, short and int. > --- > cpu.sym | 3 +++ > tests/base_types.defs | 1 - > tests/good/complex-types.defs | 4 ++-- > tests/good/directions.defs | 3 --- > tests/good/types.defs | 3 +-- > type.c | 56 > ++++++++++++++++++++++++++++++------------- > 6 files changed, 45 insertions(+), 25 deletions(-) > > diff --git a/cpu.sym b/cpu.sym > index eca50f3..36e5317 100644 > --- a/cpu.sym > +++ b/cpu.sym > @@ -25,6 +25,9 @@ > > expr sizeof(integer_t) word_size > expr sizeof(integer_t)*8 word_size_in_bits > +expr sizeof(int) sizeof_int > +expr sizeof(char) sizeof_char > +expr sizeof(short) sizeof_short > expr sizeof(void*) sizeof_pointer > expr sizeof(mach_msg_header_t) sizeof_mach_msg_header_t > expr sizeof(mach_msg_type_t) sizeof_mach_msg_type_t > diff --git a/tests/base_types.defs b/tests/base_types.defs > index a226056..5118ea2 100644 > --- a/tests/base_types.defs > +++ b/tests/base_types.defs > @@ -1,4 +1,3 @@ > -type int = MACH_MSG_TYPE_INTEGER_32; > type int64_t = MACH_MSG_TYPE_INTEGER_64; > type int32_t = MACH_MSG_TYPE_INTEGER_32; > type mach_port_t = MACH_MSG_TYPE_COPY_SEND; > diff --git a/tests/good/complex-types.defs b/tests/good/complex-types.defs > index a10fc21..0a5c952 100644 > --- a/tests/good/complex-types.defs > +++ b/tests/good/complex-types.defs > @@ -22,8 +22,8 @@ subsystem types 0; > import <stdint.h>; > import "types.h"; > > -type char = MACH_MSG_TYPE_BYTE; > -type intptr_t = ^char; > +type byte = MACH_MSG_TYPE_BYTE; > +type intptr_t = ^byte; > type pointer_t = ^array[] of MACH_MSG_TYPE_BYTE > ctype: vm_offset_t; > > diff --git a/tests/good/directions.defs b/tests/good/directions.defs > index 37c5767..daae678 100644 > --- a/tests/good/directions.defs > +++ b/tests/good/directions.defs > @@ -19,9 +19,6 @@ > /* Tests arguments with different directions. */ > subsystem directions 100; > > -type char = MACH_MSG_TYPE_BYTE; > -type int = MACH_MSG_TYPE_INTEGER_32; > - > type mach_port_t = MACH_MSG_TYPE_COPY_SEND; > type mach_port_array_t = array[] of mach_port_t; > > diff --git a/tests/good/types.defs b/tests/good/types.defs > index a27c191..5ef041c 100644 > --- a/tests/good/types.defs > +++ b/tests/good/types.defs > @@ -23,7 +23,6 @@ import <stdint.h>; > import "types.h"; > #include "../base_types.defs" > > -type char = MACH_MSG_TYPE_CHAR; > type int16_t = MACH_MSG_TYPE_INTEGER_16; > type boolean_t = MACH_MSG_TYPE_BOOLEAN; > type uint16_t = MACH_MSG_TYPE_INTEGER_16; > @@ -50,7 +49,7 @@ type trans_int = int > outtran: int int8_to_int(int8_t); > > routine alltypes(port : mach_port_t; > - c : char; s : int16_t; i : int; > + c : char; s1 : int16_t; s2 : short; i : int; > i32 : int32_t; i64 : int64_t; bool : boolean_t; > ui16 : uint16_t; ui32 : uint32_t; ui64 : uint64_t); > > diff --git a/type.c b/type.c > index 6e2319e..0facd9e 100644 > --- a/type.c > +++ b/type.c > @@ -713,6 +713,40 @@ itCStringDecl(u_int count, boolean_t varying) > return it; > } > > +/* Creates a new MIG type based on a basic integral C type. */ > +static ipc_type_t * > +itCIntTypeDecl(const_string_t ctype, const size_t size) > +{ > + ipc_type_t *it; > + switch (size) { > + case 1: > + it = itShortDecl(MACH_MSG_TYPE_CHAR, "MACH_MSG_TYPE_CHAR", > + MACH_MSG_TYPE_CHAR, "MACH_MSG_TYPE_CHAR", size * 8); > + break; > + case 2: > + it = itShortDecl(MACH_MSG_TYPE_INTEGER_16, > + "MACH_MSG_TYPE_INTEGER_16", MACH_MSG_TYPE_INTEGER_16, > + "MACH_MSG_TYPE_INTEGER_16", size * 8); > + break; > + case 4: > + it = itShortDecl(MACH_MSG_TYPE_INTEGER_32, > + "MACH_MSG_TYPE_INTEGER_32", MACH_MSG_TYPE_INTEGER_32, > + "MACH_MSG_TYPE_INTEGER_32", size * 8); > + break; > + case 8: > + it = itShortDecl(MACH_MSG_TYPE_INTEGER_64, > + "MACH_MSG_TYPE_INTEGER_64", MACH_MSG_TYPE_INTEGER_64, > + "MACH_MSG_TYPE_INTEGER_64", size * 8); > + break; > + default: > + fprintf(stderr, "Unrecognized size %zu for type %s\n", size, > ctype); > + exit(EXIT_FAILURE); > + } > + it->itName = ctype; > + itCalculateNameInfo(it); > + return it; > +} > + > ipc_type_t * > itMakeCountType(void) > { > @@ -747,23 +781,6 @@ itMakeNaturalType(const char *name) > return it; > } > > -extern ipc_type_t * > -itMakeIntType() > -{ > - ipc_type_t *it = itAlloc(); > - > - it->itName = "int"; > - it->itInName = MACH_MSG_TYPE_INTEGER_32; > - it->itInNameStr = "MACH_MSG_TYPE_INTEGER_32"; > - it->itOutName = MACH_MSG_TYPE_INTEGER_32; > - it->itOutNameStr = "MACH_MSG_TYPE_INTEGER_32"; > - it->itSize = 32; > - > - itCalculateSizeInfo(it); > - itCalculateNameInfo(it); > - return it; > -} > - > ipc_type_t * > itMakePolyType(void) > { > @@ -856,6 +873,11 @@ init_type(void) > > itWaitTimeType = itMakeNaturalType("mach_msg_timeout_t"); > itMsgOptionType = itMakeNaturalType("mach_msg_option_t"); > + > + /* Define basic C integral types. */ > + itInsert("char", itCIntTypeDecl("char", sizeof_char)); > + itInsert("short", itCIntTypeDecl("short", sizeof_short)); > + itInsert("int", itCIntTypeDecl("int", sizeof_int)); > } > > /****************************************************** > -- > 2.6.4 > > -- Samuel <y> la vraie vie, c'est quand le prompt passe de $ à #