diff options
author | Paul Brook <paul@codesourcery.com> | 2004-06-29 14:50:35 +0000 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2004-06-29 14:50:35 +0000 |
commit | 46e995e0e40e16ca159d6f5b116829700bbc269f (patch) | |
tree | f6a9a6cf28955476ec2789692fe97c33db01c297 /gcc/targhooks.c | |
parent | 50a2de961ffa6022ac3084c94f76d1462be04845 (diff) | |
download | gcc-46e995e0e40e16ca159d6f5b116829700bbc269f.zip gcc-46e995e0e40e16ca159d6f5b116829700bbc269f.tar.gz gcc-46e995e0e40e16ca159d6f5b116829700bbc269f.tar.bz2 |
target-def.h (TARGET_CXX_GET_COOKIE_SIZE, [...]): Define.
gcc/
* target-def.h (TARGET_CXX_GET_COOKIE_SIZE,
TARGET_CXX_COOKIE_HAS_SIZE): Define.
(TARGET_CXX): Use them.
* target.h (struct gcc_target): Add cxx.get_cookie_size and
cxx.cookie_has_size.
* targhooks.c (default_cxx_get_cookie_size): New fucntion.
* targhooks.h (default_cxx_get_cookie_size): Add prototype.
* config/arm/arm.c (TARGET_CXX_GET_COOKIE_SIZE,
TARGET_CXX_COOKIE_HAS_SIZE): Define.
(arm_get_cookie_size, arm_cookie_has_size): New functions.
* Make-lang.in (cp/init.o): Add dependency on $(TARGET_H).
* doc/tm.texi: Document TARGET_CXX_GET_COOKIE_SIZE and
TARGET_CXX_COOKIE_HAS_SIZE.
gcc/cp/
* init.c: Include target.h.
(get_cookie_size): Remove and replace with target hook.
Update callers.
(build_new_1): Store the element size in the cookie.
libstdc++-v3/
* libsupc++/vec.cc (__cxa_vec_new2, __cxa_vec_new3): Store the
element size in the cookie.
testsuite/
* g++.old-deja/g++.abi/arraynew.C: Handle ARM EABI cookies.
* g++.old-deja/g++.abi/cxa_vec.C: Allocate larger cookies for AEABI.
From-SVN: r83854
Diffstat (limited to 'gcc/targhooks.c')
-rw-r--r-- | gcc/targhooks.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/gcc/targhooks.c b/gcc/targhooks.c index 5d2a75f..a2745c4 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -143,3 +143,28 @@ default_cxx_guard_type (void) { return long_long_integer_type_node; } + + +/* Returns the size of the cookie to use when allocating an array + whose elements have the indicated TYPE. Assumes that it is already + known that a cookie is needed. */ + +tree +default_cxx_get_cookie_size (tree type) +{ + tree cookie_size; + + /* We need to allocate an additional max (sizeof (size_t), alignof + (true_type)) bytes. */ + tree sizetype_size; + tree type_align; + + sizetype_size = size_in_bytes (sizetype); + type_align = size_int (TYPE_ALIGN_UNIT (type)); + if (INT_CST_LT_UNSIGNED (type_align, sizetype_size)) + cookie_size = sizetype_size; + else + cookie_size = type_align; + + return cookie_size; +} |