blob: 1c53d3662101760ceb64380d7cee63cb23edce8e [file] [log] [blame]
Ulrich Drepperb08d5a82005-07-26 05:00:05 +00001/* Memory handling for libdw.
2 Copyright (C) 2003, 2004 Red Hat, Inc.
3 Written by Ulrich Drepper <drepper@redhat.com>, 2003.
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 <error.h>
20#include <errno.h>
21#include <stdlib.h>
22#include <sys/param.h>
23#include "libdwP.h"
24
25
26void *
27__libdw_allocate (Dwarf *dbg, size_t minsize)
28{
29 size_t size = MAX (dbg->mem_default_size,
30 2 * minsize + offsetof (struct libdw_memblock, mem));
31 struct libdw_memblock *newp = malloc (size);
32 if (newp == NULL)
33 dbg->oom_handler ();
34
35 newp->size = newp->remaining = size - offsetof (struct libdw_memblock, mem);
36
37 newp->prev = dbg->mem_tail;
38 dbg->mem_tail = newp;
39
40 return newp->mem;
41}
42
43
44Dwarf_OOM
45dwarf_new_oom_handler (Dwarf *dbg, Dwarf_OOM handler)
46{
47 Dwarf_OOM old = dbg->oom_handler;
48 dbg->oom_handler = handler;
49 return old;
50}
51
52
53void
54__attribute ((noreturn, visibility ("hidden")))
55__libdw_oom (void)
56{
57 while (1)
58 error (EXIT_FAILURE, ENOMEM, "libdw");
59}