On (09/27/12 00:09), Magnus Fromreide wrote:
> That they fail to throw exceptions from new is no reason to disable
> set_new_handler, the newhandler is called by the runtime on out of memory
> and is intended to allow the user to try fixing the issue. This is true for
> the noexcept version as well. Is this yet another incompatibility?
>


right. the funny thing is, guess what, gcc actually has "#ifdef __EXCEPTIONS"
within operator new()

 44 _GLIBCXX_WEAK_DEFINITION void *
 45 operator new (std::size_t sz) _GLIBCXX_THROW (std::bad_alloc)
 46 {
 47   void *p;
 48 
 49   /* malloc (0) is unpredictable; avoid it.  */
 50   if (sz == 0)
 51     sz = 1;
 52   p = (void *) malloc (sz);
 53   while (p == 0)
 54     {
 55       new_handler handler = __new_handler;
 56       if (! handler)
 57 #ifdef __EXCEPTIONS
 58         throw bad_alloc();
 59 #else
 60         std::abort();
 61 #endif
 62       handler ();
 63       p = (void *) malloc (sz);
 64     }
 65 
 66   return p;
 67 }


It tourned out, that __EXCEPTIONS with us (for operator new and STL) since 2001
"2001-02-15  Benjamin Kosnik  <b...@redhat.com>"

So, I guess this is how Google has came up with the idea of C++ w/o exceptions.

Wow.

        -ss

 
> > +/* define stubs for C++ exception handling */
> > +#define try        if (true)
> > +#define catch(x)   if (false)
> 
> If you should do this then I think it should be spelled
> 
> #define try if (true)
> #define catch else if (false)
> 
> in order to not break
> 
> if (condition)
>     try {
>     } catch(type variable) {
>     }
> 
> but it still breaks the syntax for it which can be shown by simply adding an
> else clause to the if statement.
> 
> Oh, and furthermore I consider that Android needs a C++ compiler.
> 
> > +
> > +/* Define __NR_perf_event_open if not already defined */
> > +#if __arm__
> > +#ifndef __NR_perf_event_open
> > +#define __NR_perf_event_open    364
> > +#endif
> > +#endif
> > +
> > +/*
> > + * bionic libc mbstowcs version returns zero when max parameter
> > + * is zero, resulting infinite loops in powertop source. Add
> > + * mbstowcs wrapper to fix it.
> > + */
> > +namespace pandroid {
> > +   extern "C" inline size_t mbstowcs(wchar_t *dst,
> > +                   const char *src, size_t len)
> > +   {
> > +           return ::mbstowcs(dst, src, ::strlen(src));
> > +   }
> > +}
> > +
> > +#define mbstowcs(dst, src, len)            pandroid::mbstowcs(dst, src, 
> > len)
> 
> Still broken.
> If dst isn't a NULL pointer then len is the limit on the length of the
> destination buffer. In throwing away this you open up for stack smashing
> attacks.
> 

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to