diff options
author | Zeev Suraski <zeev@php.net> | 1999-08-28 10:18:54 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 1999-08-28 10:18:54 +0000 |
commit | cda27ae9acadf46ace265f5e53900680a21c65f8 (patch) | |
tree | 20e3a718538b510def12bea41d0ee5d7e7dd5f17 | |
parent | 023cb6474bb81f64d607acb36302362c01b8fe4f (diff) | |
download | php-git-cda27ae9acadf46ace265f5e53900680a21c65f8.tar.gz |
Beef up debug macros
-rw-r--r-- | Zend/zend.h | 24 | ||||
-rw-r--r-- | Zend/zend_alloc.c | 63 | ||||
-rw-r--r-- | Zend/zend_alloc.h | 57 | ||||
-rw-r--r-- | Zend/zend_variables.c | 6 |
4 files changed, 77 insertions, 73 deletions
diff --git a/Zend/zend.h b/Zend/zend.h index 1b183193c8..a8f2104287 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -48,19 +48,31 @@ #endif #ifdef ZEND_DEBUG -#define ZEND_FILE_LINE_D char *__zend_filename, uint __zend_lineno -#define ZEND_FILE_LINE_DC , char *__zend_filename, uint __zend_lineno -#define ZEND_FILE_LINE_RELAY_C __zend_filename, __zend_lineno -#define ZEND_FILE_LINE_RELAY_CC , __zend_filename, __zend_lineno -#define ZEND_FILE_LINE_C __FILE__, __LINE__ -#define ZEND_FILE_LINE_CC , __FILE__, __LINE__ +#define ZEND_FILE_LINE_D char *__zend_filename, uint __zend_lineno +#define ZEND_FILE_LINE_DC , ZEND_FILE_LINE_D +#define ZEND_FILE_LINE_ORIG_D char *__zend_orig_filename, uint __zend_orig_lineno +#define ZEND_FILE_LINE_ORIG_DC , ZEND_FILE_LINE_ORIG_D +#define ZEND_FILE_LINE_RELAY_C __zend_filename, __zend_lineno +#define ZEND_FILE_LINE_RELAY_CC , ZEND_FILE_LINE_RELAY_C +#define ZEND_FILE_LINE_C __FILE__, __LINE__ +#define ZEND_FILE_LINE_CC , ZEND_FILE_LINE_C +#define ZEND_FILE_LINE_EMPTY_C NULL, 0 +#define ZEND_FILE_LINE_EMPTY_CC , ZEND_FILE_LINE_EMPTY_C +#define ZEND_FILE_LINE_ORIG_RELAY_C __zend_orig_filename, __zend_orig_lineno +#define ZEND_FILE_LINE_ORIG_RELAY_CC , ZEND_FILE_LINE_ORIG_RELAY_C #else #define ZEND_FILE_LINE_D #define ZEND_FILE_LINE_DC +#define ZEND_FILE_LINE_ORIG_D +#define ZEND_FILE_LINE_ORIG_DC #define ZEND_FILE_LINE_RELAY_C #define ZEND_FILE_LINE_RELAY_CC #define ZEND_FILE_LINE_C #define ZEND_FILE_LINE_CC +#define ZEND_FILE_LINE_EMPTY_C +#define ZEND_FILE_LINE_EMPTY_CC +#define ZEND_FILE_LINE_ORIG_RELAY_C +#define ZEND_FILE_LINE_ORIG_RELAY_CC #endif /* ZEND_DEBUG */ diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c index 7992c4c93e..1f78882cc3 100644 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@ -97,7 +97,7 @@ static zend_alloc_globals alloc_globals; -ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC) +ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { mem_header *p; ALS_FETCH(); @@ -109,6 +109,8 @@ ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC) #if ZEND_DEBUG p->filename = __zend_filename; p->lineno = __zend_lineno; + p->orig_filename = __zend_orig_filename; + p->orig_lineno = __zend_orig_lineno; p->magic = MEM_BLOCK_START_MAGIC; p->reported = 0; #endif @@ -136,6 +138,8 @@ ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC) #if ZEND_DEBUG p->filename = __zend_filename; p->lineno = __zend_lineno; + p->orig_filename = __zend_orig_filename; + p->orig_lineno = __zend_orig_lineno; p->magic = MEM_BLOCK_START_MAGIC; p->reported = 0; *((long *)(((char *) p) + sizeof(mem_header)+size+PLATFORM_PADDING+END_ALIGNMENT(size))) = MEM_BLOCK_END_MAGIC; @@ -148,13 +152,13 @@ ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC) } -ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC) +ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { mem_header *p = (mem_header *) ((char *)ptr - sizeof(mem_header) - PLATFORM_PADDING); ALS_FETCH(); #if ZEND_DEBUG - if (!_mem_block_check(ptr, 1 ZEND_FILE_LINE_RELAY_CC)) { + if (!_mem_block_check(ptr, 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC)) { return; } memset(ptr, 0x5a, p->size); @@ -180,17 +184,13 @@ ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC) } -ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC) +ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { void *p; int final_size=size*nmemb; HANDLE_BLOCK_INTERRUPTIONS(); -#if ZEND_DEBUG - p = _emalloc(final_size ZEND_FILE_LINE_RELAY_CC); -#else - p = emalloc(final_size); -#endif + p = _emalloc(final_size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); if (!p) { HANDLE_UNBLOCK_INTERRUPTIONS(); return (void *) p; @@ -201,18 +201,14 @@ ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC) } -ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LINE_DC) +ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { mem_header *p = (mem_header *) ((char *)ptr-sizeof(mem_header)-PLATFORM_PADDING); mem_header *orig = p; ALS_FETCH(); if (!ptr) { -#if ZEND_DEBUG - return _emalloc(size ZEND_FILE_LINE_RELAY_CC); -#else - return emalloc(size); -#endif + return _emalloc(size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); } HANDLE_BLOCK_INTERRUPTIONS(); REMOVE_POINTER_FROM_LIST(p); @@ -247,18 +243,14 @@ ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LIN } -ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC) +ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { int length; char *p; length = strlen(s)+1; HANDLE_BLOCK_INTERRUPTIONS(); -#if ZEND_DEBUG - p = (char *) _emalloc(length ZEND_FILE_LINE_RELAY_CC); -#else - p = (char *) emalloc(length); -#endif + p = (char *) _emalloc(length ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); if (!p) { HANDLE_UNBLOCK_INTERRUPTIONS(); return (char *)NULL; @@ -269,16 +261,12 @@ ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC) } -ZEND_API char *_estrndup(const char *s, uint length ZEND_FILE_LINE_DC) +ZEND_API char *_estrndup(const char *s, uint length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { char *p; HANDLE_BLOCK_INTERRUPTIONS(); -#if ZEND_DEBUG - p = (char *) _emalloc(length+1 ZEND_FILE_LINE_RELAY_CC); -#else - p = (char *) emalloc(length+1); -#endif + p = (char *) _emalloc(length+1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); if (!p) { HANDLE_UNBLOCK_INTERRUPTIONS(); return (char *)NULL; @@ -400,7 +388,7 @@ void zend_debug_alloc_output(char *format, ...) } -ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC) +ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { mem_header *p = (mem_header *) ((char *)ptr - sizeof(mem_header) - PLATFORM_PADDING); int no_cache_notice=0; @@ -419,6 +407,9 @@ ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC) zend_message_dispatcher(ZMSG_LOG_SCRIPT_NAME, NULL); zend_debug_alloc_output("---------------------------------------\n"); zend_debug_alloc_output("%s(%d) : Block 0x%0.8lX status:\n" ZEND_FILE_LINE_RELAY_CC, (long) p); + if (__zend_orig_filename) { + zend_debug_alloc_output("%s(%d) : Actual location (location was relayed)\n" ZEND_FILE_LINE_ORIG_RELAY_CC); + } zend_debug_alloc_output("%10s\t","Beginning: "); } @@ -433,7 +424,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC) zend_debug_alloc_output("Freed\n"); had_problems=1; } else { - return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC); + return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); } break; case MEM_BLOCK_CACHED_MAGIC: @@ -444,7 +435,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC) } } else { if (!no_cache_notice) { - return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC); + return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); } } break; @@ -452,7 +443,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC) if (!silent) { zend_debug_alloc_output("Overrun (magic=0x%0.8lX, expected=0x%0.8lX)\n", p->magic, MEM_BLOCK_START_MAGIC); } else { - return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC); + return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); } had_problems=1; valid_beginning=0; @@ -468,7 +459,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC) int i; if (silent) { - return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC); + return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); } had_problems=1; overflow_ptr = ((char *) p)+sizeof(mem_header)+p->size+PLATFORM_PADDING; @@ -510,7 +501,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC) } -ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC) +ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { mem_header *p; int errors=0; @@ -523,7 +514,7 @@ ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC) zend_debug_alloc_output("Full Memory Check at %s:%d\n" ZEND_FILE_LINE_RELAY_CC); while (p) { - if (!_mem_block_check((void *)((char *)p + sizeof(mem_header) + PLATFORM_PADDING), (silent?2:3) ZEND_FILE_LINE_RELAY_CC)) { + if (!_mem_block_check((void *)((char *)p + sizeof(mem_header) + PLATFORM_PADDING), (silent?2:3) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC)) { errors++; } p = p->pNext; @@ -534,13 +525,13 @@ ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC) #endif -ZEND_API void _persist_alloc(void *ptr ZEND_FILE_LINE_DC) +ZEND_API void _persist_alloc(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { mem_header *p = (mem_header *) ((char *)ptr-sizeof(mem_header)-PLATFORM_PADDING); ALS_FETCH(); #if ZEND_DEBUG - _mem_block_check(ptr, 1 ZEND_FILE_LINE_RELAY_CC); + _mem_block_check(ptr, 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); #endif HANDLE_BLOCK_INTERRUPTIONS(); diff --git a/Zend/zend_alloc.h b/Zend/zend_alloc.h index f64d86c1b7..d6e2b3b809 100644 --- a/Zend/zend_alloc.h +++ b/Zend/zend_alloc.h @@ -34,6 +34,8 @@ typedef struct _mem_header { char *filename; uint lineno; int reported; + char *orig_filename; + uint orig_lineno; #endif struct _mem_header *pNext; struct _mem_header *pLast; @@ -58,33 +60,33 @@ ZEND_API char *zend_strndup(const char *s, unsigned int length); BEGIN_EXTERN_C() -ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC); -ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC); -ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC); -ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LINE_DC); -ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC); -ZEND_API char *_estrndup(const char *s, unsigned int length ZEND_FILE_LINE_DC); -ZEND_API void _persist_alloc(void *ptr ZEND_FILE_LINE_DC); +ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); +ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); +ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); +ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); +ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); +ZEND_API char *_estrndup(const char *s, unsigned int length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); +ZEND_API void _persist_alloc(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); /* Standard wrapper macros */ -#define emalloc(size) _emalloc((size) ZEND_FILE_LINE_CC) -#define efree(ptr) _efree((ptr) ZEND_FILE_LINE_CC) -#define ecalloc(nmemb,size) _ecalloc((nmemb),(size) ZEND_FILE_LINE_CC) -#define erealloc(ptr,size) _erealloc((ptr),(size),0 ZEND_FILE_LINE_CC) -#define erealloc_recoverable(ptr,size) _erealloc((ptr),(size),1 ZEND_FILE_LINE_CC) -#define estrdup(s) _estrdup((s) ZEND_FILE_LINE_CC) -#define estrndup(s,length) _estrndup((s),(length) ZEND_FILE_LINE_CC) -#define persist_alloc(p) _persist_alloc((p) ZEND_FILE_LINE_CC) +#define emalloc(size) _emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) +#define efree(ptr) _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) +#define ecalloc(nmemb,size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) +#define erealloc(ptr,size) _erealloc((ptr), (size),0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) +#define erealloc_recoverable(ptr,size) _erealloc((ptr), (size),1 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) +#define estrdup(s) _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) +#define estrndup(s,length) _estrndup((s), (length) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) +#define persist_alloc(p) _persist_alloc((p) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) /* Relay wrapper macros */ -#define emalloc_rel(size) _emalloc((size) ZEND_FILE_LINE_RELAY_CC) -#define efree_rel(ptr) _efree((ptr) ZEND_FILE_LINE_RELAY_CC) -#define ecalloc_rel(nmemb, size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_RELAY_CC) -#define erealloc_rel(ptr, size) _erealloc((ptr), (size), 0 ZEND_FILE_LINE_RELAY_CC) -#define erealloc_recoverable_rel(ptr, size) _erealloc((ptr), (size), 1 ZEND_FILE_LINE_RELAY_CC) -#define estrdup_rel(s) _estrdup((s) ZEND_FILE_LINE_RELAY_CC) -#define estrndup_rel(s, length) _estrndup((s) ZEND_FILE_LINE_RELAY_CC) -#define persist_alloc_rel(p) _persist_alloc((p) ZEND_FILE_LINE_RELAY_CC) +#define emalloc_rel(size) _emalloc((size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) +#define efree_rel(ptr) _efree((ptr) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) +#define ecalloc_rel(nmemb, size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) +#define erealloc_rel(ptr, size) _erealloc((ptr), (size), 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) +#define erealloc_recoverable_rel(ptr, size) _erealloc((ptr), (size), 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) +#define estrdup_rel(s) _estrdup((s) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) +#define estrndup_rel(s, length) _estrndup((s), (length) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) +#define persist_alloc_rel(p) _persist_alloc((p) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) /* Selective persistent/non persistent allocation macros */ #define pemalloc(size,persistent) ((persistent)?malloc(size):emalloc(size)) @@ -103,11 +105,10 @@ ZEND_API void start_memory_manager(void); ZEND_API void shutdown_memory_manager(int silent, int clean_cache); #if ZEND_DEBUG -ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC); -ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC); -#define mem_block_check(ptr, silent) _mem_block_check(ptr, silent ZEND_FILE_LINE_CC) -#define mem_block_check(ptr, silent) _mem_block_check(ptr, silent ZEND_FILE_LINE_CC) -#define full_mem_check(silent) _full_mem_check(silent ZEND_FILE_LINE_CC) +ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); +ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); +#define mem_block_check(ptr, silent) _mem_block_check(ptr, silent ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) +#define full_mem_check(silent) _full_mem_check(silent ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #else #define mem_block_check(type, ptr, silent) #define full_mem_check(silent) diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c index 81372839b8..1a54465cc3 100644 --- a/Zend/zend_variables.c +++ b/Zend/zend_variables.c @@ -117,7 +117,7 @@ ZEND_API int _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC) return SUCCESS; } } - zvalue->value.str.val = (char *) estrndup(zvalue->value.str.val, zvalue->value.str.len); + zvalue->value.str.val = (char *) estrndup_rel(zvalue->value.str.val, zvalue->value.str.len); break; case IS_ARRAY: { zval *tmp; @@ -128,7 +128,7 @@ ZEND_API int _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC) var_reset(zvalue); return FAILURE; } - zvalue->value.ht = (HashTable *) emalloc(sizeof(HashTable)); + zvalue->value.ht = (HashTable *) emalloc_rel(sizeof(HashTable)); zend_hash_init(zvalue->value.ht, 0, NULL, PVAL_PTR_DTOR, 0); zend_hash_copy(zvalue->value.ht, original_ht, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *)); } @@ -137,7 +137,7 @@ ZEND_API int _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC) zval *tmp; HashTable *original_ht = zvalue->value.obj.properties; - zvalue->value.obj.properties = (HashTable *) emalloc(sizeof(HashTable)); + zvalue->value.obj.properties = (HashTable *) emalloc_rel(sizeof(HashTable)); zend_hash_init(zvalue->value.obj.properties, 0, NULL, PVAL_PTR_DTOR, 0); zend_hash_copy(zvalue->value.obj.properties, original_ht, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *)); } |