Memory-allocation abstraction layer and buffer-based allocator added
diff --git a/include/polarssl/config.h b/include/polarssl/config.h
index ae973ed..d2387b0 100644
--- a/include/polarssl/config.h
+++ b/include/polarssl/config.h
@@ -402,6 +402,32 @@
  */
 
 /**
+ * \def POLARSSL_MEMORY_DEBUG
+ *
+ * Enable debugging of buffer allocator memory issues. Automatically prints
+ * (to stderr) all (fatal) messages on memory allocation issues. Enables
+ * function for 'debug output' of allocated memory.
+ *
+ * Requires: POLARSSL_MEMORY_BUFFER_ALLOC_C
+ *           fprintf()
+ *
+ * Uncomment this macro to let the buffer allocator print out error messages.
+#define POLARSSL_MEMORY_DEBUG
+*/
+
+/**
+ * \def POLARSSL_MEMORY_BACKTRACE
+ *
+ * Include backtrace information with each allocated block.
+ *
+ * Requires: POLARSSL_MEMORY_BUFFER_ALLOC_C
+ *           GLIBC-compatible backtrace() an backtrace_symbols() support
+ *
+ * Uncomment this macro to include backtrace information
+#define POLARSSL_MEMORY_BACKTRACE
+ */
+
+/**
  * \def POLARSSL_PKCS1_V21
  *
  * Requires: POLARSSL_MD_C, POLARSSL_RSA_C
@@ -900,6 +926,32 @@
 #define POLARSSL_MD5_C
 
 /**
+ * \def POLARSSL_MEMORY_C
+ *
+ * Enable the memory allocation layer.
+ * By default PolarSSL uses the system-provided malloc() and free().
+ * (As long as POLARSSL_MEMORY_STDMALLOC and POLARSSL_MEMORY_STDFREE
+ * are defined and unmodified)
+ *
+ * This allows different allocators (self-implemented or provided)
+ *
+ * Enable this layer to allow use of alternative memory allocators.
+#define POLARSSL_MEMORY_C
+ */
+
+/**
+ * The buffer allocator implementation that makes use of a (stack) based
+ * buffer to 'allocate' dynamic memory. (replaces malloc() and free() calls)
+ *
+ * Module:  library/memory_buffer_alloc.c
+ *
+ * Requires: POLARSSL_MEMORY_C
+ *
+ * Enable this module to enable the buffer memory allocator.
+#define POLARSSL_MEMORY_BUFFER_ALLOC_C
+ */
+
+/**
  * \def POLARSSL_NET_C
  *
  * Enable the TCP/IP networking routines.
@@ -1231,6 +1283,11 @@
 #define ENTROPY_MAX_SOURCES                20 /**< Maximum number of sources supported */
 #define ENTROPY_MAX_GATHER                128 /**< Maximum amount requested from entropy sources */
 
+// Memory options
+#define MEMORY_ALIGN_MULTIPLE               4 /**< Align on multiples of this value */
+#define POLARSSL_MEMORY_STDMALLOC      malloc /**< Default allocator to use, can be undefined */
+#define POLARSSL_MEMORY_STDFREE          free /**< Default free to use, can be undefined */
+
 // SSL Cache options
 //
 #define SSL_CACHE_DEFAULT_TIMEOUT       86400 /**< 1 day  */
@@ -1301,6 +1358,10 @@
 #error "POLARSSL_KEY_EXCHANGE_RSA_ENABLED defined, but not all prerequisites"
 #endif
 
+#if defined(POLARSSL_MEMORY_BUFFER_ALLOC_C) && !defined(POLARSSL_MEMORY_C)
+#error "POLARSSL_MEMORY_BUFFER_ALLOC_C defined, but not all prerequisites"
+#endif
+
 #if defined(POLARSSL_PBKDF2_C) && !defined(POLARSSL_MD_C)
 #error "POLARSSL_PBKDF2_C defined, but not all prerequisites"
 #endif