* Re: [PATCH] Error out on invalid locexpr length
2019-01-01 0:00 ` [PATCH] " Tom de Vries
@ 2019-01-01 0:00 ` Tom de Vries
0 siblings, 0 replies; 4+ messages in thread
From: Tom de Vries @ 2019-01-01 0:00 UTC (permalink / raw)
To: jakub; +Cc: dwz
On 07-03-19 12:00, Tom de Vries wrote:
> On 07-03-19 08:12, Tom de Vries wrote:
>> Hi,
>>
>> When invoking dwz with a file containing an invalid locexpr length, we can run
>> into this assertion:
>> ...
>> dwz: dwz.c:1722: read_loclist: Assertion `ptr + len <= endsec' failed.
>> Aborted (core dumped)
>> ...
>>
>
> To address your questions about origin of test-cases, in this case it's
> dw2-skip-prologue.S (
> https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S;h=cef6e6df12940744c1bc19c9e76fbeb762f80087;hb=HEAD
> ).
>
> AFAIU, the invalid dwarf is hand-coded, and fixed by:
> ...
> diff --git a/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
> b/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
> index cef6e6df12..a55699fdc6 100644
> --- a/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
> +++ b/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
> @@ -123,7 +123,7 @@
> .section .debug_loc
> loclist:
> /* Reset the location list base address first. */
> - .4byte -1, 0
> + PTRBYTE -1, 0
>
> PTRBYTE func_start, func_end
> .2byte 2f-1f
> ...
>
FTR, submitted "[RFC][gdb/testsuite] Fix base address selection entry
encoding in dw2-skip-prologue.S" (
https://sourceware.org/ml/gdb-patches/2019-03/msg00141.html ).
Thanks,
- Tom
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] Error out on invalid locexpr length
@ 2019-01-01 0:00 Tom de Vries
2019-01-01 0:00 ` [committed] " Tom de Vries
2019-01-01 0:00 ` [PATCH] " Tom de Vries
0 siblings, 2 replies; 4+ messages in thread
From: Tom de Vries @ 2019-01-01 0:00 UTC (permalink / raw)
To: dwz, jakub
Hi,
When invoking dwz with a file containing an invalid locexpr length, we can run
into this assertion:
...
dwz: dwz.c:1722: read_loclist: Assertion `ptr + len <= endsec' failed.
Aborted (core dumped)
...
Change the assert into an error:
...
dwz: a.out: locexpr length 0x4ef exceeds .debug_loc section
...
OK for trunk?
Thanks,
- Tom
Error out on invalid locexpr length
2019-02-14 Tom de Vries <tdevries@suse.de>
PR dwz/24172
* dwz.c (read_loclist): Change assert (ptr + len <= endsec) into an
error.
---
dwz.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/dwz.c b/dwz.c
index 4ef8657..a876ab2 100644
--- a/dwz.c
+++ b/dwz.c
@@ -1719,7 +1719,13 @@ read_loclist (DSO *dso, dw_die_ref die, GElf_Addr offset)
continue;
len = read_16 (ptr);
- assert (ptr + len <= endsec);
+ if (!(ptr + len <= endsec))
+ {
+ error (0, 0,
+ "%s: locexpr length 0x%Lx exceeds .debug_loc section",
+ dso->filename, (long long) len);
+ return 1;
+ }
if (read_exprloc (dso, die, ptr, len, &need_adjust))
return 1;
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] Error out on invalid locexpr length
2019-01-01 0:00 [PATCH] Error out on invalid locexpr length Tom de Vries
2019-01-01 0:00 ` [committed] " Tom de Vries
@ 2019-01-01 0:00 ` Tom de Vries
2019-01-01 0:00 ` Tom de Vries
1 sibling, 1 reply; 4+ messages in thread
From: Tom de Vries @ 2019-01-01 0:00 UTC (permalink / raw)
To: jakub; +Cc: dwz
On 07-03-19 08:12, Tom de Vries wrote:
> Hi,
>
> When invoking dwz with a file containing an invalid locexpr length, we can run
> into this assertion:
> ...
> dwz: dwz.c:1722: read_loclist: Assertion `ptr + len <= endsec' failed.
> Aborted (core dumped)
> ...
>
To address your questions about origin of test-cases, in this case it's
dw2-skip-prologue.S (
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S;h=cef6e6df12940744c1bc19c9e76fbeb762f80087;hb=HEAD
).
AFAIU, the invalid dwarf is hand-coded, and fixed by:
...
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
b/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
index cef6e6df12..a55699fdc6 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
@@ -123,7 +123,7 @@
.section .debug_loc
loclist:
/* Reset the location list base address first. */
- .4byte -1, 0
+ PTRBYTE -1, 0
PTRBYTE func_start, func_end
.2byte 2f-1f
...
Thanks,
- Tom
> Change the assert into an error:
> ...
> dwz: a.out: locexpr length 0x4ef exceeds .debug_loc section
> ...
>
> OK for trunk?
>
> Thanks,
> - Tom
>
> Error out on invalid locexpr length
>
> 2019-02-14 Tom de Vries <tdevries@suse.de>
>
> PR dwz/24172
> * dwz.c (read_loclist): Change assert (ptr + len <= endsec) into an
> error.
>
> ---
> dwz.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/dwz.c b/dwz.c
> index 4ef8657..a876ab2 100644
> --- a/dwz.c
> +++ b/dwz.c
> @@ -1719,7 +1719,13 @@ read_loclist (DSO *dso, dw_die_ref die, GElf_Addr offset)
> continue;
>
> len = read_16 (ptr);
> - assert (ptr + len <= endsec);
> + if (!(ptr + len <= endsec))
> + {
> + error (0, 0,
> + "%s: locexpr length 0x%Lx exceeds .debug_loc section",
> + dso->filename, (long long) len);
> + return 1;
> + }
>
> if (read_exprloc (dso, die, ptr, len, &need_adjust))
> return 1;
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [committed] Error out on invalid locexpr length
2019-01-01 0:00 [PATCH] Error out on invalid locexpr length Tom de Vries
@ 2019-01-01 0:00 ` Tom de Vries
2019-01-01 0:00 ` [PATCH] " Tom de Vries
1 sibling, 0 replies; 4+ messages in thread
From: Tom de Vries @ 2019-01-01 0:00 UTC (permalink / raw)
To: dwz, jakub
[-- Attachment #1: Type: text/plain, Size: 573 bytes --]
On 07-03-19 08:12, Tom de Vries wrote:
> Hi,
>
> When invoking dwz with a file containing an invalid locexpr length, we can run
> into this assertion:
> ...
> dwz: dwz.c:1722: read_loclist: Assertion `ptr + len <= endsec' failed.
> Aborted (core dumped)
> ...
>
> Change the assert into an error:
> ...
> dwz: a.out: locexpr length 0x4ef exceeds .debug_loc section
> ...
>
> OK for trunk?
>
> Thanks,
> - Tom
>
Added:
- test-case
- 'unlikely' around error condition.
Committed as below. [ Including trivial follow-up patch to fix buildbot
failures. ]
Thanks,
- Tom
[-- Attachment #2: 0001-Error-out-on-invalid-locexpr-length.patch --]
[-- Type: text/x-patch, Size: 16014 bytes --]
Error out on invalid locexpr length
When invoking dwz with a file containing an invalid locexpr length, we can run
into this assertion:
...
dwz: dwz.c:1722: read_loclist: Assertion `ptr + len <= endsec' failed.
Aborted (core dumped)
...
Change the assert into an error:
...
dwz: a.out: locexpr length 0x4ef exceeds .debug_loc section
...
2019-04-24 Tom de Vries <tdevries@suse.de>
PR dwz/24172
* dwz.c (read_loclist): Change assert (ptr + len <= endsec) into an
error.
* Makefile (TEST_EXECS): Add dw2-skip-prologue.
(dw2-skip-prologue): New target.
* testsuite/dwz.tests/dw2-skip-prologue.S: New test source.
* testsuite/dwz.tests/dw2-skip-prologue.c: New test source.
* testsuite/dwz.tests/pr24172.sh: New test.
---
Makefile | 7 +-
dwz.c | 8 +-
testsuite/dwz.tests/dw2-skip-prologue.S | 402 ++++++++++++++++++++++++++++++++
testsuite/dwz.tests/dw2-skip-prologue.c | 61 +++++
testsuite/dwz.tests/pr24172.sh | 14 ++
5 files changed, 490 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index a9eae7d..33e4009 100644
--- a/Makefile
+++ b/Makefile
@@ -23,7 +23,8 @@ clean:
PWD:=$(shell pwd -P)
TEST_SRC = $(srcdir)/testsuite/dwz.tests
-TEST_EXECS = hello dw2-restrict py-section-script dwz-for-test min two-typedef
+TEST_EXECS = hello dw2-restrict py-section-script dwz-for-test min two-typedef \
+ dw2-skip-prologue
hello:
$(CC) $(TEST_SRC)/hello.c -o $@ -g
@@ -31,6 +32,10 @@ hello:
dw2-restrict:
$(CC) $(TEST_SRC)/dw2-restrict.S -o $@ || touch $@
+dw2-skip-prologue:
+ $(CC) $(TEST_SRC)/dw2-skip-prologue.S $(TEST_SRC)/dw2-skip-prologue.c \
+ -DINLINED -DPTRBITS=64 -o $@ || touch $@
+
py-section-script:
$(CC) $(TEST_SRC)/py-section-script.s -o $@ -g || touch $@
diff --git a/dwz.c b/dwz.c
index db5ee10..2c0e4c4 100644
--- a/dwz.c
+++ b/dwz.c
@@ -1765,7 +1765,13 @@ read_loclist (DSO *dso, dw_die_ref die, GElf_Addr offset)
continue;
len = read_16 (ptr);
- assert (ptr + len <= endsec);
+ if (unlikely (!(ptr + len <= endsec)))
+ {
+ error (0, 0,
+ "%s: locexpr length 0x%Lx exceeds .debug_loc section",
+ dso->filename, (long long) len);
+ return 1;
+ }
if (read_exprloc (dso, die, ptr, len, &need_adjust))
return 1;
diff --git a/testsuite/dwz.tests/dw2-skip-prologue.S b/testsuite/dwz.tests/dw2-skip-prologue.S
new file mode 100644
index 0000000..f249ac0
--- /dev/null
+++ b/testsuite/dwz.tests/dw2-skip-prologue.S
@@ -0,0 +1,402 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2011-2019 Free Software Foundation, Inc.
+
+ 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/>.
+
+ This was copied from the git://sourceware.org/git/binutils-gdb.git
+ repository, file gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S. */
+
+#if PTRBITS == 64
+# define PTRBYTE .8byte
+#elif PTRBITS == 32
+# define PTRBYTE .4byte
+#else
+# error "Unsupported pointer size"
+#endif
+
+ .section .debug_info
+.Lcu1_begin:
+ /* CU header */
+ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */
+.Lcu1_start:
+ .2byte 2 /* DWARF Version */
+ .4byte .Labbrev1_begin /* Offset into abbrev section */
+ .byte PTRBITS / 8 /* Pointer size */
+
+ /* CU die */
+ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */
+ .4byte .Lline1_begin /* DW_AT_stmt_list */
+ PTRBYTE func_start /* DW_AT_low_pc */
+ PTRBYTE func_end /* DW_AT_high_pc */
+ .ascii "main.c\0" /* DW_AT_name */
+ .ascii "GNU C 4.5.0\0" /* DW_AT_producer must be >= 4.5 */
+ .byte 2 /* DW_AT_language (DW_LANG_C) */
+
+ .uleb128 2 /* Abbrev: DW_TAG_subprogram */
+ .byte 1 /* DW_AT_external */
+ .ascii "func\0" /* DW_AT_name */
+ .4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */
+ PTRBYTE func_start /* DW_AT_low_pc */
+ PTRBYTE func_end /* DW_AT_high_pc */
+
+/* GDB `has_loclist' detection of -O2 -g code needs to see a DW_AT_location
+ location list. There may exist -O2 -g CUs still not needing/using any such
+ location list - exactly like this CU. Make one up. */
+
+ .uleb128 0x7 /* (DIE (0x42) DW_TAG_formal_parameter) */
+ .ascii "param\0" /* DW_AT_name */
+ .4byte .Ltype_int - .Lcu1_begin /* DW_AT_type */
+ .4byte loclist /* DW_AT_location */
+
+ .uleb128 4 /* Abbrev: DW_TAG_inlined_subroutine */
+ .ascii "inlined\0" /* DW_AT_name */
+ PTRBYTE func0 /* DW_AT_low_pc */
+ PTRBYTE func1 /* DW_AT_high_pc */
+ .byte 3 /* DW_AT_inline (DW_INL_declared_inlined) */
+ .byte 1 /* DW_AT_call_file */
+ .byte 8 /* DW_AT_call_line */
+
+ .uleb128 4 /* Abbrev: DW_TAG_inlined_subroutine */
+ .ascii "inlined2\0" /* DW_AT_name */
+ PTRBYTE func2 /* DW_AT_low_pc */
+ PTRBYTE func3 /* DW_AT_high_pc */
+ .byte 3 /* DW_AT_inline (DW_INL_declared_inlined) */
+ .byte 1 /* DW_AT_call_file */
+ .byte 11 /* DW_AT_call_line */
+
+#ifdef INLINED
+ .uleb128 4 /* Abbrev: DW_TAG_inlined_subroutine */
+ .ascii "otherinline\0" /* DW_AT_name */
+ PTRBYTE func3 /* DW_AT_low_pc */
+ PTRBYTE func_end /* DW_AT_high_pc */
+ .byte 3 /* DW_AT_inline (DW_INL_declared_inlined) */
+ .byte 1 /* DW_AT_call_file */
+ .byte 9 /* DW_AT_call_line */
+#endif
+
+#ifdef LEXICAL
+ .uleb128 5 /* Abbrev: DW_TAG_lexical_block */
+ PTRBYTE func3 /* DW_AT_low_pc */
+ PTRBYTE func_end /* DW_AT_high_pc */
+
+ /* GDB would otherwise ignore the DW_TAG_lexical_block. */
+ .uleb128 6 /* Abbrev: DW_TAG_variable */
+ .ascii "lexicalvar\0" /* DW_AT_name */
+ .4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */
+
+ .byte 0 /* End of children of DW_TAG_lexical_block */
+#endif
+
+ .byte 0 /* End of children of DW_TAG_subprogram */
+
+/* Simulate `fund' is also named `func' so that the function name matches and
+ fund's SAL is not discarded in expand_line_sal_maybe. */
+
+ .uleb128 2 /* Abbrev: DW_TAG_subprogram */
+ .byte 1 /* DW_AT_external */
+ .ascii "func\0" /* DW_AT_name */
+ .4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */
+ PTRBYTE fund_start /* DW_AT_low_pc */
+ PTRBYTE fund_end /* DW_AT_high_pc */
+
+ .byte 0 /* End of children of DW_TAG_subprogram */
+
+.Ltype_int:
+ .uleb128 3 /* Abbrev: DW_TAG_base_type */
+ .ascii "int\0" /* DW_AT_name */
+ .byte 4 /* DW_AT_byte_size */
+ .byte 5 /* DW_AT_encoding */
+
+ .byte 0 /* End of children of CU */
+
+.Lcu1_end:
+
+ .section .debug_loc
+loclist:
+ /* Reset the location list base address first. */
+ .4byte -1, 0
+
+ PTRBYTE func_start, func_end
+ .2byte 2f-1f
+1: .byte 0x50 /* DW_OP_reg0 */
+2:
+ /* Location list end. */
+ .4byte 0, 0
+
+/* Abbrev table */
+ .section .debug_abbrev
+.Labbrev1_begin:
+ .uleb128 1 /* Abbrev code */
+ .uleb128 0x11 /* DW_TAG_compile_unit */
+ .byte 1 /* has_children */
+ .uleb128 0x10 /* DW_AT_stmt_list */
+ .uleb128 0x6 /* DW_FORM_data4 */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x25 /* DW_AT_producer */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x13 /* DW_AT_language */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 2 /* Abbrev code */
+ .uleb128 0x2e /* DW_TAG_subprogram */
+ .byte 1 /* has_children */
+ .uleb128 0x3f /* DW_AT_external */
+ .uleb128 0xc /* DW_FORM_flag */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 3 /* Abbrev code */
+ .uleb128 0x24 /* DW_TAG_base_type */
+ .byte 0 /* has_children */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0xb /* DW_AT_byte_size */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3e /* DW_AT_encoding */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 4 /* Abbrev code */
+ .uleb128 0x1d /* DW_TAG_inlined_subroutine */
+ .byte 0 /* has_children */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x20 /* DW_AT_inline */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x58 /* DW_AT_call_file */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x59 /* DW_AT_call_line */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 5 /* Abbrev code */
+ .uleb128 0x0b /* DW_TAG_lexical_block */
+ .byte 1 /* has_children */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 6 /* Abbrev code */
+ .uleb128 0x34 /* DW_TAG_variable */
+ .byte 0 /* has_children */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 0x7 /* (abbrev code) */
+ .uleb128 0x5 /* (TAG: DW_TAG_formal_parameter) */
+ .byte 0x0 /* DW_children_no */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x49 /* (DW_AT_type) */
+ .uleb128 0x13 /* (DW_FORM_ref4) */
+ .uleb128 0x02 /* (DW_AT_location) */
+ .uleb128 0x06 /* (DW_FORM_data4) */
+ .byte 0x0
+ .byte 0x0
+
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+/* Line table */
+ .section .debug_line
+.Lline1_begin:
+ .4byte .Lline1_end - .Lline1_start /* Initial length */
+.Lline1_start:
+ .2byte 2 /* Version */
+ .4byte .Lline1_lines - .Lline1_hdr /* header_length */
+.Lline1_hdr:
+ .byte 1 /* Minimum insn length */
+ .byte 1 /* default_is_stmt */
+ .byte 1 /* line_base */
+ .byte 1 /* line_range */
+ .byte 0x10 /* opcode_base */
+
+ /* Standard lengths */
+ .byte 0
+ .byte 1
+ .byte 1
+ .byte 1
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 0
+
+ /* Include directories */
+ .byte 0
+
+ /* File names */
+ .ascii "main.c\0"
+ .uleb128 0
+ .uleb128 0
+ .uleb128 0
+
+ .ascii "other.c\0"
+ .uleb128 0
+ .uleb128 0
+ .uleb128 0
+
+ .byte 0
+
+.Lline1_lines:
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ PTRBYTE func_start
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 4 /* ... to 5 */
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ PTRBYTE func0
+ .byte 4 /* DW_LNS_set_file */
+ .uleb128 2
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 -4 /* ... to 1 */
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ PTRBYTE func1
+ .byte 4 /* DW_LNS_set_file */
+ .uleb128 1
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 8 /* ... to 9 */
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ PTRBYTE func2
+ .byte 4 /* DW_LNS_set_file */
+ .uleb128 2
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 -8 /* ... to 1 */
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ PTRBYTE func3
+ .byte 4 /* DW_LNS_set_file */
+ .uleb128 1
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 8 /* ... to 9 */
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ PTRBYTE func_end
+
+/* Equivalent copy but renamed s/func/fund/. */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ PTRBYTE fund_start
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 -4 /* ... to 5 */
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ PTRBYTE fund0
+ .byte 4 /* DW_LNS_set_file */
+ .uleb128 2
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 -4 /* ... to 1 */
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ PTRBYTE fund1
+ .byte 4 /* DW_LNS_set_file */
+ .uleb128 1
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 8 /* ... to 9 */
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ PTRBYTE fund2
+ .byte 4 /* DW_LNS_set_file */
+ .uleb128 2
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 -8 /* ... to 1 */
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ PTRBYTE fund3
+ .byte 4 /* DW_LNS_set_file */
+ .uleb128 1
+ .byte 3 /* DW_LNS_advance_line */
+ .sleb128 8 /* ... to 9 */
+ .byte 1 /* DW_LNS_copy */
+
+ .byte 0 /* DW_LNE_set_address */
+ .uleb128 5
+ .byte 2
+ PTRBYTE fund_end
+
+/* Line numbering end. */
+
+ .byte 0 /* DW_LNE_end_of_sequence */
+ .uleb128 1
+ .byte 1
+
+.Lline1_end:
diff --git a/testsuite/dwz.tests/dw2-skip-prologue.c b/testsuite/dwz.tests/dw2-skip-prologue.c
new file mode 100644
index 0000000..34b0a7c
--- /dev/null
+++ b/testsuite/dwz.tests/dw2-skip-prologue.c
@@ -0,0 +1,61 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2011-2019 Free Software Foundation, Inc.
+
+ 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/>.
+
+ This was copied from the git://sourceware.org/git/binutils-gdb.git
+ repository, file gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.c. */
+
+static volatile int v;
+
+asm ("func_start: .globl func_start\n");
+static int
+func (void)
+{
+ v++;
+asm ("func0: .globl func0\n");
+ v++;
+asm ("func1: .globl func1\n");
+ v++;
+asm ("func2: .globl func2\n");
+ v++;
+asm ("func3: .globl func3\n");
+ return v;
+}
+asm ("func_end: .globl func_end\n");
+
+/* Equivalent copy but renamed s/func/fund/. */
+
+asm ("fund_start: .globl fund_start\n");
+static int
+fund (void)
+{
+ v++;
+asm ("fund0: .globl fund0\n");
+ v++;
+asm ("fund1: .globl fund1\n");
+ v++;
+asm ("fund2: .globl fund2\n");
+ v++;
+asm ("fund3: .globl fund3\n");
+ return v;
+}
+asm ("fund_end: .globl fund_end\n");
+
+int
+main (void)
+{
+ return func () + fund ();
+}
diff --git a/testsuite/dwz.tests/pr24172.sh b/testsuite/dwz.tests/pr24172.sh
new file mode 100644
index 0000000..f455b27
--- /dev/null
+++ b/testsuite/dwz.tests/pr24172.sh
@@ -0,0 +1,14 @@
+cp $execs/dw2-skip-prologue 1
+
+if dwz 1 2>dwz.err; status=$?; then
+ true
+fi
+
+if ! grep -q "locexpr length .* exceeds .debug_loc section" dwz.err; then
+ cat dwz.err
+ exit 1
+fi
+
+[ $status -eq 1 ]
+
+rm -f 1 dwz.err
[-- Attachment #3: 0002-Require-dw2-skip-prologue-for-pr24172.sh.patch --]
[-- Type: text/x-patch, Size: 848 bytes --]
Require dw2-skip-prologue for pr24172.sh
Add missing require of dw2-skip-prologue for pr24172.sh in dwz-tests.exp.
This fixes buildbot failures on dwz-debian-armhf and dwz-debian-i386.
2019-04-24 Tom de Vries <tdevries@suse.de>
* testsuite/dwz.tests/dwz-tests.exp: Require dw2-skip-prologue for
pr24172.sh.
---
testsuite/dwz.tests/dwz-tests.exp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/testsuite/dwz.tests/dwz-tests.exp b/testsuite/dwz.tests/dwz-tests.exp
index 04f00fc..fbc94ac 100644
--- a/testsuite/dwz.tests/dwz-tests.exp
+++ b/testsuite/dwz.tests/dwz-tests.exp
@@ -36,6 +36,9 @@ foreach test $tests {
continue
}
}
+ if { $basename == "pr24172.sh" } {
+ lappend required_execs "dw2-skip-prologue"
+ }
if { ![istarget x86_64-*-*] } {
if { $basename == "pr24468.sh" } {
unsupported "$test"
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-04-24 10:38 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-01 0:00 [PATCH] Error out on invalid locexpr length Tom de Vries
2019-01-01 0:00 ` [committed] " Tom de Vries
2019-01-01 0:00 ` [PATCH] " Tom de Vries
2019-01-01 0:00 ` Tom de Vries
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).