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 { \
|
2a782d | 2008-06-02 | Martin Stjernholm | | VALGRIND_DISCARD(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 { \
|
2a782d | 2008-06-02 | Martin Stjernholm | | VALGRIND_DISCARD(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 { \
|
2a782d | 2008-06-02 | Martin Stjernholm | | VALGRIND_DISCARD(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 { \
|
2a782d | 2008-06-02 | Martin Stjernholm | | VALGRIND_DISCARD(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)
|
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
|
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];
};
|
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));
#define MEMCHR0 MEMCHR
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 | |
#if (defined(__i386__) || defined(__amd64__)) && defined(__GNUC__)
#ifdef __i386__
__attribute__((fastcall))
#endif
size_t (*hashmem)(const void *, size_t, size_t);
#else
PMOD_EXPORT size_t hashmem(const void *, size_t len, size_t mlen) ATTRIBUTE((pure));
#endif
|
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 | | */
|
0ce2f7 | 2011-05-10 | Per Hedbor | | #define MALLOC_FUNCTION ATTRIBUTE((malloc)) ATTRIBUTE((warn_unused_result))
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;
|
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) | |
|
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
|