Commit Graph
31 Commits
Author SHA1 Message Date
Thomas Watson d11a4356d3 AP_Common: effectively wrap malloc to zero memory in SITL under Cygwin
This currently does not work, in particular resulting in scripting
raising an internal error on stop because it doesn't think all the
memory is freed because the allocated counter doesn't start out at zero
because the zero on allocation behavior is broken.

Cygwin has some support for overriding `malloc`
(https://cygwin.com/faq/faq.html#faq.programming.own-malloc), but when
this is attempted some logic in the runtime detects this case then
forwards all allocator calls (`free`/`calloc`/etc.) to the user provided
allocation functions. If only `malloc` is overridden, the other
functions just call themselves recursively until the stack overflows.
There is no supported way to use the original Cygwin allocator while
overriding `malloc`, but we do not want to include our own allocator
just for Cygwin.

Fortunately, in some sense, there is an unsupported way, and our goal
can be achieved by overwriting an internal pointer with our `malloc`
implementation after the Cygwin runtime logic checks and believes that
no overwrite has occurred, thereby never enabling the redirection and
allowing non-`malloc` functions to still work. Our version then calls
`calloc` to do the allocation and zeroing. Note that the old wrap of
`_malloc_r` was faulty as that symbol is no longer used by newlib; it's
just `#define`d to `malloc` these days.

Tested that at least the scripting issue is fixed by failing to
replicate it, plus tracing execution with `gdb` to confirm that our
wrapper function is executed and does its job.

The correct solution is to not make ArduPilot call `malloc` at all. We
still cannot safely change the semantics to make it returned zeroed
memory. This is quite the hack!
2025-09-05 09:20:24 +01:00
Thomas Watson 98ebe2a28b AP_Common: add fully defined mem_realloc function
* named differently to emphasize different behavior

* always properly zeros newly available memory including trailing bytes

* fully defines new_size == 0

* always allocating and copying matches all existing implementations
  except linux, so performance and memory usage won't be affected
2025-07-15 09:51:25 +10:00
Andrew Tridgell 4daca86ba1 AP_Common: fixed cygwin for non-SITL builds 2024-09-04 11:12:45 +10:00
Andrew Tridgell 3a6024e8ab AP_Common: support QURT 2024-07-12 15:56:48 +10:00
Andrew Tridgell db19bce1d2 AP_Common: wrap _malloc_r on cygwin
fixes dual allocation heap bug
See https://cygwin.com/pipermail/cygwin/2000-July/038916.html
2024-07-07 07:11:59 +10:00
Andrew Tridgell aa2f885e2f AP_Common: added checks for new without std::nothrow
and add NEW_NOTHROW macro
2024-06-04 09:20:21 +10:00
Mathieu OTHACEHE 152edf7189 Global: remove mode line from headers
Using a global .dir-locals.el file is a better alternative than
reincluding the same emacs header in every file of the project.
2016-10-24 09:42:01 -02:00
Lucas De Marchi 7703e5f1d1 AP_Common: remove support for flymaple 2016-05-23 21:49:45 -03:00
Lucas De Marchi b734777b95 AP_Common: remove checks for HAL_BOARD_APM2 and HAL_BOARD_APM1 2015-11-04 12:14:11 +11:00
Gustavo Jose de Sousa e32ad93ae3 AP_Common: standardize inclusion of libaries headers
This commit changes the way libraries headers are included in source files:

 - If the header is in the same directory the source belongs to, so the
 notation '#include ""' is used with the path relative to the directory
 containing the source.

 - If the header is outside the directory containing the source, then we use
 the notation '#include <>' with the path relative to libraries folder.

Some of the advantages of such approach:

 - Only one search path for libraries headers.

 - OSs like Windows may have a better lookup time.
2015-08-11 16:28:42 +10:00
Andrew Tridgell 21c8a2d94a AP_Common: override new and delete on all platforms to zero memory
this guarantees that all classes get zero initial members when
they are dynamically allocated.
2015-06-26 15:55:19 +10:00
Andrew Tridgell 13cdc56a5a AP_Common: removed SMACCM support 2013-09-26 22:38:31 +10:00
Mike McCauley 8f61a36e58 AP_Common: Flymaple compatibility 2013-09-24 13:33:25 +10:00
Andrew Tridgell 933088b95a AP_Common: fixed indent-tabs-mode 2013-05-30 09:52:38 +10:00
James Bielman a4af314b57 Add AP_HAL_SMACCM implementation.
- Add a board definition for SMACCMPilot.
- Support the SMACCM HAL in required utility libraries.
2013-01-03 13:48:06 -08:00
Andrew Tridgell 57bf6531b4 Progmem: use right CONFIG_HAL_BOARD #ifdefs 2013-01-01 18:26:12 +11:00
Andrew Tridgell 3a2e138994 AP_Common: no c++ magic for PX4 build 2012-12-20 14:51:28 +11:00
Pat Hickey a4f1f6a5db AP_Progmem: fix dependencies for all sketches touched by AP_HAL_AVR 2012-12-20 14:51:28 +11:00
Pat Hickey f58935d1e7 AP_Common c++ lib: eliminate freeMemory and displayMemory
* also, no more error message in pure virtual call
2012-12-20 14:51:28 +11:00
Pat Hickey 0d342a3293 AP_Common: use EXCLUDECORE macro to hack some debug messages away 2012-12-20 14:51:19 +11:00
uncrustify c18e73a54d uncrustify libraries/AP_Common/c++.cpp 2012-08-21 19:00:51 -07:00
Randy Mackay ed19c25a97 Arduino 1.0 - changed all #includes of "WProgram.h", "wiring.h" and "WConstants.h to "Arduino.h".
Modified FastSerial's write function to return size_t (number of bytes written).
2012-01-28 12:25:47 +09:00
James Goppert 77da85648d Clean up formatting for AP_Common 2011-10-28 14:43:43 -04:00
Andrew Tridgell 00d52a8bd7 ap_common: use intptr_t for pointer casts
this allows building on systems with pointers that aren't 16 bits long
2011-10-09 22:08:59 +11:00
james.goppert 634f2734b5 Added AP_Controller library.
git-svn-id: https://arducopter.googlecode.com/svn/trunk@1379 f9c3cf11-9bcb-44bc-f272-b75c42450872
2010-12-31 06:20:28 +00:00
james.goppert 86feb8bf7b Fixed issues with RcChannel EEPROM var ownership.
git-svn-id: https://arducopter.googlecode.com/svn/trunk@1369 f9c3cf11-9bcb-44bc-f272-b75c42450872
2010-12-30 05:25:28 +00:00
DrZiplok 632d0f574a Don't actually implement __cxa_pure_virtual, we'd prefer to have link-time errors rather than classes with pure virtual functions.
git-svn-id: https://arducopter.googlecode.com/svn/trunk@1341 f9c3cf11-9bcb-44bc-f272-b75c42450872
2010-12-28 23:33:27 +00:00
DrZiplok 9b1863f4b2 operator new[] should return a zeroed class object just like operator new does.
git-svn-id: https://arducopter.googlecode.com/svn/trunk@1337 f9c3cf11-9bcb-44bc-f272-b75c42450872
2010-12-28 23:29:46 +00:00
james.goppert 125b971173 Updated mavlink added eeprom class.
git-svn-id: https://arducopter.googlecode.com/svn/trunk@1239 f9c3cf11-9bcb-44bc-f272-b75c42450872
2010-12-23 23:02:51 +00:00
DrZiplok d2a2ee0fd8 More runtime magic; this time support required for static class objects at function scope.
git-svn-id: https://arducopter.googlecode.com/svn/trunk@855 f9c3cf11-9bcb-44bc-f272-b75c42450872
2010-11-18 17:52:41 +00:00
DrZiplok 23ccff2ccd Add support for 'new' and 'delete', so we can cons things on the fly.
git-svn-id: https://arducopter.googlecode.com/svn/trunk@668 f9c3cf11-9bcb-44bc-f272-b75c42450872
2010-10-17 04:02:06 +00:00