mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
Introduce gdb-hashtab module in gdbsupport
gdb has some extensions and helpers for working with the libiberty hash table. This patch consolidates these and moves them to gdbsupport.
This commit is contained in:
parent
bf31fd38f0
commit
0589ca4e7b
@ -18,6 +18,7 @@
|
||||
#define COMPILE_COMPILE_INTERNAL_H
|
||||
|
||||
#include "gcc-c-interface.h"
|
||||
#include "gdbsupport/gdb-hashtab.h"
|
||||
|
||||
/* Debugging flag for the "compile" family of commands. */
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
#if !defined (COMPLETER_H)
|
||||
#define COMPLETER_H 1
|
||||
|
||||
#include "gdbsupport/gdb-hashtab.h"
|
||||
#include "gdbsupport/gdb_vecs.h"
|
||||
#include "command.h"
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include "defs.h"
|
||||
#include "gdbsupport/function-view.h"
|
||||
#include "gdbsupport/gdb-hashtab.h"
|
||||
|
||||
/* Cache to watch for file names already seen. */
|
||||
|
||||
|
@ -46,6 +46,7 @@
|
||||
|
||||
#include "hashtab.h"
|
||||
#include "gdbsupport/array-view.h"
|
||||
#include "gdbsupport/gdb-hashtab.h"
|
||||
#include "gdbsupport/gdb_optional.h"
|
||||
#include "gdbsupport/offset-type.h"
|
||||
#include "gdbsupport/enum-flags.h"
|
||||
|
24
gdb/utils.c
24
gdb/utils.c
@ -2841,30 +2841,6 @@ gdb_argv_as_array_view_test ()
|
||||
|
||||
#endif /* GDB_SELF_TEST */
|
||||
|
||||
/* Allocation function for the libiberty hash table which uses an
|
||||
obstack. The obstack is passed as DATA. */
|
||||
|
||||
void *
|
||||
hashtab_obstack_allocate (void *data, size_t size, size_t count)
|
||||
{
|
||||
size_t total = size * count;
|
||||
void *ptr = obstack_alloc ((struct obstack *) data, total);
|
||||
|
||||
memset (ptr, 0, total);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
/* Trivial deallocation function for the libiberty splay tree and hash
|
||||
table - don't deallocate anything. Rely on later deletion of the
|
||||
obstack. DATA will be the obstack, although it is not needed
|
||||
here. */
|
||||
|
||||
void
|
||||
dummy_obstack_deallocate (void *object, void *data)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Simple, portable version of dirname that does not modify its
|
||||
argument. */
|
||||
|
||||
|
26
gdb/utils.h
26
gdb/utils.h
@ -123,27 +123,6 @@ extern int parse_escape (struct gdbarch *, const char **);
|
||||
|
||||
/* Cleanup utilities. */
|
||||
|
||||
/* A deleter for a hash table. */
|
||||
struct htab_deleter
|
||||
{
|
||||
void operator() (htab *ptr) const
|
||||
{
|
||||
htab_delete (ptr);
|
||||
}
|
||||
};
|
||||
|
||||
/* A unique_ptr wrapper for htab_t. */
|
||||
typedef std::unique_ptr<htab, htab_deleter> htab_up;
|
||||
|
||||
/* A wrapper for 'delete' that can used as a hash table entry deletion
|
||||
function. */
|
||||
template<typename T>
|
||||
void
|
||||
htab_delete_entry (void *ptr)
|
||||
{
|
||||
delete (T *) ptr;
|
||||
}
|
||||
|
||||
extern void init_page_info (void);
|
||||
|
||||
/* Temporarily set BATCH_FLAG and the associated unlimited terminal size.
|
||||
@ -384,11 +363,6 @@ extern void demangler_warning (const char *file, int line,
|
||||
|
||||
/* Misc. utilities. */
|
||||
|
||||
/* Allocation and deallocation functions for the libiberty hash table
|
||||
which use obstacks. */
|
||||
void *hashtab_obstack_allocate (void *data, size_t size, size_t count);
|
||||
void dummy_obstack_deallocate (void *object, void *data);
|
||||
|
||||
#ifdef HAVE_WAITPID
|
||||
extern pid_t wait_to_die_with_timeout (pid_t pid, int *status, int timeout);
|
||||
#endif
|
||||
|
@ -52,6 +52,7 @@ libgdbsupport_a_SOURCES = \
|
||||
filestuff.cc \
|
||||
format.cc \
|
||||
gdb-dlfcn.cc \
|
||||
gdb-hashtab.cc \
|
||||
gdb_obstack.cc \
|
||||
gdb_tilde_expand.cc \
|
||||
gdb_wait.cc \
|
||||
|
@ -151,15 +151,15 @@ am_libgdbsupport_a_OBJECTS = agent.$(OBJEXT) btrace-common.$(OBJEXT) \
|
||||
common-regcache.$(OBJEXT) common-utils.$(OBJEXT) \
|
||||
environ.$(OBJEXT) errors.$(OBJEXT) event-loop.$(OBJEXT) \
|
||||
fileio.$(OBJEXT) filestuff.$(OBJEXT) format.$(OBJEXT) \
|
||||
gdb-dlfcn.$(OBJEXT) gdb_obstack.$(OBJEXT) \
|
||||
gdb_tilde_expand.$(OBJEXT) gdb_wait.$(OBJEXT) \
|
||||
gdb_vecs.$(OBJEXT) job-control.$(OBJEXT) netstuff.$(OBJEXT) \
|
||||
new-op.$(OBJEXT) pathstuff.$(OBJEXT) print-utils.$(OBJEXT) \
|
||||
ptid.$(OBJEXT) rsp-low.$(OBJEXT) run-time-clock.$(OBJEXT) \
|
||||
safe-strerror.$(OBJEXT) scoped_mmap.$(OBJEXT) search.$(OBJEXT) \
|
||||
signals.$(OBJEXT) signals-state-save-restore.$(OBJEXT) \
|
||||
tdesc.$(OBJEXT) thread-pool.$(OBJEXT) xml-utils.$(OBJEXT) \
|
||||
$(am__objects_1)
|
||||
gdb-dlfcn.$(OBJEXT) gdb-hashtab.$(OBJEXT) \
|
||||
gdb_obstack.$(OBJEXT) gdb_tilde_expand.$(OBJEXT) \
|
||||
gdb_wait.$(OBJEXT) gdb_vecs.$(OBJEXT) job-control.$(OBJEXT) \
|
||||
netstuff.$(OBJEXT) new-op.$(OBJEXT) pathstuff.$(OBJEXT) \
|
||||
print-utils.$(OBJEXT) ptid.$(OBJEXT) rsp-low.$(OBJEXT) \
|
||||
run-time-clock.$(OBJEXT) safe-strerror.$(OBJEXT) \
|
||||
scoped_mmap.$(OBJEXT) search.$(OBJEXT) signals.$(OBJEXT) \
|
||||
signals-state-save-restore.$(OBJEXT) tdesc.$(OBJEXT) \
|
||||
thread-pool.$(OBJEXT) xml-utils.$(OBJEXT) $(am__objects_1)
|
||||
libgdbsupport_a_OBJECTS = $(am_libgdbsupport_a_OBJECTS)
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
@ -377,6 +377,7 @@ libgdbsupport_a_SOURCES = \
|
||||
filestuff.cc \
|
||||
format.cc \
|
||||
gdb-dlfcn.cc \
|
||||
gdb-hashtab.cc \
|
||||
gdb_obstack.cc \
|
||||
gdb_tilde_expand.cc \
|
||||
gdb_wait.cc \
|
||||
@ -483,6 +484,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filestuff.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb-dlfcn.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb-hashtab.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb_obstack.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb_tilde_expand.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb_vecs.Po@am__quote@
|
||||
|
44
gdbsupport/gdb-hashtab.cc
Normal file
44
gdbsupport/gdb-hashtab.cc
Normal file
@ -0,0 +1,44 @@
|
||||
/* Hash table wrappers for gdb.
|
||||
Copyright (C) 2021 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
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 3 of the License, 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, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include "common-defs.h"
|
||||
#include "gdb-hashtab.h"
|
||||
|
||||
/* Allocation function for the libiberty hash table which uses an
|
||||
obstack. The obstack is passed as DATA. */
|
||||
|
||||
void *
|
||||
hashtab_obstack_allocate (void *data, size_t size, size_t count)
|
||||
{
|
||||
size_t total = size * count;
|
||||
void *ptr = obstack_alloc ((struct obstack *) data, total);
|
||||
|
||||
memset (ptr, 0, total);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
/* Trivial deallocation function for the libiberty splay tree and hash
|
||||
table - don't deallocate anything. Rely on later deletion of the
|
||||
obstack. DATA will be the obstack, although it is not needed
|
||||
here. */
|
||||
|
||||
void
|
||||
dummy_obstack_deallocate (void *object, void *data)
|
||||
{
|
||||
return;
|
||||
}
|
50
gdbsupport/gdb-hashtab.h
Normal file
50
gdbsupport/gdb-hashtab.h
Normal file
@ -0,0 +1,50 @@
|
||||
/* Hash table wrappers for gdb.
|
||||
Copyright (C) 2021 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
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 3 of the License, 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, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef GDBSUPPORT_GDB_HASHTAB_H
|
||||
#define GDBSUPPORT_GDB_HASHTAB_H
|
||||
|
||||
#include "hashtab.h"
|
||||
|
||||
/* A deleter for a hash table. */
|
||||
struct htab_deleter
|
||||
{
|
||||
void operator() (htab *ptr) const
|
||||
{
|
||||
htab_delete (ptr);
|
||||
}
|
||||
};
|
||||
|
||||
/* A unique_ptr wrapper for htab_t. */
|
||||
typedef std::unique_ptr<htab, htab_deleter> htab_up;
|
||||
|
||||
/* A wrapper for 'delete' that can used as a hash table entry deletion
|
||||
function. */
|
||||
template<typename T>
|
||||
void
|
||||
htab_delete_entry (void *ptr)
|
||||
{
|
||||
delete (T *) ptr;
|
||||
}
|
||||
|
||||
/* Allocation and deallocation functions for the libiberty hash table
|
||||
which use obstacks. */
|
||||
void *hashtab_obstack_allocate (void *data, size_t size, size_t count);
|
||||
void dummy_obstack_deallocate (void *object, void *data);
|
||||
|
||||
#endif /* GDBSUPPORT_GDB_HASHTAB_H */
|
Loading…
Reference in New Issue
Block a user