• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Release debugging handling context.
2    Copyright (C) 2002, 2003, 2004 Red Hat, Inc.
3    Written by Ulrich Drepper <drepper@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
noop_free(void * arg)27 noop_free (void *arg)
28 {
29 }
30 
31 
32 static void
cu_free(void * arg)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
dwarf_end(dwarf)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