diff options
author | Bryce McKinlay <bryce@gcc.gnu.org> | 2000-04-19 03:29:14 +0100 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2000-04-19 03:29:14 +0100 |
commit | 0eebf9e5c729a27fec1c7ee40eefd226eb2df6e3 (patch) | |
tree | a34c7855d6892575054cbbe5a56f9671dc1c2e5a /boehm-gc/dbg_mlc.h | |
parent | 48a840d9102deba764852463142b5118442908c7 (diff) | |
download | gcc-0eebf9e5c729a27fec1c7ee40eefd226eb2df6e3.tar.gz |
Initial revision
From-SVN: r33241
Diffstat (limited to 'boehm-gc/dbg_mlc.h')
-rw-r--r-- | boehm-gc/dbg_mlc.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/boehm-gc/dbg_mlc.h b/boehm-gc/dbg_mlc.h new file mode 100644 index 00000000000..6abeda8a611 --- /dev/null +++ b/boehm-gc/dbg_mlc.h @@ -0,0 +1,102 @@ +/* + * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers + * Copyright (c) 1991-1995 by Xerox Corporation. All rights reserved. + * Copyright (c) 1997 by Silicon Graphics. All rights reserved. + * Copyright (c) 1999 by Hewlett-Packard Company. All rights reserved. + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + */ + +/* + * This is mostly an internal header file. Typical clients should + * not use it. Clients that define their own object kinds with + * debugging allocators will probably want to include this, however. + * No attempt is made to keep the namespace clean. This should not be + * included from header filrd that are frequently included by clients. + */ + +#ifndef _DBG_MLC_H + +#define _DBG_MLC_H + +# define I_HIDE_POINTERS +# include "gc_priv.h" +# ifdef KEEP_BACK_PTRS +# include "backptr.h" +# endif + +# define START_FLAG ((word)0xfedcedcb) +# define END_FLAG ((word)0xbcdecdef) + /* Stored both one past the end of user object, and one before */ + /* the end of the object as seen by the allocator. */ + + +/* Object header */ +typedef struct { +# ifdef KEEP_BACK_PTRS + ptr_t oh_back_ptr; +# define MARKED_FOR_FINALIZATION (ptr_t)(-1) + /* Object was marked because it is finalizable. */ +# define MARKED_FROM_REGISTER (ptr_t)(-2) + /* Object was marked from a rgister. Hence the */ + /* source of the reference doesn't have an address. */ +# ifdef ALIGN_DOUBLE + word oh_dummy; +# endif +# endif + char * oh_string; /* object descriptor string */ + word oh_int; /* object descriptor integers */ +# ifdef NEED_CALLINFO + struct callinfo oh_ci[NFRAMES]; +# endif + word oh_sz; /* Original malloc arg. */ + word oh_sf; /* start flag */ +} oh; +/* The size of the above structure is assumed not to dealign things, */ +/* and to be a multiple of the word length. */ + +#define DEBUG_BYTES (sizeof (oh) + sizeof (word)) +#define USR_PTR_FROM_BASE(p) ((ptr_t)(p) + sizeof(oh)) + +/* There is no reason to ever add a byte at the end explicitly, since we */ +/* already add a guard word. */ +#undef ROUNDED_UP_WORDS +#define ROUNDED_UP_WORDS(n) BYTES_TO_WORDS((n) + WORDS_TO_BYTES(1) - 1) + +#ifdef SAVE_CALL_CHAIN +# define ADD_CALL_CHAIN(base, ra) GC_save_callers(((oh *)(base)) -> oh_ci) +# define PRINT_CALL_CHAIN(base) GC_print_callers(((oh *)(base)) -> oh_ci) +#else +# ifdef GC_ADD_CALLER +# define ADD_CALL_CHAIN(base, ra) ((oh *)(base)) -> oh_ci[0].ci_pc = (ra) +# define PRINT_CALL_CHAIN(base) GC_print_callers(((oh *)(base)) -> oh_ci) +# else +# define ADD_CALL_CHAIN(base, ra) +# define PRINT_CALL_CHAIN(base) +# endif +#endif + +# ifdef GC_ADD_CALLER +# define OPT_RA ra, +# else +# define OPT_RA +# endif + + +/* Check whether object with base pointer p has debugging info */ +/* p is assumed to point to a legitimate object in our part */ +/* of the heap. */ +GC_bool GC_has_debug_info(/* p */); + +/* Store debugging info into p. Return displaced pointer. */ +/* Assumes we don't hold allocation lock. */ +ptr_t GC_store_debug_info(/* p, sz, string, integer */); + +#endif /* _DBG_MLC_H */ |