[blob] Make debug code always available to the compiler
Such that we don't break debug build all the time.
This commit is contained in:
parent
ba51b25c7b
commit
444fffb1ab
|
@ -36,13 +36,11 @@
|
||||||
#endif /* HAVE_SYS_MMAN_H */
|
#endif /* HAVE_SYS_MMAN_H */
|
||||||
|
|
||||||
#ifndef HB_DEBUG_BLOB
|
#ifndef HB_DEBUG_BLOB
|
||||||
#define HB_DEBUG_BLOB HB_DEBUG
|
#define HB_DEBUG_BLOB HB_DEBUG+0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HB_DEBUG_BLOB
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
hb_blob_t _hb_blob_nil = {
|
hb_blob_t _hb_blob_nil = {
|
||||||
HB_REFERENCE_COUNT_INVALID, /* ref_count */
|
HB_REFERENCE_COUNT_INVALID, /* ref_count */
|
||||||
|
@ -181,10 +179,9 @@ hb_blob_lock (hb_blob_t *blob)
|
||||||
|
|
||||||
hb_mutex_lock (blob->lock);
|
hb_mutex_lock (blob->lock);
|
||||||
|
|
||||||
#if HB_DEBUG_BLOB
|
if (HB_DEBUG_BLOB)
|
||||||
fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__,
|
fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__,
|
||||||
blob->lock_count, blob->data);
|
blob->lock_count, blob->data);
|
||||||
#endif
|
|
||||||
|
|
||||||
blob->lock_count++;
|
blob->lock_count++;
|
||||||
|
|
||||||
|
@ -201,10 +198,9 @@ hb_blob_unlock (hb_blob_t *blob)
|
||||||
|
|
||||||
hb_mutex_lock (blob->lock);
|
hb_mutex_lock (blob->lock);
|
||||||
|
|
||||||
#if HB_DEBUG_BLOB
|
if (HB_DEBUG_BLOB)
|
||||||
fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__,
|
fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__,
|
||||||
blob->lock_count, blob->data);
|
blob->lock_count, blob->data);
|
||||||
#endif
|
|
||||||
|
|
||||||
assert (blob->lock_count > 0);
|
assert (blob->lock_count > 0);
|
||||||
blob->lock_count--;
|
blob->lock_count--;
|
||||||
|
@ -246,35 +242,30 @@ _try_make_writable_inplace_unix_locked (hb_blob_t *blob)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((uintptr_t) -1L == pagesize) {
|
if ((uintptr_t) -1L == pagesize) {
|
||||||
#if HB_DEBUG_BLOB
|
if (HB_DEBUG_BLOB)
|
||||||
fprintf (stderr, "%p %s: failed to get pagesize: %s\n", blob, __FUNCTION__, strerror (errno));
|
fprintf (stderr, "%p %s: failed to get pagesize: %s\n", blob, __FUNCTION__, strerror (errno));
|
||||||
#endif
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#if HB_DEBUG_BLOB
|
if (HB_DEBUG_BLOB)
|
||||||
fprintf (stderr, "%p %s: pagesize is %u\n", blob, __FUNCTION__, pagesize);
|
fprintf (stderr, "%p %s: pagesize is %u\n", blob, __FUNCTION__, pagesize);
|
||||||
#endif
|
|
||||||
|
|
||||||
mask = ~(pagesize-1);
|
mask = ~(pagesize-1);
|
||||||
addr = (const char *) (((uintptr_t) blob->data) & mask);
|
addr = (const char *) (((uintptr_t) blob->data) & mask);
|
||||||
length = (const char *) (((uintptr_t) blob->data + blob->length + pagesize-1) & mask) - addr;
|
length = (const char *) (((uintptr_t) blob->data + blob->length + pagesize-1) & mask) - addr;
|
||||||
#if HB_DEBUG_BLOB
|
if (HB_DEBUG_BLOB)
|
||||||
fprintf (stderr, "%p %s: calling mprotect on [%p..%p] (%d bytes)\n",
|
fprintf (stderr, "%p %s: calling mprotect on [%p..%p] (%d bytes)\n",
|
||||||
blob, __FUNCTION__,
|
blob, __FUNCTION__,
|
||||||
addr, addr+length, length);
|
addr, addr+length, length);
|
||||||
#endif
|
|
||||||
if (-1 == mprotect ((void *) addr, length, PROT_READ | PROT_WRITE)) {
|
if (-1 == mprotect ((void *) addr, length, PROT_READ | PROT_WRITE)) {
|
||||||
#if HB_DEBUG_BLOB
|
if (HB_DEBUG_BLOB)
|
||||||
fprintf (stderr, "%p %s: %s\n", blob, __FUNCTION__, strerror (errno));
|
fprintf (stderr, "%p %s: %s\n", blob, __FUNCTION__, strerror (errno));
|
||||||
#endif
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HB_DEBUG_BLOB
|
if (HB_DEBUG_BLOB)
|
||||||
fprintf (stderr, "%p %s: successfully made [%p..%p] (%d bytes) writable\n",
|
fprintf (stderr, "%p %s: successfully made [%p..%p] (%d bytes) writable\n",
|
||||||
blob, __FUNCTION__,
|
blob, __FUNCTION__,
|
||||||
addr, addr+length, length);
|
addr, addr+length, length);
|
||||||
#endif
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
#else
|
#else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -284,19 +275,16 @@ _try_make_writable_inplace_unix_locked (hb_blob_t *blob)
|
||||||
static void
|
static void
|
||||||
_try_writable_inplace_locked (hb_blob_t *blob)
|
_try_writable_inplace_locked (hb_blob_t *blob)
|
||||||
{
|
{
|
||||||
#if HB_DEBUG_BLOB
|
if (HB_DEBUG_BLOB)
|
||||||
fprintf (stderr, "%p %s: making writable\n", blob, __FUNCTION__);
|
fprintf (stderr, "%p %s: making writable\n", blob, __FUNCTION__);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (_try_make_writable_inplace_unix_locked (blob)) {
|
if (_try_make_writable_inplace_unix_locked (blob)) {
|
||||||
#if HB_DEBUG_BLOB
|
if (HB_DEBUG_BLOB)
|
||||||
fprintf (stderr, "%p %s: making writable -> succeeded\n", blob, __FUNCTION__);
|
fprintf (stderr, "%p %s: making writable -> succeeded\n", blob, __FUNCTION__);
|
||||||
#endif
|
|
||||||
blob->mode = HB_MEMORY_MODE_WRITABLE;
|
blob->mode = HB_MEMORY_MODE_WRITABLE;
|
||||||
} else {
|
} else {
|
||||||
#if HB_DEBUG_BLOB
|
if (HB_DEBUG_BLOB)
|
||||||
fprintf (stderr, "%p %s: making writable -> FAILED\n", blob, __FUNCTION__);
|
fprintf (stderr, "%p %s: making writable -> FAILED\n", blob, __FUNCTION__);
|
||||||
#endif
|
|
||||||
/* Failed to make writable inplace, mark that */
|
/* Failed to make writable inplace, mark that */
|
||||||
blob->mode = HB_MEMORY_MODE_READONLY;
|
blob->mode = HB_MEMORY_MODE_READONLY;
|
||||||
}
|
}
|
||||||
|
@ -339,19 +327,17 @@ hb_blob_try_writable (hb_blob_t *blob)
|
||||||
{
|
{
|
||||||
char *new_data;
|
char *new_data;
|
||||||
|
|
||||||
#if HB_DEBUG_BLOB
|
if (HB_DEBUG_BLOB)
|
||||||
fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__,
|
fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__,
|
||||||
blob->lock_count, blob->data);
|
blob->lock_count, blob->data);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (blob->lock_count)
|
if (blob->lock_count)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
new_data = malloc (blob->length);
|
new_data = malloc (blob->length);
|
||||||
if (new_data) {
|
if (new_data) {
|
||||||
#if HB_DEBUG_BLOB
|
if (HB_DEBUG_BLOB)
|
||||||
fprintf (stderr, "%p %s: dupped successfully -> %p\n", blob, __FUNCTION__, blob->data);
|
fprintf (stderr, "%p %s: dupped successfully -> %p\n", blob, __FUNCTION__, blob->data);
|
||||||
#endif
|
|
||||||
memcpy (new_data, blob->data, blob->length);
|
memcpy (new_data, blob->data, blob->length);
|
||||||
_hb_blob_destroy_user_data (blob);
|
_hb_blob_destroy_user_data (blob);
|
||||||
blob->mode = HB_MEMORY_MODE_WRITABLE;
|
blob->mode = HB_MEMORY_MODE_WRITABLE;
|
||||||
|
|
Loading…
Reference in New Issue