diff --git a/ChangeLog b/ChangeLog index 583862ec3..ba8cdba1d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2009-02-21 Richard Frith-Macdonald + + * Source/mframe/i386/linux: + * Source/mframe/i386/sysv4.2MP: + * Source/mframe/i386/linux-gnu: + * Source/mframe/i386/sysv4.2uw2.1.3: + * Source/mframe/i386/freebsd: + * Source/mframe/i386/openbsd: + * Source/mframe/i386/generic: + Update/fix macro to build method signature information. + 2009-02-20 Richard Frith-Macdonald * configure.ac: Add checks for backtrace() function diff --git a/Source/mframe/i386/freebsd b/Source/mframe/i386/freebsd index 727429198..60955cfad 100644 --- a/Source/mframe/i386/freebsd +++ b/Source/mframe/i386/freebsd @@ -16,9 +16,7 @@ #define MFRAME_ARGS int -#define MFRAME_INIT_ARGS(CUM, RTYPE) \ -((CUM) = (*(RTYPE)==_C_STRUCT_B || *(RTYPE)==_C_UNION_B || \ - *(RTYPE)==_C_ARY_B) ? sizeof(void*) : 0) +#define MFRAME_INIT_ARGS(CUM, RTYPE) ((CUM) = 0) #define MFRAME_ARG_ENCODING(CUM, TYPE, STACK, DEST) \ ({ \ @@ -26,23 +24,28 @@ int align = objc_alignof_type(type); \ int size = objc_sizeof_type(type); \ \ - (CUM) = ROUND((CUM), align); \ (TYPE) = objc_skip_typespec(type); \ + (CUM) = ROUND((CUM), __alignof__(int)); \ sprintf((DEST), "%.*s%d", (TYPE)-type, type, (CUM)); \ if (*(TYPE) == '+') (TYPE)++; \ + if (*(TYPE) == '-') (TYPE)++; \ while (isdigit(*(TYPE))) \ { \ (TYPE)++; \ } \ (DEST)=&(DEST)[strlen(DEST)]; \ - if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)&&size>2) \ + if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)) \ { \ (STACK) = (CUM) + ROUND(size, align); \ } \ else \ { \ + if (size < sizeof(int)) \ + { \ + size = sizeof(int); \ + } \ (STACK) = (CUM) + size; \ } \ - (CUM) += ROUND(size, sizeof(void*)); \ + (CUM) += size; \ }) diff --git a/Source/mframe/i386/generic b/Source/mframe/i386/generic index df30c136c..60955cfad 100644 --- a/Source/mframe/i386/generic +++ b/Source/mframe/i386/generic @@ -16,9 +16,7 @@ #define MFRAME_ARGS int -#define MFRAME_INIT_ARGS(CUM, RTYPE) \ -((CUM) = (*(RTYPE)==_C_STRUCT_B || *(RTYPE)==_C_UNION_B || \ - *(RTYPE)==_C_ARY_B) ? sizeof(void*) : 0) +#define MFRAME_INIT_ARGS(CUM, RTYPE) ((CUM) = 0) #define MFRAME_ARG_ENCODING(CUM, TYPE, STACK, DEST) \ ({ \ @@ -26,8 +24,8 @@ int align = objc_alignof_type(type); \ int size = objc_sizeof_type(type); \ \ - (CUM) = ROUND((CUM), align); \ (TYPE) = objc_skip_typespec(type); \ + (CUM) = ROUND((CUM), __alignof__(int)); \ sprintf((DEST), "%.*s%d", (TYPE)-type, type, (CUM)); \ if (*(TYPE) == '+') (TYPE)++; \ if (*(TYPE) == '-') (TYPE)++; \ @@ -36,14 +34,18 @@ (TYPE)++; \ } \ (DEST)=&(DEST)[strlen(DEST)]; \ - if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)&&size>2) \ + if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)) \ { \ (STACK) = (CUM) + ROUND(size, align); \ } \ else \ { \ + if (size < sizeof(int)) \ + { \ + size = sizeof(int); \ + } \ (STACK) = (CUM) + size; \ } \ - (CUM) += ROUND(size, sizeof(void*)); \ + (CUM) += size; \ }) diff --git a/Source/mframe/i386/linux b/Source/mframe/i386/linux index 3eef54dc7..51c085977 100644 --- a/Source/mframe/i386/linux +++ b/Source/mframe/i386/linux @@ -16,9 +16,7 @@ #define MFRAME_ARGS int -#define MFRAME_INIT_ARGS(CUM, RTYPE) \ -((CUM) = (*(RTYPE)==_C_STRUCT_B || *(RTYPE)==_C_UNION_B || \ - *(RTYPE)==_C_ARY_B) ? sizeof(void*) : 0) +#define MFRAME_INIT_ARGS(CUM, RTYPE) ((CUM) = 0) #define MFRAME_ARG_ENCODING(CUM, TYPE, STACK, DEST) \ ({ \ @@ -26,26 +24,28 @@ int align = objc_alignof_type(type); \ int size = objc_sizeof_type(type); \ \ - (CUM) = ROUND((CUM), align); \ (TYPE) = objc_skip_typespec(type); \ + (CUM) = ROUND((CUM), __alignof__(int)); \ sprintf((DEST), "%.*s%d", (TYPE)-type, type, (CUM)); \ - if (*(TYPE) == '+') \ - { \ - (TYPE)++; \ - } \ + if (*(TYPE) == '+') (TYPE)++; \ + if (*(TYPE) == '-') (TYPE)++; \ while (isdigit(*(TYPE))) \ { \ (TYPE)++; \ } \ (DEST)=&(DEST)[strlen(DEST)]; \ - if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)&&size>2) \ + if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)) \ { \ (STACK) = (CUM) + ROUND(size, align); \ } \ else \ { \ + if (size < sizeof(int)) \ + { \ + size = sizeof(int); \ + } \ (STACK) = (CUM) + size; \ } \ - (CUM) += ROUND(size, sizeof(void*)); \ + (CUM) += size; \ }) diff --git a/Source/mframe/i386/linux-gnu b/Source/mframe/i386/linux-gnu index 3eef54dc7..51c085977 100644 --- a/Source/mframe/i386/linux-gnu +++ b/Source/mframe/i386/linux-gnu @@ -16,9 +16,7 @@ #define MFRAME_ARGS int -#define MFRAME_INIT_ARGS(CUM, RTYPE) \ -((CUM) = (*(RTYPE)==_C_STRUCT_B || *(RTYPE)==_C_UNION_B || \ - *(RTYPE)==_C_ARY_B) ? sizeof(void*) : 0) +#define MFRAME_INIT_ARGS(CUM, RTYPE) ((CUM) = 0) #define MFRAME_ARG_ENCODING(CUM, TYPE, STACK, DEST) \ ({ \ @@ -26,26 +24,28 @@ int align = objc_alignof_type(type); \ int size = objc_sizeof_type(type); \ \ - (CUM) = ROUND((CUM), align); \ (TYPE) = objc_skip_typespec(type); \ + (CUM) = ROUND((CUM), __alignof__(int)); \ sprintf((DEST), "%.*s%d", (TYPE)-type, type, (CUM)); \ - if (*(TYPE) == '+') \ - { \ - (TYPE)++; \ - } \ + if (*(TYPE) == '+') (TYPE)++; \ + if (*(TYPE) == '-') (TYPE)++; \ while (isdigit(*(TYPE))) \ { \ (TYPE)++; \ } \ (DEST)=&(DEST)[strlen(DEST)]; \ - if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)&&size>2) \ + if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)) \ { \ (STACK) = (CUM) + ROUND(size, align); \ } \ else \ { \ + if (size < sizeof(int)) \ + { \ + size = sizeof(int); \ + } \ (STACK) = (CUM) + size; \ } \ - (CUM) += ROUND(size, sizeof(void*)); \ + (CUM) += size; \ }) diff --git a/Source/mframe/i386/openbsd b/Source/mframe/i386/openbsd index 727429198..60955cfad 100644 --- a/Source/mframe/i386/openbsd +++ b/Source/mframe/i386/openbsd @@ -16,9 +16,7 @@ #define MFRAME_ARGS int -#define MFRAME_INIT_ARGS(CUM, RTYPE) \ -((CUM) = (*(RTYPE)==_C_STRUCT_B || *(RTYPE)==_C_UNION_B || \ - *(RTYPE)==_C_ARY_B) ? sizeof(void*) : 0) +#define MFRAME_INIT_ARGS(CUM, RTYPE) ((CUM) = 0) #define MFRAME_ARG_ENCODING(CUM, TYPE, STACK, DEST) \ ({ \ @@ -26,23 +24,28 @@ int align = objc_alignof_type(type); \ int size = objc_sizeof_type(type); \ \ - (CUM) = ROUND((CUM), align); \ (TYPE) = objc_skip_typespec(type); \ + (CUM) = ROUND((CUM), __alignof__(int)); \ sprintf((DEST), "%.*s%d", (TYPE)-type, type, (CUM)); \ if (*(TYPE) == '+') (TYPE)++; \ + if (*(TYPE) == '-') (TYPE)++; \ while (isdigit(*(TYPE))) \ { \ (TYPE)++; \ } \ (DEST)=&(DEST)[strlen(DEST)]; \ - if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)&&size>2) \ + if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)) \ { \ (STACK) = (CUM) + ROUND(size, align); \ } \ else \ { \ + if (size < sizeof(int)) \ + { \ + size = sizeof(int); \ + } \ (STACK) = (CUM) + size; \ } \ - (CUM) += ROUND(size, sizeof(void*)); \ + (CUM) += size; \ }) diff --git a/Source/mframe/i386/sysv4.2MP b/Source/mframe/i386/sysv4.2MP index 9d28d1512..c813374f6 100644 --- a/Source/mframe/i386/sysv4.2MP +++ b/Source/mframe/i386/sysv4.2MP @@ -16,9 +16,7 @@ #define MFRAME_ARGS int -#define MFRAME_INIT_ARGS(CUM, RTYPE) \ -((CUM) = (*(RTYPE)==_C_STRUCT_B || *(RTYPE)==_C_UNION_B || \ - *(RTYPE)==_C_ARY_B) ? sizeof(void*) : 0) +#define MFRAME_INIT_ARGS(CUM, RTYPE) ((CUM) = 0) #define MFRAME_ARG_ENCODING(CUM, TYPE, STACK, DEST) \ ({ \ @@ -26,26 +24,28 @@ int align = objc_alignof_type(type); \ int size = objc_sizeof_type(type); \ \ - (CUM) = ROUND((CUM), align); \ (TYPE) = objc_skip_typespec(type); \ + (CUM) = ROUND((CUM), __alignof__(int)); \ sprintf((DEST), "%.*s%d", (TYPE)-type, type, (CUM)); \ - if (*(TYPE) == '+') \ - { \ - (TYPE)++; \ - } \ + if (*(TYPE) == '+') (TYPE)++; \ + if (*(TYPE) == '-') (TYPE)++; \ while (isdigit(*(TYPE))) \ { \ (TYPE)++; \ } \ (DEST)=&(DEST)[strlen(DEST)]; \ - if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)&&size>2) \ + if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)) \ { \ (STACK) = (CUM) + ROUND(size, align); \ } \ else \ { \ + if (size < sizeof(int)) \ + { \ + size = sizeof(int); \ + } \ (STACK) = (CUM) + size; \ } \ - (CUM) += ROUND(size, sizeof(void*)); \ + (CUM) += size; \ }) diff --git a/Source/mframe/i386/sysv4.2uw2.1.3 b/Source/mframe/i386/sysv4.2uw2.1.3 index 9d28d1512..c813374f6 100644 --- a/Source/mframe/i386/sysv4.2uw2.1.3 +++ b/Source/mframe/i386/sysv4.2uw2.1.3 @@ -16,9 +16,7 @@ #define MFRAME_ARGS int -#define MFRAME_INIT_ARGS(CUM, RTYPE) \ -((CUM) = (*(RTYPE)==_C_STRUCT_B || *(RTYPE)==_C_UNION_B || \ - *(RTYPE)==_C_ARY_B) ? sizeof(void*) : 0) +#define MFRAME_INIT_ARGS(CUM, RTYPE) ((CUM) = 0) #define MFRAME_ARG_ENCODING(CUM, TYPE, STACK, DEST) \ ({ \ @@ -26,26 +24,28 @@ int align = objc_alignof_type(type); \ int size = objc_sizeof_type(type); \ \ - (CUM) = ROUND((CUM), align); \ (TYPE) = objc_skip_typespec(type); \ + (CUM) = ROUND((CUM), __alignof__(int)); \ sprintf((DEST), "%.*s%d", (TYPE)-type, type, (CUM)); \ - if (*(TYPE) == '+') \ - { \ - (TYPE)++; \ - } \ + if (*(TYPE) == '+') (TYPE)++; \ + if (*(TYPE) == '-') (TYPE)++; \ while (isdigit(*(TYPE))) \ { \ (TYPE)++; \ } \ (DEST)=&(DEST)[strlen(DEST)]; \ - if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)&&size>2) \ + if ((*type==_C_STRUCT_B||*type==_C_UNION_B||*type==_C_ARY_B)) \ { \ (STACK) = (CUM) + ROUND(size, align); \ } \ else \ { \ + if (size < sizeof(int)) \ + { \ + size = sizeof(int); \ + } \ (STACK) = (CUM) + size; \ } \ - (CUM) += ROUND(size, sizeof(void*)); \ + (CUM) += size; \ })