Verify C++ support with CodeSourcery

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4016 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2011-10-03 21:10:11 +00:00
parent 28b4cb23b1
commit f070246d83
3 changed files with 40 additions and 9 deletions

19
TODO
View File

@ -1,4 +1,4 @@
NuttX TODO List (Last updated September 28, 2011) NuttX TODO List (Last updated October 3, 2011)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This file summarizes known NuttX bugs, limitations, inconsistencies with This file summarizes known NuttX bugs, limitations, inconsistencies with
@ -11,7 +11,7 @@ nuttx/
(1) Memory Managment (mm/) (1) Memory Managment (mm/)
(2) Signals (sched/, arch/) (2) Signals (sched/, arch/)
(1) pthreads (sched/) (1) pthreads (sched/)
(1) C++ Support (2) C++ Support
(5) Binary loaders (binfmt/) (5) Binary loaders (binfmt/)
(16) Network (net/, drivers/net) (16) Network (net/, drivers/net)
(2) USB (drivers/usbdev, drivers/usbhost) (2) USB (drivers/usbdev, drivers/usbhost)
@ -153,6 +153,21 @@ o pthreads (sched/)
o C++ Support o C++ Support
^^^^^^^^^^^ ^^^^^^^^^^^
Description: The argument of the 'new' operators should take a type of
size_t (see libxx/libxx_new.cxx and libxx/libxx_newa.cxx). But
size_t has an unknown underlying. In the nuttx sys/types.h
header file, size_t is typed as uint32_t (which is determined by
architecture-specific logic). But the C++ compiler may believe
that size_t is of a different type resulting in compilation errors
in the operator. Using the underlying integer type Instead of
size_t seems to resolve the compilation issues.
Status: Kind of open. There is a workaround. Setting CONFIG_CXX_NEWLONG=y
will define the operators with argument of type unsigned long;
Setting CONFIG_CXX_NEWLONG=n will define the operators with argument
of type unsigned int. But this is pretty ugly! A better solution
would be to get ahold of the compilers definition of size_t.
Priority: Low.
Description: Need to call static constructors Description: Need to call static constructors
Status: Open Status: Open
Priority: Low, depends on toolchain. Call to gcc's built-in static Priority: Low, depends on toolchain. Call to gcc's built-in static

View File

@ -58,14 +58,22 @@
// Name: new // Name: new
// //
// NOTE: // NOTE:
// This should take a type of size_t, which for ARM GCC is unsigned long. // This should take a type of size_t. But size_t has an unknown underlying
// but size_t may actually be a different different type, in sys/include.h, // type. In the nuttx sys/types.h header file, size_t is typed as uint32_t
// it is typed as uint32_t. Need to REVISIT this. // (which is determined by architecture-specific logic). But the C++
// compiler may believe that size_t is of a different type resulting in
// compilation errors in the operator. Using the underlying integer type
// instead of size_t seems to resolve the compilation issues. Need to
// REVISIT this.
// //
//*************************************************************************** //***************************************************************************
//void *operator new(size_t nbytes) //void *operator new(size_t nbytes)
#ifdef CONFIG_CXX_NEWLONG
void *operator new(unsigned long nbytes) void *operator new(unsigned long nbytes)
#else
void *operator new(unsigned int nbytes)
#endif
{ {
// We have to allocate something // We have to allocate something

View File

@ -58,18 +58,26 @@
// Name: new // Name: new
// //
// NOTE: // NOTE:
// This should take a type of size_t, which for ARM GCC is unsigned long. // This should take a type of size_t. But size_t has an unknown underlying
// but size_t may actually be a different different type, in sys/include.h, // type. In the nuttx sys/types.h header file, size_t is typed as uint32_t
// it is typed as uint32_t. Need to REVISIT this. // (which is determined by architecture-specific logic). But the C++
// compiler may believe that size_t is of a different type resulting in
// compilation errors in the operator. Using the underlying integer type
// instead of size_t seems to resolve the compilation issues. Need to
// REVISIT this.
// //
//*************************************************************************** //***************************************************************************
//void *operator new[](size_t size) //void *operator new[](size_t size)
#ifdef CONFIG_CXX_NEWLONG
void *operator new[](unsigned long nbytes) void *operator new[](unsigned long nbytes)
#else
void *operator new[](unsigned int nbytes)
#endif
{ {
// We have to allocate something // We have to allocate something
if (nbytes< 1) if (nbytes < 1)
{ {
nbytes = 1; nbytes = 1;
} }