Commit 292592c5 by Tom de Vries Committed by Tom de Vries

[libbacktrace] Factor out read_initial_length

Factor out new function read_initial_length in dwarf.c.

Bootstrapped and reg-tested on x86_64.

2018-11-22  Tom de Vries  <tdevries@suse.de>

	* dwarf.c (read_initial_length): Factor out of ...
	(build_address_map, read_line_info): ... here.

From-SVN: r266361
parent 208a5329
2018-11-22 Tom de Vries <tdevries@suse.de>
* dwarf.c (read_initial_length): Factor out of ...
(build_address_map, read_line_info): ... here.
2018-11-21 Tom de Vries <tdevries@suse.de> 2018-11-21 Tom de Vries <tdevries@suse.de>
* dwarf.c (read_string): Factor out of ... * dwarf.c (read_string): Factor out of ...
......
...@@ -651,6 +651,25 @@ leb128_len (const unsigned char *p) ...@@ -651,6 +651,25 @@ leb128_len (const unsigned char *p)
return ret; return ret;
} }
/* Read initial_length from BUF and advance the appropriate number of bytes. */
static uint64_t
read_initial_length (struct dwarf_buf *buf, int *is_dwarf64)
{
uint64_t len;
len = read_uint32 (buf);
if (len == 0xffffffff)
{
len = read_uint64 (buf);
*is_dwarf64 = 1;
}
else
*is_dwarf64 = 0;
return len;
}
/* Free an abbreviations structure. */ /* Free an abbreviations structure. */
static void static void
...@@ -1463,14 +1482,7 @@ build_address_map (struct backtrace_state *state, uintptr_t base_address, ...@@ -1463,14 +1482,7 @@ build_address_map (struct backtrace_state *state, uintptr_t base_address,
unit_data_start = info.buf; unit_data_start = info.buf;
is_dwarf64 = 0; len = read_initial_length (&info, &is_dwarf64);
len = read_uint32 (&info);
if (len == 0xffffffff)
{
len = read_uint64 (&info);
is_dwarf64 = 1;
}
unit_buf = info; unit_buf = info;
unit_buf.left = len; unit_buf.left = len;
...@@ -2002,13 +2014,7 @@ read_line_info (struct backtrace_state *state, struct dwarf_data *ddata, ...@@ -2002,13 +2014,7 @@ read_line_info (struct backtrace_state *state, struct dwarf_data *ddata,
line_buf.data = data; line_buf.data = data;
line_buf.reported_underflow = 0; line_buf.reported_underflow = 0;
is_dwarf64 = 0; len = read_initial_length (&line_buf, &is_dwarf64);
len = read_uint32 (&line_buf);
if (len == 0xffffffff)
{
len = read_uint64 (&line_buf);
is_dwarf64 = 1;
}
line_buf.left = len; line_buf.left = len;
if (!read_line_header (state, u, is_dwarf64, &line_buf, hdr)) if (!read_line_header (state, u, is_dwarf64, &line_buf, hdr))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment