binutils-gdb/gdb/testsuite/gdb.dwarf2/loclists-sec-offset.c
Simon Marchi 9307efbe9e gdb/testsuite: add test for .debug_{rng,loc}lists section without offset array
It is possible for the tables in the .debug_{rng,loc}lists sections to
not have an array of offsets.  In that case, the offset_entry_count
field of the header is 0.  The forms DW_FORM_{rng,loc}listx (reference
by index) can't be used with that table.  Instead, the
DW_FORM_sec_offset form, which references a {rng,loc}list by direct
offset in the section, must be used.  From what I saw, this is what GCC
currently produces.

Add tests for this case.  I didn't see any bug related to this, I just
think that it would be nice to have coverage for this. A new
`-with-offset-array` option is added to the `table` procs, used when
generating {rng,loc}lists, to decide whether to generate the offset
array.

gdb/testsuite/ChangeLog:

	* lib/dwarf.exp (rnglists): Add -no-offset-array option to
	table proc.
	* gdb.dwarf2/rnglists-sec-offset.exp: Add test for
	.debug_rnglists table without offset array.
	* gdb.dwarf2/loclists-sec-offset.exp: Add test for
	.debug_loclists table without offset array.

Change-Id: I8e34a7bf68c9682215ffbbf66600da5b7db91ef7
2021-02-02 10:42:12 -05:00

70 lines
1.3 KiB
C

/* Copyright (C) 2021 Free Software Foundation, Inc.
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/>. */
static int
func1 (void)
{
asm ("func1_label: .global func1_label\n");
return 1;
}
static int
func2 (void)
{
asm ("func2_label: .global func2_label\n");
return 2;
}
static int
func3 (void)
{
asm ("func3_label: .global func3_label\n");
return 3;
}
static int
func4 (void)
{
asm ("func4_label: .global func4_label\n");
return 4;
}
static int
func5 (void)
{
asm ("func5_label: .global func5_label\n");
return 5;
}
static int
func6 (void)
{
asm ("func6_label: .global func6_label\n");
return 6;
}
int
main (void)
{
func1 ();
func2 ();
func3 ();
func4 ();
func5 ();
func6 ();
}