diff options
author | Nick Clifton <nickc@redhat.com> | 2020-05-04 10:19:38 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2020-05-04 10:19:38 +0100 |
commit | 4706679daca21b5d637afaf5b55858b26f0f8c16 (patch) | |
tree | 8950f5eb3edfacd8a64ff517515f9144daf5f624 /gas | |
parent | 6015a0674901be2c3fd24867e1a610d2abf8c1a0 (diff) | |
download | gdb-4706679daca21b5d637afaf5b55858b26f0f8c16.zip gdb-4706679daca21b5d637afaf5b55858b26f0f8c16.tar.gz gdb-4706679daca21b5d637afaf5b55858b26f0f8c16.tar.bz2 |
Fix an illegal memory access in the assembler when generating a DWARF5 file/directory table with no entries.
PR 25917
* dwarf2dbg.c (out_dir_and_file_list): Check for the directory
table's existence before looking at its entries.
* testsuite/gas/elf/pr25917.s: New test source file.
* testsuite/gas/elf/pr25917.d: New test driver.
* testsuite/gas/elf/elf.exp (run_elf_list_test): Run the new test.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 9 | ||||
-rw-r--r-- | gas/dwarf2dbg.c | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/elf.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/pr25917.d | 9 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/pr25917.s | 4 |
5 files changed, 24 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 1b973f5..630289c 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,12 @@ +2020-05-04 Nick Clifton <nickc@redhat.com> + + PR 25917 + * dwarf2dbg.c (out_dir_and_file_list): Check for the directory + table's existence before looking at its entries. + * testsuite/gas/elf/pr25917.s: New test source file. + * testsuite/gas/elf/pr25917.d: New test driver. + * testsuite/gas/elf/elf.exp (run_elf_list_test): Run the new test. + 2020-04-30 Alex Coplan <alex.coplan@arm.com> * config/tc-aarch64.c (fix_insn): Implement for diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c index 9fdb34f..213f382 100644 --- a/gas/dwarf2dbg.c +++ b/gas/dwarf2dbg.c @@ -1995,7 +1995,7 @@ out_dir_and_file_list (void) /* Emit directory list. */ if (DWARF2_LINE_VERSION >= 5) { - if (dirs[0] == NULL) + if (dirs == NULL || dirs[0] == NULL) dir = remap_debug_filename ("."); else dir = remap_debug_filename (dirs[0]); diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp index 31026e4..86b304a 100644 --- a/gas/testsuite/gas/elf/elf.exp +++ b/gas/testsuite/gas/elf/elf.exp @@ -274,6 +274,7 @@ if { [is_elf_format] } then { run_dump_test "dwarf2-18" $dump_opts run_dump_test "dwarf2-19" $dump_opts run_dump_test "dwarf-5-file0" $dump_opts + run_dump_test "pr25917" run_dump_test "bss" run_dump_test "bad-bss" run_dump_test "bad-section-flag" diff --git a/gas/testsuite/gas/elf/pr25917.d b/gas/testsuite/gas/elf/pr25917.d new file mode 100644 index 0000000..6f83bbb --- /dev/null +++ b/gas/testsuite/gas/elf/pr25917.d @@ -0,0 +1,9 @@ +#as: --gdwarf-5 +#name: DWARF5: no files or directories +#readelf: -wl + +#... + The Directory Table is empty. + + No Line Number Statements. +#pass diff --git a/gas/testsuite/gas/elf/pr25917.s b/gas/testsuite/gas/elf/pr25917.s new file mode 100644 index 0000000..ec8d5a9 --- /dev/null +++ b/gas/testsuite/gas/elf/pr25917.s @@ -0,0 +1,4 @@ + .section .debug_info,"",%progbits +.Ldebug_info0: + .dc.l 0x30 + .dc.l 0x5 |