aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2020-02-08 13:40:54 -0700
committerTom Tromey <tom@tromey.com>2020-02-08 13:40:54 -0700
commitf4382c45a4de31b654c063d1ae70d932bde1c2f2 (patch)
tree914254afcd1620342bac6ac4f5603a635a946f35
parent01840b7a09722330ff36038001ea72dd7525c67e (diff)
downloadgdb-f4382c45a4de31b654c063d1ae70d932bde1c2f2.zip
gdb-f4382c45a4de31b654c063d1ae70d932bde1c2f2.tar.gz
gdb-f4382c45a4de31b654c063d1ae70d932bde1c2f2.tar.bz2
Create dwarf2/leb.[ch]
This moves some scalar-unpacking code into a couple of new files, dwarf2/leb.h and dwarf2/leb.c. gdb/ChangeLog 2020-02-08 Tom Tromey <tom@tromey.com> * dwarf2read.h (read_unsigned_leb128): Don't declare. * dwarf2read.c (read_1_byte, read_1_signed_byte, read_2_bytes) (read_2_signed_bytes, read_3_bytes, read_4_bytes) (read_4_signed_bytes, read_8_bytes): Move to dwarf2/leb.h. (read_unsigned_leb128, read_signed_leb128): Move to dwarf2/leb.c. * dwarf2/leb.h: New file, from dwarf2read.c. * dwarf2/leb.c: New file, from dwarf2read.c. * dwarf2-frame.c (read_1_byte, read_4_bytes, read_8_bytes): Remove. * Makefile.in (CONFIG_SRC_SUBDIR): Add dwarf2. (COMMON_SFILES): Add dwarf2/leb.c. Change-Id: Idd19647686c8f959d226a95fdfca4db47c6e96d0
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/Makefile.in3
-rw-r--r--gdb/dwarf2-frame.c18
-rw-r--r--gdb/dwarf2/leb.c85
-rw-r--r--gdb/dwarf2/leb.h92
-rw-r--r--gdb/dwarf2loc.c1
-rw-r--r--gdb/dwarf2read.c130
-rw-r--r--gdb/dwarf2read.h2
8 files changed, 196 insertions, 149 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 07353b7..d0c5d4a 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,17 @@
+2020-02-08 Tom Tromey <tom@tromey.com>
+
+ * dwarf2read.h (read_unsigned_leb128): Don't declare.
+ * dwarf2read.c (read_1_byte, read_1_signed_byte, read_2_bytes)
+ (read_2_signed_bytes, read_3_bytes, read_4_bytes)
+ (read_4_signed_bytes, read_8_bytes): Move to dwarf2/leb.h.
+ (read_unsigned_leb128, read_signed_leb128): Move to dwarf2/leb.c.
+ * dwarf2/leb.h: New file, from dwarf2read.c.
+ * dwarf2/leb.c: New file, from dwarf2read.c.
+ * dwarf2-frame.c (read_1_byte, read_4_bytes, read_8_bytes):
+ Remove.
+ * Makefile.in (CONFIG_SRC_SUBDIR): Add dwarf2.
+ (COMMON_SFILES): Add dwarf2/leb.c.
+
2020-02-08 Joel Brobecker <brobecker@adacore.com>
GDB 9.1 released.
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 49fff37..b30ab54 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -551,7 +551,7 @@ CONFIG_INSTALL = @CONFIG_INSTALL@
CONFIG_UNINSTALL = @CONFIG_UNINSTALL@
HAVE_NATIVE_GCORE_TARGET = @HAVE_NATIVE_GCORE_TARGET@
-CONFIG_SRC_SUBDIR = arch cli mi compile tui unittests guile python \
+CONFIG_SRC_SUBDIR = arch cli dwarf2 mi compile tui unittests guile python \
target nat
CONFIG_DEP_SUBDIR = $(addsuffix /$(DEPDIR),$(CONFIG_SRC_SUBDIR))
@@ -1002,6 +1002,7 @@ COMMON_SFILES = \
dwarf2expr.c \
dwarf2loc.c \
dwarf2read.c \
+ dwarf2/leb.c \
eval.c \
event-loop.c \
event-top.c \
diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c
index 40eb7f5..2bf8271 100644
--- a/gdb/dwarf2-frame.c
+++ b/gdb/dwarf2-frame.c
@@ -22,6 +22,7 @@
#include "defs.h"
#include "dwarf2expr.h"
#include "dwarf2.h"
+#include "dwarf2/leb.h"
#include "frame.h"
#include "frame-base.h"
#include "frame-unwind.h"
@@ -1474,23 +1475,6 @@ const struct objfile_key<dwarf2_fde_table,
gdb::noop_deleter<dwarf2_fde_table>>
dwarf2_frame_objfile_data;
-static unsigned int
-read_1_byte (bfd *abfd, const gdb_byte *buf)
-{
- return bfd_get_8 (abfd, buf);
-}
-
-static unsigned int
-read_4_bytes (bfd *abfd, const gdb_byte *buf)
-{
- return bfd_get_32 (abfd, buf);
-}
-
-static ULONGEST
-read_8_bytes (bfd *abfd, const gdb_byte *buf)
-{
- return bfd_get_64 (abfd, buf);
-}
static ULONGEST
read_initial_length (bfd *abfd, const gdb_byte *buf,
diff --git a/gdb/dwarf2/leb.c b/gdb/dwarf2/leb.c
new file mode 100644
index 0000000..d26b48b
--- /dev/null
+++ b/gdb/dwarf2/leb.c
@@ -0,0 +1,85 @@
+/* Low-level DWARF 2 reading code
+
+ Copyright (C) 1994-2020 Free Software Foundation, Inc.
+
+ Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+ Inc. with support from Florida State University (under contract
+ with the Ada Joint Program Office), and Silicon Graphics, Inc.
+ Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+ based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+ support.
+
+ 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 "defs.h"
+#include "dwarf2/leb.h"
+
+ULONGEST
+read_unsigned_leb128 (bfd *abfd, const gdb_byte *buf,
+ unsigned int *bytes_read_ptr)
+{
+ ULONGEST result;
+ unsigned int num_read;
+ int shift;
+ unsigned char byte;
+
+ result = 0;
+ shift = 0;
+ num_read = 0;
+ while (1)
+ {
+ byte = bfd_get_8 (abfd, buf);
+ buf++;
+ num_read++;
+ result |= ((ULONGEST) (byte & 127) << shift);
+ if ((byte & 128) == 0)
+ {
+ break;
+ }
+ shift += 7;
+ }
+ *bytes_read_ptr = num_read;
+ return result;
+}
+
+LONGEST
+read_signed_leb128 (bfd *abfd, const gdb_byte *buf,
+ unsigned int *bytes_read_ptr)
+{
+ ULONGEST result;
+ int shift, num_read;
+ unsigned char byte;
+
+ result = 0;
+ shift = 0;
+ num_read = 0;
+ while (1)
+ {
+ byte = bfd_get_8 (abfd, buf);
+ buf++;
+ num_read++;
+ result |= ((ULONGEST) (byte & 127) << shift);
+ shift += 7;
+ if ((byte & 128) == 0)
+ {
+ break;
+ }
+ }
+ if ((shift < 8 * sizeof (result)) && (byte & 0x40))
+ result |= -(((ULONGEST) 1) << shift);
+ *bytes_read_ptr = num_read;
+ return result;
+}
diff --git a/gdb/dwarf2/leb.h b/gdb/dwarf2/leb.h
new file mode 100644
index 0000000..b17ab88
--- /dev/null
+++ b/gdb/dwarf2/leb.h
@@ -0,0 +1,92 @@
+/* Low-level DWARF 2 reading code
+
+ Copyright (C) 1994-2020 Free Software Foundation, Inc.
+
+ Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
+ Inc. with support from Florida State University (under contract
+ with the Ada Joint Program Office), and Silicon Graphics, Inc.
+ Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
+ based on Fred Fish's (Cygnus Support) implementation of DWARF 1
+ support.
+
+ 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 GDB_DWARF2_LEB_H
+#define GDB_DWARF2_LEB_H
+
+/* Read dwarf information from a buffer. */
+
+static inline unsigned int
+read_1_byte (bfd *abfd, const gdb_byte *buf)
+{
+ return bfd_get_8 (abfd, buf);
+}
+
+static inline int
+read_1_signed_byte (bfd *abfd, const gdb_byte *buf)
+{
+ return bfd_get_signed_8 (abfd, buf);
+}
+
+static inline unsigned int
+read_2_bytes (bfd *abfd, const gdb_byte *buf)
+{
+ return bfd_get_16 (abfd, buf);
+}
+
+static inline int
+read_2_signed_bytes (bfd *abfd, const gdb_byte *buf)
+{
+ return bfd_get_signed_16 (abfd, buf);
+}
+
+/* Read the next three bytes (little-endian order) as an unsigned integer. */
+static inline unsigned int
+read_3_bytes (bfd *abfd, const gdb_byte *buf)
+{
+ unsigned int result = 0;
+ for (int i = 0; i < 3; ++i)
+ {
+ unsigned char byte = bfd_get_8 (abfd, buf);
+ buf++;
+ result |= ((unsigned int) byte << (i * 8));
+ }
+ return result;
+}
+
+static inline unsigned int
+read_4_bytes (bfd *abfd, const gdb_byte *buf)
+{
+ return bfd_get_32 (abfd, buf);
+}
+
+static inline int
+read_4_signed_bytes (bfd *abfd, const gdb_byte *buf)
+{
+ return bfd_get_signed_32 (abfd, buf);
+}
+
+static inline ULONGEST
+read_8_bytes (bfd *abfd, const gdb_byte *buf)
+{
+ return bfd_get_64 (abfd, buf);
+}
+
+extern LONGEST read_signed_leb128 (bfd *, const gdb_byte *, unsigned int *);
+
+extern ULONGEST read_unsigned_leb128 (bfd *, const gdb_byte *, unsigned int *);
+
+#endif /* GDB_DWARF2_LEB_H */
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
index 405b239..9cfc852 100644
--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -38,6 +38,7 @@
#include "dwarf2loc.h"
#include "dwarf2read.h"
#include "dwarf2-frame.h"
+#include "dwarf2/leb.h"
#include "compile/compile.h"
#include "gdbsupport/selftest.h"
#include <algorithm>
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index dafe01d..fe26fc3 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -32,6 +32,7 @@
#include "dwarf2read.h"
#include "dwarf-index-cache.h"
#include "dwarf-index-common.h"
+#include "dwarf2/leb.h"
#include "bfd.h"
#include "elf-bfd.h"
#include "symtab.h"
@@ -1551,19 +1552,6 @@ static void read_attribute_reprocess (const struct die_reader_specs *reader,
static CORE_ADDR read_addr_index (struct dwarf2_cu *cu, unsigned int addr_index);
-static unsigned int read_1_byte (bfd *, const gdb_byte *);
-
-static int read_1_signed_byte (bfd *, const gdb_byte *);
-
-static unsigned int read_2_bytes (bfd *, const gdb_byte *);
-
-/* Read the next three bytes (little-endian order) as an unsigned integer. */
-static unsigned int read_3_bytes (bfd *, const gdb_byte *);
-
-static unsigned int read_4_bytes (bfd *, const gdb_byte *);
-
-static ULONGEST read_8_bytes (bfd *, const gdb_byte *);
-
static CORE_ADDR read_address (bfd *, const gdb_byte *ptr, struct dwarf2_cu *,
unsigned int *);
@@ -1602,8 +1590,6 @@ static const char *read_indirect_string_at_offset
static const char *read_indirect_string_from_dwz
(struct objfile *objfile, struct dwz_file *, LONGEST);
-static LONGEST read_signed_leb128 (bfd *, const gdb_byte *, unsigned int *);
-
static CORE_ADDR read_addr_index_from_leb128 (struct dwarf2_cu *,
const gdb_byte *,
unsigned int *);
@@ -19685,63 +19671,6 @@ read_attribute (const struct die_reader_specs *reader,
need_reprocess);
}
-/* Read dwarf information from a buffer. */
-
-static unsigned int
-read_1_byte (bfd *abfd, const gdb_byte *buf)
-{
- return bfd_get_8 (abfd, buf);
-}
-
-static int
-read_1_signed_byte (bfd *abfd, const gdb_byte *buf)
-{
- return bfd_get_signed_8 (abfd, buf);
-}
-
-static unsigned int
-read_2_bytes (bfd *abfd, const gdb_byte *buf)
-{
- return bfd_get_16 (abfd, buf);
-}
-
-static int
-read_2_signed_bytes (bfd *abfd, const gdb_byte *buf)
-{
- return bfd_get_signed_16 (abfd, buf);
-}
-
-static unsigned int
-read_3_bytes (bfd *abfd, const gdb_byte *buf)
-{
- unsigned int result = 0;
- for (int i = 0; i < 3; ++i)
- {
- unsigned char byte = bfd_get_8 (abfd, buf);
- buf++;
- result |= ((unsigned int) byte << (i * 8));
- }
- return result;
-}
-
-static unsigned int
-read_4_bytes (bfd *abfd, const gdb_byte *buf)
-{
- return bfd_get_32 (abfd, buf);
-}
-
-static int
-read_4_signed_bytes (bfd *abfd, const gdb_byte *buf)
-{
- return bfd_get_signed_32 (abfd, buf);
-}
-
-static ULONGEST
-read_8_bytes (bfd *abfd, const gdb_byte *buf)
-{
- return bfd_get_64 (abfd, buf);
-}
-
static CORE_ADDR
read_address (bfd *abfd, const gdb_byte *buf, struct dwarf2_cu *cu,
unsigned int *bytes_read)
@@ -20051,63 +19980,6 @@ read_indirect_line_string (struct dwarf2_per_objfile *dwarf2_per_objfile,
str_offset);
}
-ULONGEST
-read_unsigned_leb128 (bfd *abfd, const gdb_byte *buf,
- unsigned int *bytes_read_ptr)
-{
- ULONGEST result;
- unsigned int num_read;
- int shift;
- unsigned char byte;
-
- result = 0;
- shift = 0;
- num_read = 0;
- while (1)
- {
- byte = bfd_get_8 (abfd, buf);
- buf++;
- num_read++;
- result |= ((ULONGEST) (byte & 127) << shift);
- if ((byte & 128) == 0)
- {
- break;
- }
- shift += 7;
- }
- *bytes_read_ptr = num_read;
- return result;
-}
-
-static LONGEST
-read_signed_leb128 (bfd *abfd, const gdb_byte *buf,
- unsigned int *bytes_read_ptr)
-{
- ULONGEST result;
- int shift, num_read;
- unsigned char byte;
-
- result = 0;
- shift = 0;
- num_read = 0;
- while (1)
- {
- byte = bfd_get_8 (abfd, buf);
- buf++;
- num_read++;
- result |= ((ULONGEST) (byte & 127) << shift);
- shift += 7;
- if ((byte & 128) == 0)
- {
- break;
- }
- }
- if ((shift < 8 * sizeof (result)) && (byte & 0x40))
- result |= -(((ULONGEST) 1) << shift);
- *bytes_read_ptr = num_read;
- return result;
-}
-
/* Given index ADDR_INDEX in .debug_addr, fetch the value.
ADDR_BASE is the DW_AT_addr_base (DW_AT_GNU_addr_base) attribute or zero.
ADDR_SIZE is the size of addresses from the CU header. */
diff --git a/gdb/dwarf2read.h b/gdb/dwarf2read.h
index 3f9731f..5aa9421 100644
--- a/gdb/dwarf2read.h
+++ b/gdb/dwarf2read.h
@@ -463,8 +463,6 @@ struct signatured_type
struct dwo_unit *dwo_unit;
};
-ULONGEST read_unsigned_leb128 (bfd *, const gdb_byte *, unsigned int *);
-
/* This represents a '.dwz' file. */
struct dwz_file