1 /* Release debugging handling context. 2 Copyright (C) 2002, 2003, 2004 Red Hat, Inc. 3 Written by Ulrich Drepper <drepper (at) redhat.com>, 2002. 4 5 This program is Open Source software; you can redistribute it and/or 6 modify it under the terms of the Open Software License version 1.0 as 7 published by the Open Source Initiative. 8 9 You should have received a copy of the Open Software License along 10 with this program; if not, you may obtain a copy of the Open Software 11 License version 1.0 from http://www.opensource.org/licenses/osl.php or 12 by writing the Open Source Initiative c/o Lawrence Rosen, Esq., 13 3001 King Ranch Road, Ukiah, CA 95482. */ 14 15 #ifdef HAVE_CONFIG_H 16 # include <config.h> 17 #endif 18 19 #include <search.h> 20 #include <stdlib.h> 21 22 #include "libdwP.h" 23 24 25 26 static void 27 noop_free (void *arg) 28 { 29 } 30 31 32 static void 33 cu_free (void *arg) 34 { 35 struct Dwarf_CU *p = (struct Dwarf_CU *) arg; 36 37 Dwarf_Abbrev_Hash_free (&p->abbrev_hash); 38 39 tdestroy (p->locs, noop_free); 40 } 41 42 43 int 44 dwarf_end (dwarf) 45 Dwarf *dwarf; 46 { 47 if (dwarf != NULL) 48 { 49 /* The search tree for the CUs. NB: the CU data itself is 50 allocated separately, but the abbreviation hash tables need 51 to be handled. */ 52 tdestroy (dwarf->cu_tree, cu_free); 53 54 struct libdw_memblock *memp = dwarf->mem_tail; 55 /* The first block is allocated together with the Dwarf object. */ 56 while (memp->prev != NULL) 57 { 58 struct libdw_memblock *prevp = memp->prev; 59 free (memp); 60 memp = prevp; 61 } 62 63 /* Free the pubnames helper structure. */ 64 free (dwarf->pubnames_sets); 65 66 /* Free the ELF descriptor if necessary. */ 67 if (dwarf->free_elf) 68 elf_end (dwarf->elf); 69 70 /* Free the context descriptor. */ 71 free (dwarf); 72 } 73 74 return 0; 75 } 76