diff options
author | Tom Tromey <tom@tromey.com> | 2020-02-08 13:40:54 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2020-02-08 13:40:54 -0700 |
commit | f4382c45a4de31b654c063d1ae70d932bde1c2f2 (patch) | |
tree | 914254afcd1620342bac6ac4f5603a635a946f35 /gdb/dwarf2/leb.c | |
parent | 01840b7a09722330ff36038001ea72dd7525c67e (diff) | |
download | gdb-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
Diffstat (limited to 'gdb/dwarf2/leb.c')
-rw-r--r-- | gdb/dwarf2/leb.c | 85 |
1 files changed, 85 insertions, 0 deletions
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; +} |