Commit a83b3e4f by Bruce Korb Committed by Bruce Korb

use platform specific types in gnu_type_fix

From-SVN: r35143
parent 038cc6b4
2000-07-20 Bruce Korb <bkorb@gnu.org>
* fixincl/check.tpl: strip the platform specific types before testing
* fixincl/fixfixes.c(gnu_type_fix): use platform specific types
* fixincl/fixincl.tpl: use platform specific types
* fixincl/fixlib.h: include the platform specific types
* fixincl/inclhack.def(gnu_types): don't supply the types
* fixincl/fixincl.x: regen
2000-07-19 Jim Wilson <wilson@cygnus.com> 2000-07-19 Jim Wilson <wilson@cygnus.com>
* config/ia64/ia64.h (HARD_REGNO_MODE_OK): Don't allow XFmode in * config/ia64/ia64.h (HARD_REGNO_MODE_OK): Don't allow XFmode in
......
...@@ -110,6 +110,18 @@ exitok=true ...@@ -110,6 +110,18 @@ exitok=true
find * -type f -print > ${TESTDIR}/LIST find * -type f -print > ${TESTDIR}/LIST
# Special hack for sys/types.h: the #define-d types for size_t,
# ptrdiff_t and wchar_t are different for each port. Therefore,
# strip off the defined-to type so that the test results are the
# same for all platforms.
#
sed 's/\(#define __[A-Z_]*_TYPE__\).*/\1/' sys/types.h > XX
mv -f XX sys/types.h
# The following subshell weirdness is for saving an exit
# status from within a while loop that reads input. If you can
# think of a cleaner way, suggest away, please...
#
exitok=` exitok=`
exec < ${TESTDIR}/LIST exec < ${TESTDIR}/LIST
while read f while read f
......
...@@ -164,19 +164,28 @@ emit_gnu_type ( text, rm ) ...@@ -164,19 +164,28 @@ emit_gnu_type ( text, rm )
/* /*
* Now print out the reformed typedef * Now print out the reformed typedef
*/ */
printf ("\ {
#ifndef __%s_TYPE__\n\ tSCC z_fmt[] = "\
#define __%s_TYPE__ %s\n\ #ifndef __%s_TYPE__\n#define __%s_TYPE__ %s\n#endif\n\
#endif\n", \
p_tm->pz_TYPE, p_tm->pz_TYPE, p_tm->pz_gtype );
printf ("\
#if !defined(_GCC_%s_T)%s\n\ #if !defined(_GCC_%s_T)%s\n\
#define _GCC_%s_T\n\ \
typedef __%s_TYPE__ %s_t;\n\ #define _GCC_%s_T\ntypedef __%s_TYPE__ %s_t;\n#endif\n";
#endif\n",
p_tm->pz_TYPE, p_tm->pz_cxx_guard, const char* pz_guard;
/*
* We magically know that the first entry and only the first
* entry needs guarding against __cplusplus (it is "wchar_t").
* If others wind up needing similar special treatment, then
* go look into inclhack.def. This code, obviously, works closely
* with that file :-)
*/
pz_guard = (p_tm == gnu_type_map) ? " && ! defined(__cplusplus)" : "";
printf (z_fmt, p_tm->pz_TYPE, p_tm->pz_TYPE, p_tm->pz_gtype,
p_tm->pz_TYPE, pz_guard,
p_tm->pz_TYPE, p_tm->pz_TYPE, p_tm->pz_type); p_tm->pz_TYPE, p_tm->pz_TYPE, p_tm->pz_type);
}
return text; return text;
} }
......
...@@ -207,19 +207,18 @@ _FOR fix ",\n" =] ...@@ -207,19 +207,18 @@ _FOR fix ",\n" =]
#define GNU_TYPE_CT [=_eval type_map _count =] #define GNU_TYPE_CT [=_eval type_map _count =]
int gnu_type_map_ct = GNU_TYPE_CT; int gnu_type_map_ct = GNU_TYPE_CT;
tSCC z_cxx_guard[] = " && !defined(__cplusplus)"; /*
tSCC z_nil[] = ""; * The following table depends upon XXX_TYPE being #define-d to the
* correct string via defines in a header file pointed to by the
* generated file "tm.h".
*/
t_gnu_type_map gnu_type_map[ GNU_TYPE_CT ] = {[= t_gnu_type_map gnu_type_map[ GNU_TYPE_CT ] = {[=
_FOR type_map , _FOR type_map ,
=] =]
{ [=_EVAL type_name _len=], "[=type_name=]", "[=type_name _up=]", "[= { [=_EVAL type_map _len=], "[=type_map=]", "[=type_map _up=]", [=
gnu_type=]", [= type_map _up=]_TYPE }[=
_IF cxx_type _exist =]z_cxx_guard[=
_ELSE =]z_nil[=
_ENDIF=] }[=
/type_map=] /type_map=]
}; };
...@@ -5799,11 +5799,13 @@ tFixDesc fixDescList[ FIX_COUNT ] = { ...@@ -5799,11 +5799,13 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
#define GNU_TYPE_CT 3 #define GNU_TYPE_CT 3
int gnu_type_map_ct = GNU_TYPE_CT; int gnu_type_map_ct = GNU_TYPE_CT;
tSCC z_cxx_guard[] = " && !defined(__cplusplus)"; /*
tSCC z_nil[] = ""; * The following table depends upon XXX_TYPE being #define-d to the
* correct string via defines in a header file pointed to by the
* generated file "tm.h".
*/
t_gnu_type_map gnu_type_map[ GNU_TYPE_CT ] = { t_gnu_type_map gnu_type_map[ GNU_TYPE_CT ] = {
{ 7, "ptrdiff", "PTRDIFF", "long int", z_nil }, { 5, "wchar", "WCHAR", WCHAR_TYPE },
{ 4, "size", "SIZE", "long unsigned int", z_nil }, { 7, "ptrdiff", "PTRDIFF", PTRDIFF_TYPE },
{ 5, "wchar", "WCHAR", "int", z_cxx_guard } { 4, "size", "SIZE", SIZE_TYPE }
}; };
...@@ -33,6 +33,8 @@ Boston, MA 02111-1307, USA. */ ...@@ -33,6 +33,8 @@ Boston, MA 02111-1307, USA. */
#include "machname.h" #include "machname.h"
#include "libiberty.h" #include "libiberty.h"
#include "tm.h"
#ifndef STDIN_FILENO #ifndef STDIN_FILENO
# define STDIN_FILENO 0 # define STDIN_FILENO 0
#endif #endif
...@@ -175,7 +177,6 @@ typedef struct { ...@@ -175,7 +177,6 @@ typedef struct {
tCC* pz_type; tCC* pz_type;
tCC* pz_TYPE; tCC* pz_TYPE;
tCC* pz_gtype; tCC* pz_gtype;
tCC* pz_cxx_guard;
} t_gnu_type_map; } t_gnu_type_map;
extern int gnu_type_map_ct; extern int gnu_type_map_ct;
......
...@@ -2520,7 +2520,13 @@ fix = { ...@@ -2520,7 +2520,13 @@ fix = {
/* /*
* Fix these files to use the same types that we think they should. * Fix these files to use the same types that we think they should.
* Each type must be present in two places: the select clause * Each type must be present in two places: the select clause
* and a "type_map" entry below. * and a "type_map" entry below. The types mapped to are found from
* the "tm.h" header, which is a generated file that refers to
* a header in the gcc/config/ tree. Keep these in sync!!
*
* Also, "wchar" is first and known to need guarding against __cplusplus.
* Keep *that* in mind, too, when hacking the gnu_type_fix routine
* in fixfixes.c.
*/ */
fix = { fix = {
hackname = gnu_types; hackname = gnu_types;
...@@ -2539,21 +2545,9 @@ fix = { ...@@ -2539,21 +2545,9 @@ fix = {
"typedef ushort_t wchar_t; /* ushort_t */"; "typedef ushort_t wchar_t; /* ushort_t */";
}; };
type_map = { type_map = wchar;
type_name = ptrdiff; type_map = ptrdiff;
gnu_type = "long int"; type_map = size;
};
type_map = {
type_name = size;
gnu_type = "long unsigned int";
};
type_map = {
type_name = wchar;
gnu_type = int;
cxx_type;
};
/* /*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment