diff options
author | Andrew Cagney <cagney@redhat.com> | 1998-05-25 08:50:22 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 1998-05-25 08:50:22 +0000 |
commit | c14db36dbbcef966978f8d8aee0b3670d3243bb0 (patch) | |
tree | 18befbba5eae86246d73d0a50788cf8eb75f5c10 /sim/common/hw-alloc.c | |
parent | 325a1ba87687ac0a8002b24a6a1215b933ae28bb (diff) | |
download | gdb-c14db36dbbcef966978f8d8aee0b3670d3243bb0.zip gdb-c14db36dbbcef966978f8d8aee0b3670d3243bb0.tar.gz gdb-c14db36dbbcef966978f8d8aee0b3670d3243bb0.tar.bz2 |
Add files hw-alloc.[hc] (mising from last CI)
Move set_* macro's from hw-base to hw-device.
Diffstat (limited to 'sim/common/hw-alloc.c')
-rw-r--r-- | sim/common/hw-alloc.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/sim/common/hw-alloc.c b/sim/common/hw-alloc.c new file mode 100644 index 0000000..1172c4d --- /dev/null +++ b/sim/common/hw-alloc.c @@ -0,0 +1,99 @@ +/* Hardware memory allocator. + Copyright (C) 1998 Free Software Foundation, Inc. + Contributed by Cygnus Support. + +This file is part of GDB, the GNU debugger. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + +#include "sim-main.h" +#include "hw-base.h" + + +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif + +struct hw_alloc_data { + void *alloc; + int zalloc_p; + struct hw_alloc_data *next; +}; + +void +create_hw_alloc_data (struct hw *me) +{ + /* NULL */ +} + +void +delete_hw_alloc_data (struct hw *me) +{ + if (me->alloc_of_hw != NULL) + hw_abort (me, "hw-alloc botch"); + while (me->alloc_of_hw != NULL) + { + hw_free (me, me->alloc_of_hw->alloc); + } +} + + + +void * +hw_zalloc (struct hw *me, unsigned long size) +{ + struct hw_alloc_data *memory = ZALLOC (struct hw_alloc_data); + memory->alloc = zalloc (size); + memory->zalloc_p = 1; + memory->next = me->alloc_of_hw; + me->alloc_of_hw = memory; + return memory->alloc; +} + +void * +hw_malloc (struct hw *me, unsigned long size) +{ + struct hw_alloc_data *memory = ZALLOC (struct hw_alloc_data); + memory->alloc = zalloc (size); + memory->zalloc_p = 0; + memory->next = me->alloc_of_hw; + me->alloc_of_hw = memory; + return memory->alloc; +} + +void +hw_free (struct hw *me, + void *alloc) +{ + struct hw_alloc_data **memory; + for (memory = &me->alloc_of_hw; + *memory != NULL; + memory = &(*memory)->next) + { + if ((*memory)->alloc == alloc) + { + struct hw_alloc_data *die = (*memory); + (*memory) = die->next; + if (die->zalloc_p) + zfree (die->alloc); + else + free (die->alloc); + zfree (die); + return; + } + } + hw_abort (me, "free of memory not belonging to a device"); +} |