e576bb | 2002-10-11 | Martin Nilsson | |
|
24ddc7 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
9aa6fa | 1997-05-19 | Fredrik Hübinette (Hubbe) | | #ifndef MEMORY_H
#define MEMORY_H
#include "global.h"
|
3e625c | 1998-10-11 | Fredrik Hübinette (Hubbe) | | #include "stralloc.h"
|
9aa6fa | 1997-05-19 | Fredrik Hübinette (Hubbe) | |
|
762f97 | 2003-01-26 | Mirar (Pontus Hagland) | | #ifdef USE_VALGRIND
|
b40824 | 2006-07-02 | Martin Stjernholm | | #define HAVE_VALGRIND_MACROS
|
a42e08 | 2003-04-26 | Marcus Agehall | | #ifdef HAVE_MEMCHECK_H
#include <memcheck.h>
|
b8c513 | 2003-05-13 | Martin Stjernholm | | #elif defined(HAVE_VALGRIND_MEMCHECK_H)
#include <valgrind/memcheck.h>
#elif defined(HAVE_VALGRIND_H)
|
875ab5 | 2002-11-19 | Henrik Grubbström (Grubba) | | #include <valgrind.h>
|
b40824 | 2006-07-02 | Martin Stjernholm | | #else
#undef HAVE_VALGRIND_MACROS
|
b8c513 | 2003-05-13 | Martin Stjernholm | | #endif
|
9b1f03 | 2000-10-09 | Fredrik Hübinette (Hubbe) | |
|
b40824 | 2006-07-02 | Martin Stjernholm | | #endif /* USE_VALGRIND */
#ifdef HAVE_VALGRIND_MACROS
|
2a782d | 2008-06-02 | Martin Stjernholm | | #ifndef VALGRIND_MAKE_MEM_NOACCESS
#define VALGRIND_MAKE_MEM_NOACCESS VALGRIND_MAKE_NOACCESS
#define VALGRIND_MAKE_MEM_UNDEFINED VALGRIND_MAKE_WRITABLE
#define VALGRIND_MAKE_MEM_DEFINED VALGRIND_MAKE_READABLE
|
6cef10 | 2008-01-29 | Per Hedbor | | #endif
|
4281d2 | 2002-11-20 | Henrik Grubbström (Grubba) | |
|
7ca859 | 2002-11-23 | Martin Stjernholm | | #define PIKE_MEM_NA(lvalue) do { \
|
6546b2 | 2002-11-23 | Martin Stjernholm | | PIKE_MEM_NA_RANGE(&(lvalue), sizeof (lvalue)); \
|
7ca859 | 2002-11-23 | Martin Stjernholm | | } while (0)
#define PIKE_MEM_NA_RANGE(addr, bytes) do { \
|
f7d182 | 2017-06-25 | Martin Nilsson | | VALGRIND_MAKE_MEM_NOACCESS(addr, bytes); \
|
7ca859 | 2002-11-23 | Martin Stjernholm | | } while (0)
#define PIKE_MEM_WO(lvalue) do { \
|
6546b2 | 2002-11-23 | Martin Stjernholm | | PIKE_MEM_WO_RANGE(&(lvalue), sizeof (lvalue)); \
|
7ca859 | 2002-11-23 | Martin Stjernholm | | } while (0)
#define PIKE_MEM_WO_RANGE(addr, bytes) do { \
|
f7d182 | 2017-06-25 | Martin Nilsson | | VALGRIND_MAKE_MEM_UNDEFINED(addr, bytes); \
|
7ca859 | 2002-11-23 | Martin Stjernholm | | } while (0)
|
4281d2 | 2002-11-20 | Henrik Grubbström (Grubba) | |
|
7ca859 | 2002-11-23 | Martin Stjernholm | | #define PIKE_MEM_RW(lvalue) do { \
|
6546b2 | 2002-11-23 | Martin Stjernholm | | PIKE_MEM_RW_RANGE(&(lvalue), sizeof (lvalue)); \
|
7ca859 | 2002-11-23 | Martin Stjernholm | | } while (0)
#define PIKE_MEM_RW_RANGE(addr, bytes) do { \
|
f7d182 | 2017-06-25 | Martin Nilsson | | VALGRIND_MAKE_MEM_DEFINED(addr, bytes); \
|
7ca859 | 2002-11-23 | Martin Stjernholm | | } while (0)
|
4281d2 | 2002-11-20 | Henrik Grubbström (Grubba) | |
|
7ca859 | 2002-11-23 | Martin Stjernholm | | #define PIKE_MEM_RO(lvalue) do { \
|
6546b2 | 2002-11-23 | Martin Stjernholm | | PIKE_MEM_RO_RANGE(&(lvalue), sizeof (lvalue)); \
|
7ca859 | 2002-11-23 | Martin Stjernholm | | } while (0)
#define PIKE_MEM_RO_RANGE(addr, bytes) do { \
|
f7d182 | 2017-06-25 | Martin Nilsson | | VALGRIND_MAKE_MEM_DEFINED(addr, bytes); \
|
7ca859 | 2002-11-23 | Martin Stjernholm | | } while (0)
|
c30609 | 2003-02-16 | Martin Stjernholm | |
|
f09e48 | 2002-11-23 | Martin Stjernholm | | #define PIKE_MEM_CHECKER() RUNNING_ON_VALGRIND
|
2a782d | 2008-06-02 | Martin Stjernholm | |
#define PIKE_MEM_NOT_ADDR(lvalue) \
PIKE_MEM_NOT_ADDR_RANGE(&(lvalue), sizeof (lvalue))
#define PIKE_MEM_NOT_ADDR_RANGE(addr, bytes) \
VALGRIND_CHECK_MEM_IS_ADDRESSABLE(addr, bytes)
#define PIKE_MEM_NOT_DEF(lvalue) \
PIKE_MEM_NOT_DEF_RANGE(&(lvalue), sizeof (lvalue))
#define PIKE_MEM_NOT_DEF_RANGE(addr, bytes) \
VALGRIND_CHECK_MEM_IS_DEFINED(addr, bytes)
|
411bb5 | 2013-08-02 | Arne Goedeke | | #ifdef VALGRIND_CREATE_MEMPOOL
|
303609 | 2013-10-09 | Arne Goedeke | | # define PIKE_MEMPOOL_CREATE(a) VALGRIND_CREATE_MEMPOOL(a, 0, 0)
# define PIKE_MEMPOOL_ALLOC(a, p, l) VALGRIND_MEMPOOL_ALLOC(a, p, l)
# define PIKE_MEMPOOL_FREE(a, p, l) VALGRIND_MEMPOOL_FREE(a, p)
# define PIKE_MEMPOOL_DESTROY(a) VALGRIND_DESTROY_MEMPOOL(a)
|
411bb5 | 2013-08-02 | Arne Goedeke | | #else
|
8e9037 | 2014-09-05 | Arne Goedeke | | # define PIKE_MEMPOOL_CREATE(a) do {} while (0)
|
411bb5 | 2013-08-02 | Arne Goedeke | | # define PIKE_MEMPOOL_ALLOC(a, p, l) PIKE_MEM_WO_RANGE(p, l)
|
303609 | 2013-10-09 | Arne Goedeke | | # define PIKE_MEMPOOL_FREE(a, p, l) PIKE_MEM_NA_RANGE(p, l)
|
8e9037 | 2014-09-05 | Arne Goedeke | | # define PIKE_MEMPOOL_DESTROY(a) do {} while (0)
|
411bb5 | 2013-08-02 | Arne Goedeke | | #endif
|
8e9037 | 2014-09-05 | Arne Goedeke | | #define VALGRINDUSED(x) x
|
b40824 | 2006-07-02 | Martin Stjernholm | | #else /* !HAVE_VALGRIND_MACROS */
|
7ca859 | 2002-11-23 | Martin Stjernholm | |
#define PIKE_MEM_NA(lvalue) do {} while (0)
#define PIKE_MEM_NA_RANGE(addr, bytes) do {} while (0)
#define PIKE_MEM_WO(lvalue) do {} while (0)
#define PIKE_MEM_WO_RANGE(addr, bytes) do {} while (0)
#define PIKE_MEM_RW(lvalue) do {} while (0)
#define PIKE_MEM_RW_RANGE(addr, bytes) do {} while (0)
#define PIKE_MEM_RO(lvalue) do {} while (0)
#define PIKE_MEM_RO_RANGE(addr, bytes) do {} while (0)
|
f09e48 | 2002-11-23 | Martin Stjernholm | | #define PIKE_MEM_CHECKER() 0
|
2a782d | 2008-06-02 | Martin Stjernholm | | #define PIKE_MEM_NOT_ADDR(lvalue) 0
#define PIKE_MEM_NOT_ADDR_RANGE(addr, bytes) 0
#define PIKE_MEM_NOT_DEF(lvalue) 0
#define PIKE_MEM_NOT_DEF_RANGE(addr, bytes) 0
|
8e9037 | 2014-09-05 | Arne Goedeke | | #define PIKE_MEMPOOL_CREATE(a) do {} while (0)
#define PIKE_MEMPOOL_ALLOC(a, p, l) do {} while (0)
#define PIKE_MEMPOOL_FREE(a, p, l) do {} while (0)
#define PIKE_MEMPOOL_DESTROY(a) do {} while (0)
#define VALGRINDUSED(x) UNUSED(x)
|
7ca859 | 2002-11-23 | Martin Stjernholm | |
|
b40824 | 2006-07-02 | Martin Stjernholm | | #endif /* !HAVE_VALGRIND_MACROS */
|
4281d2 | 2002-11-20 | Henrik Grubbström (Grubba) | |
|
9aa6fa | 1997-05-19 | Fredrik Hübinette (Hubbe) | | #define MEMSEARCH_LINKS 512
struct link
{
struct link *next;
|
e0755c | 2000-08-15 | Henrik Grubbström (Grubba) | | INT32 key;
ptrdiff_t offset;
|
9aa6fa | 1997-05-19 | Fredrik Hübinette (Hubbe) | | };
enum methods {
no_search,
use_memchr,
memchr_and_memcmp,
|
db4a40 | 1998-10-09 | Fredrik Hübinette (Hubbe) | | hubbe_search,
boyer_moore
|
9aa6fa | 1997-05-19 | Fredrik Hübinette (Hubbe) | | };
struct mem_searcher
{
enum methods method;
char *needle;
|
61a8ec | 2000-08-11 | Henrik Grubbström (Grubba) | | size_t needlelen;
|
790114 | 2000-08-15 | Henrik Grubbström (Grubba) | | size_t hsize, max;
|
9aa6fa | 1997-05-19 | Fredrik Hübinette (Hubbe) | | struct link links[MEMSEARCH_LINKS];
struct link *set[MEMSEARCH_LINKS];
};
|
0a146b | 2013-03-12 | Arne Goedeke | |
|
01b921 | 2016-01-12 | Per Hedbor | | static inline void ATTRIBUTE((unused)) * guaranteed_memset(void * p, int c, size_t n) {
|
dc57c8 | 2013-04-19 | Per Hedbor | | volatile char * _p = (char *)p;
|
0a146b | 2013-03-12 | Arne Goedeke | | while (n--) *_p++ = c;
|
dc57c8 | 2013-04-19 | Per Hedbor | | return (void *)p;
|
0a146b | 2013-03-12 | Arne Goedeke | | }
|
9b1f03 | 2000-10-09 | Fredrik Hübinette (Hubbe) | |
|
8e936c | 2015-08-06 | Per Hedbor | | #ifdef __x86_64__
|
30f5b2 | 2016-04-09 | Martin Nilsson | | static inline UINT64 ATTRIBUTE((unused)) get_unaligned64(const void *ptr) {
return *(UINT64*)ptr;
|
8e936c | 2015-08-06 | Per Hedbor | | }
|
01b921 | 2016-01-12 | Per Hedbor | | static inline unsigned INT32 ATTRIBUTE((unused)) get_unaligned32(const void *ptr) {
|
8e936c | 2015-08-06 | Per Hedbor | | return *(unsigned INT32*)ptr;
}
|
01b921 | 2016-01-12 | Per Hedbor | | static inline unsigned INT16 ATTRIBUTE((unused)) get_unaligned16(const void *ptr) {
|
8e936c | 2015-08-06 | Per Hedbor | | return *(unsigned INT16*)ptr;
}
|
01b921 | 2016-01-12 | Per Hedbor | | static inline void ATTRIBUTE((unused)) set_unaligned16(void *ptr,unsigned INT16 val) {
|
8e936c | 2015-08-06 | Per Hedbor | | *(unsigned INT16*)ptr = val;
}
|
01b921 | 2016-01-12 | Per Hedbor | | static inline void ATTRIBUTE((unused)) set_unaligned32(void *ptr,unsigned INT32 val) {
|
8e936c | 2015-08-06 | Per Hedbor | | *(unsigned INT32*)ptr = val;
}
|
30f5b2 | 2016-04-09 | Martin Nilsson | | static inline void ATTRIBUTE((unused)) set_unaligned64(void *ptr,UINT64 val) {
*(UINT64*)ptr = val;
|
8e936c | 2015-08-06 | Per Hedbor | | }
#else
|
30f5b2 | 2016-04-09 | Martin Nilsson | | static inline UINT64 ATTRIBUTE((unused)) get_unaligned64(const void * ptr) {
UINT64 v;
|
e74470 | 2014-01-11 | Tobias S. Josefowitz | | memcpy(&v, ptr, 8);
return v;
}
|
30f5b2 | 2016-04-09 | Martin Nilsson | | static inline void ATTRIBUTE((unused)) set_unaligned64(void * ptr, UINT64 v) {
|
e74470 | 2014-01-11 | Tobias S. Josefowitz | | memcpy(ptr, &v, 8);
}
|
42c252 | 2017-07-17 | Martin Nilsson | | static inline unsigned INT32 ATTRIBUTE((unused)) get_unaligned32(const void * ptr) {
|
e74470 | 2014-01-11 | Tobias S. Josefowitz | | unsigned INT32 v;
memcpy(&v, ptr, 4);
return v;
}
|
01b921 | 2016-01-12 | Per Hedbor | | static inline void ATTRIBUTE((unused)) set_unaligned32(void * ptr, unsigned INT32 v) {
|
e74470 | 2014-01-11 | Tobias S. Josefowitz | | memcpy(ptr, &v, 4);
}
|
01b921 | 2016-01-12 | Per Hedbor | | static inline unsigned INT16 ATTRIBUTE((unused)) get_unaligned16(const void * ptr) {
|
e74470 | 2014-01-11 | Tobias S. Josefowitz | | unsigned INT16 v;
memcpy(&v, ptr, 2);
return v;
}
|
01b921 | 2016-01-12 | Per Hedbor | | static inline void ATTRIBUTE((unused)) set_unaligned16(void * ptr, unsigned INT16 v) {
|
e74470 | 2014-01-11 | Tobias S. Josefowitz | | memcpy(ptr, &v, 2);
}
|
8e936c | 2015-08-06 | Per Hedbor | | #endif
|
e74470 | 2014-01-11 | Tobias S. Josefowitz | |
|
9b1f03 | 2000-10-09 | Fredrik Hübinette (Hubbe) | | #include "pike_search.h"
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | #include "block_alloc_h.h"
|
13ee8f | 2006-08-09 | Martin Stjernholm | | extern int page_size;
|
d0e231 | 1999-10-24 | Henrik Grubbström (Grubba) | |
|
66d928 | 2011-05-01 | Per Hedbor | | PMOD_EXPORT ptrdiff_t pcharp_memcmp(PCHARP a, PCHARP b, int sz) ATTRIBUTE((pure));
PMOD_EXPORT long pcharp_strlen(PCHARP a) ATTRIBUTE((pure));
|
98c030 | 2014-09-03 | Martin Nilsson | | #define MEMCHR0 memchr
|
66d928 | 2011-05-01 | Per Hedbor | | p_wchar1 *MEMCHR1(p_wchar1 *p, p_wchar2 c, ptrdiff_t e) ATTRIBUTE((pure));
p_wchar2 *MEMCHR2(p_wchar2 *p, p_wchar2 c, ptrdiff_t e) ATTRIBUTE((pure));
|
84f895 | 2000-08-16 | Henrik Grubbström (Grubba) | | PMOD_EXPORT void reverse(char *memory, size_t nitems, size_t size);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void reorder(char *memory, INT32 nitems, INT32 size,INT32 *order);
|
34ffc0 | 2011-05-15 | Per Hedbor | |
|
e3b3a2 | 2016-06-28 | Henrik Grubbström (Grubba) | | size_t hashmem_siphash24( const void *s, size_t len );
|
34ffc0 | 2011-05-15 | Per Hedbor | | #if (defined(__i386__) || defined(__amd64__)) && defined(__GNUC__)
|
b7e55a | 2013-05-17 | Per Hedbor | | extern PMOD_EXPORT
|
34ffc0 | 2011-05-15 | Per Hedbor | | #ifdef __i386__
|
356d23 | 2014-10-30 | Henrik Grubbström (Grubba) | | ATTRIBUTE((fastcall))
|
34ffc0 | 2011-05-15 | Per Hedbor | | #endif
|
b7e55a | 2013-05-17 | Per Hedbor | | size_t (*low_hashmem)(const void *, size_t, size_t, size_t);
|
34ffc0 | 2011-05-15 | Per Hedbor | | #else
|
0169c6 | 2011-12-30 | Henrik Grubbström (Grubba) | | PMOD_EXPORT size_t low_hashmem(const void *, size_t len, size_t mlen, size_t key) ATTRIBUTE((pure));
|
34ffc0 | 2011-05-15 | Per Hedbor | | #endif
|
0169c6 | 2011-12-30 | Henrik Grubbström (Grubba) | | PMOD_EXPORT size_t hashmem(const void *, size_t len, size_t mlen) ATTRIBUTE((pure));
|
66d928 | 2011-05-01 | Per Hedbor | | |
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void memfill(char *to,
|
9aa6fa | 1997-05-19 | Fredrik Hübinette (Hubbe) | | INT32 tolen,
char *from,
INT32 fromlen,
INT32 offset);
|
66d928 | 2011-05-01 | Per Hedbor | | */
|
377d05 | 2015-05-26 | Henrik Grubbström (Grubba) | | #define MALLOC_FUNCTION ATTRIBUTE((malloc)) PIKE_WARN_UNUSED_RESULT_ATTRIBUTE
|
0ce2f7 | 2011-05-10 | Per Hedbor | |
PMOD_EXPORT void *debug_xalloc(size_t size) MALLOC_FUNCTION;
PMOD_EXPORT void *debug_xmalloc(size_t s) MALLOC_FUNCTION;
|
f1792d | 2000-12-13 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void debug_xfree(void *mem);
|
0ce2f7 | 2011-05-10 | Per Hedbor | | PMOD_EXPORT void *debug_xrealloc(void *m, size_t s) MALLOC_FUNCTION;
PMOD_EXPORT void *debug_xcalloc(size_t n, size_t s) MALLOC_FUNCTION;
|
cab1f3 | 2014-11-13 | Arne Goedeke | | PMOD_EXPORT void *xalloc_aligned(size_t size, size_t alignment) MALLOC_FUNCTION;
|
aa432a | 2013-08-01 | Arne Goedeke | |
#define PIKE_ALIGNTO(x, a) (((x) + (a)-1) & ~((a)-1))
|
9aa6fa | 1997-05-19 | Fredrik Hübinette (Hubbe) | |
|
0ce2f7 | 2011-05-10 | Per Hedbor | | PMOD_EXPORT void *mexec_alloc(size_t sz) MALLOC_FUNCTION;
PMOD_EXPORT void *mexec_realloc(void *ptr, size_t sz) MALLOC_FUNCTION;
PMOD_EXPORT void mexec_free(void *ptr);
|
13ee8f | 2006-08-09 | Martin Stjernholm | | void init_pike_memory (void);
|
092903 | 2006-08-09 | Martin Stjernholm | | void exit_pike_memory (void);
|
53fde7 | 2005-05-25 | Henrik Grubbström (Grubba) | |
|
0e26b6 | 2013-07-01 | Arne Goedeke | | #ifdef DEBUG_MALLOC
PMOD_EXPORT void * system_malloc(size_t) MALLOC_FUNCTION;
PMOD_EXPORT void system_free(void *);
#endif
|
db4a40 | 1998-10-09 | Fredrik Hübinette (Hubbe) | | #undef BLOCK_ALLOC
|
52068e | 2000-12-01 | Henrik Grubbström (Grubba) | | #ifdef HANDLES_UNALIGNED_MEMORY_ACCESS
#define DO_IF_ELSE_UNALIGNED_MEMORY_ACCESS(IF, ELSE) IF
#else /* !HANDLES_UNALIGNED_MEMORY_ACCESS */
#define DO_IF_ELSE_UNALIGNED_MEMORY_ACCESS(IF, ELSE) ELSE
#endif /* HANDLES_UNALIGNED_MEMORY_ACCESS */
|
092903 | 2006-08-09 | Martin Stjernholm | |
#if defined(MEXEC_USES_MMAP) || defined (_WIN32)
#define USE_MY_MEXEC_ALLOC
#endif
|
9aa6fa | 1997-05-19 | Fredrik Hübinette (Hubbe) | | #endif
|