diff options
author | Kaveh R. Ghazi <ghazi@caip.rutgers.edu> | 2001-09-17 18:48:45 +0000 |
---|---|---|
committer | Kaveh Ghazi <ghazi@gcc.gnu.org> | 2001-09-17 18:48:45 +0000 |
commit | c1d49704bcc084245adffb45a22d43a841665515 (patch) | |
tree | d0168824c3517b671ef6a4c4bbf09f335edd2800 | |
parent | 14baae01f63af3ef58bf9a0923a92d0de7098891 (diff) | |
download | gcc-c1d49704bcc084245adffb45a22d43a841665515.zip gcc-c1d49704bcc084245adffb45a22d43a841665515.tar.gz gcc-c1d49704bcc084245adffb45a22d43a841665515.tar.bz2 |
libiberty.h (ASTRDUP): New macro.
include:
* libiberty.h (ASTRDUP): New macro.
libiberty_optr, libiberty_nptr, libiberty_len): Declare.
libiberty:
* alloca.c (libiberty_optr, libiberty_nptr, libiberty_len):
Define.
gcc:
* c-aux-info.c (affix_data_type): Use ASTRDUP in lieu of
alloca/strcpy.
From-SVN: r45657
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-aux-info.c | 4 | ||||
-rw-r--r-- | include/ChangeLog | 5 | ||||
-rw-r--r-- | include/libiberty.h | 13 | ||||
-rw-r--r-- | libiberty/ChangeLog | 5 | ||||
-rw-r--r-- | libiberty/alloca.c | 6 |
6 files changed, 35 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8b0fe94..554b252 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-09-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * c-aux-info.c (affix_data_type): Use ASTRDUP in lieu of + alloca/strcpy. + 2001-09-17 Neil Booth <neil@daikokuya.demon.co.uk> * cpphash.h (_cpp_lex_direct): New. diff --git a/gcc/c-aux-info.c b/gcc/c-aux-info.c index ee9c516..c9daa1d 100644 --- a/gcc/c-aux-info.c +++ b/gcc/c-aux-info.c @@ -64,13 +64,11 @@ static char * affix_data_type (param) const char *param; { - char *type_or_decl = (char *) alloca (strlen (param) + 1); + char *const type_or_decl = ASTRDUP (param); char *p = type_or_decl; char *qualifiers_then_data_type; char saved; - strcpy (type_or_decl, param); - /* Skip as many leading const's or volatile's as there are. */ for (;;) diff --git a/include/ChangeLog b/include/ChangeLog index 81d2cc2..d745a28 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,8 @@ +2001-09-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * libiberty.h (ASTRDUP): New macro. + libiberty_optr, libiberty_nptr, libiberty_len): Declare. + 2001-08-29 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * ansidecl.h: Update comments reflecting previous change. diff --git a/include/libiberty.h b/include/libiberty.h index 8d46e37..7220ec0 100644 --- a/include/libiberty.h +++ b/include/libiberty.h @@ -246,12 +246,25 @@ extern PTR C_alloca PARAMS((size_t)); #if GCC_VERSION >= 2000 && !defined USE_C_ALLOCA # define alloca(x) __builtin_alloca(x) # undef C_ALLOCA +# define ASTRDUP(X) \ + (__extension__ ({ const char *const libiberty_optr = (X); \ + const unsigned long libiberty_len = strlen (libiberty_optr) + 1; \ + char *const libiberty_nptr = alloca (libiberty_len); \ + (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len); })) #else # define alloca(x) C_alloca(x) # undef USE_C_ALLOCA # define USE_C_ALLOCA 1 # undef C_ALLOCA # define C_ALLOCA 1 +extern const char *libiberty_optr; +extern char *libiberty_nptr; +extern unsigned long libiberty_len; +# define ASTRDUP(X) \ + (libiberty_optr = (X), \ + libiberty_len = strlen (libiberty_optr) + 1, \ + libiberty_nptr = alloca (libiberty_len), \ + (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len)) #endif #ifdef __cplusplus diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index afeeaaf..970dc98 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,8 @@ +2001-09-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * alloca.c (libiberty_optr, libiberty_nptr, libiberty_len): + Define. + 2001-09-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * asprintf.c: Don't define USE_STDARG. Use VPARAMS, VA_OPEN, diff --git a/libiberty/alloca.c b/libiberty/alloca.c index bf105d8..822c1dc 100644 --- a/libiberty/alloca.c +++ b/libiberty/alloca.c @@ -34,6 +34,12 @@ #include <stdlib.h> #endif +/* These variables are used by the ASTRDUP implementation that relies + on C_alloca. */ +const char *libiberty_optr; +char *libiberty_nptr; +unsigned long libiberty_len; + /* If your stack is a linked list of frames, you have to provide an "address metric" ADDRESS_FUNCTION macro. */ |