107472 Commits

Author SHA1 Message Date
10c21d953d Automatic date update in version.in 2021-09-18 00:00:08 +00:00
ef9768e37e PR28149 part 2, purge generated line info
Mixing compiler generated line info with gas generated line info is
generally just confusing.  Also .loc directives with non-zero view
fields might reference a previous .loc.  It becomes a little more
tricky to locate that previous .loc if there might be gas generated
line info present too.  Mind you, we turn off gas generation of line
info on seeing compiler generated line info, so any reference back
won't hit gas generated line info.  At least, if the view info is
sane.  Unfortunately, gas needs to handle mangled source.

	PR 28149
	* dwarf2dbg.c (purge_generated_debug): New function.
	(dwarf2_directive_filename): Call the above.
	(out_debug_line): Don't segfault after purging.
	* testsuite/gas/i386/dwarf2-line-4.d: Update expected output.
	* testsuite/gas/i386/dwarf4-line-1.d: Likewise.
	* testsuite/gas/i386/dwarf5-line-1.d: Likewise.
	* testsuite/gas/i386/dwarf5-line-2.d: Likewise.
2021-09-18 08:20:11 +09:30
51298b3303 PR28149, debug info with wrong file association
gcc-11 and gcc-12 pass -gdwarf-5 to gas, in order to prime gas for
DWARF 5 level debug info.  Unfortunately it seems there are cases
where the compiler does not emit a .file or .loc dwarf debug directive
before any machine instructions.  (Note that the .file directive
typically emitted as the first line of assembly output doesn't count as
a dwarf debug directive.  The dwarf .file has a file number before the
file name string.)

This patch delays allocation of file numbers for gas generated line
debug info until the end of assembly, thus avoiding any clashes with
compiler generated file numbers.  Two fixes for test case source are
necessary;  A .loc can't use a file number that hasn't already been
specified with .file.

A followup patch will remove all the gas generated line info on
seeing a .file directive.

	PR 28149
	* dwarf2dbg.c (num_of_auto_assigned): Delete.
	(current): Update initialisation.
	(set_or_check_view): Replace all accesses to view with u.view.
	(dwarf2_consume_line_info): Likewise.
	(dwarf2_directive_loc): Likewise.  Assert that we aren't generating
	line info.
	(dwarf2_gen_line_info_1): Don't call set_or_check_view on
	gas generated line entries.
	(dwarf2_gen_line_info): Set and track filenames for gas generated
	line entries.  Simplify generation of labels.
	(get_directory_table_entry): Use filename_cmp when comparing dirs.
	(do_allocate_filenum): New function.
	(dwarf2_where): Set u.filename and filenum to -1 for gas generated
	line entries.
	(dwarf2_directive_filename): Remove num_of_auto_assigned handling.
	(process_entries): Update view field access.  Call
	do_allocate_filenum.
	* dwarf2dbg.h (struct dwarf2_line_info): Add filename field in
	union aliasing view.
	* testsuite/gas/i386/dwarf2-line-3.s: Add .file directive.
	* testsuite/gas/i386/dwarf2-line-4.s: Likewise.
	* testsuite/gas/i386/dwarf2-line-4.d: Update expected output.
	* testsuite/gas/i386/dwarf4-line-1.d: Likewise.
	* testsuite/gas/i386/dwarf5-line-1.d: Likewise.
	* testsuite/gas/i386/dwarf5-line-2.d: Likewise.
2021-09-18 08:20:11 +09:30
5cdb4f1442 [GOLD] PowerPC64 support for sym+addend GOT entries
Pass addends to all the GOT handling functions, plus remove some
extraneous asserts.

	PR 28192
	* powerpc.cc (Output_data_got_powerpc): Add addend parameter to
	all methods creating got entries.
	(Target_powerpc::Scan::local): Pass reloc addend to got handling
	functions, and when creating dynamic got relocations.
	(Target_powerpc::Scan::global): Likewise.
	(Target_powerpc::Relocate::relocate): Likewise.  Remove extraneous
	assertions.
2021-09-18 08:20:11 +09:30
e4d49a0f90 [GOLD] Got_entry::write addends
This takes care of writing out GOT entries with addends.  The local
symbol case was already largely handled, except for passing the addend
to tls_offset_for_local which might need the addend in a
local_got_offset call.  That's needed also in tls_offset_for_global.

I'm assuming here that GOT entries for function symbols won't ever
have addends, and in particular that a GOT entry referencing PLT call
stub code won't want an offset into the code.

	PR 28192
	* output.cc (Output_data_got::Got_entry::write): Include addend
	in global symbol value.  Pass addend to tls_offset_for_*.
	* powerpc.cc (Target_powerpc::do_tls_offset_for_local): Handle addend.
	(Target_powerpc::do_tls_offset_for_global): Likewise.
	* s390.cc (Target_s390::do_tls_offset_for_local): Likewise.
	(Target_s390::do_tls_offset_for_global): Likewise.
	* target.h (Target::tls_offset_for_local): Add addend param.
	(Target::tls_offset_for_global): Likewise.
	(Target::do_tls_offset_for_local): Likewise.
	(Target::do_tls_offset_for_global): Likewise.
2021-09-18 08:20:11 +09:30
2cc9ed14fa [GOLD] Output_data_got create entry method addends
This patch makes all the Output_data_got methods that create new
entries accept an optional addend.

	PR 28192
	* output.h (Output_data_got::add_global): Add optional addend
	parameter.  Update comment.  Delete overload without addend.
	(Output_data_got::add_global_plt): Likewise.
	(Output_data_got::add_global_tls): Likewise.
	(Output_data_got::add_global_with_rel): Likewise.
	(Output_data_got::add_global_pair_with_rel): Likewise.
	(Output_data_got::add_local_plt): Likewise.
	(Output_data_got::add_local_tls): Likewise.
	(Output_data_got::add_local_tls_pair): Likewise.
	(Output_data_got::reserve_local): Likewise.
	(Output_data_got::reserve_global): Likewise.
	(Output_data_got::Got_entry): Include addend in global sym
	constructor.  Delete local sym constructor without addend.
	* output.cc (Output_data_got::add_global): Add addend param,
	pass to got handling methods.
	(Output_data_got::add_global_plt): Likewise.
	(Output_data_got::add_global_with_rel): Likewise.
	(Output_data_got::add_global_pair_with_rel): Likewise.
	(Output_data_got::add_local_plt): Likewise.
	(Output_data_got::add_local_tls_pair): Likewise.
	(Output_data_got::reserve_local): Likewise.
	(Output_data_got::reserve_global): Likewise.
2021-09-18 08:20:11 +09:30
54721a930e [GOLD] Output_data_got tidy
Some Output_data_got methods already have support for addends, but
were implemented as separate methods.  This removes unnecessary code
duplication.

Relobj::local_has_got_offset and others there get a similar treatment.
Comments are removed since it should be obvious without a comment, and
the existing comments are not precisely what the code does.  For
example, a local_has_got_offset call without an addend does not return
whether the local symbol has *a* GOT offset of type GOT_TYPE, it
returns whether there is a GOT entry of type GOT_TYPE for the symbol
with addend of zero.

	PR 28192
	* output.h (Output_data_got::add_local): Make addend optional.
	(Output_data_got::add_local_with_rel): Likewise.
	(Output_data_got::add_local_pair_with_rel): Likewise.
	* output.cc (Output_data_got::add_local): Delete overload
	without addend.
	(Output_data_got::add_local_with_rel): Likewise.
	(Output_data_got::add_local_pair_with_rel): Likewise.
	* object.h (Relobj::local_has_got_offset): Make addend optional.
	Delete overload without addend later.  Update comment.
	(Relobj::local_got_offset): Likewise.
	(Relobj::set_local_got_offset): Likewise.
2021-09-18 08:20:11 +09:30
973b2b402e [GOLD] Remove addend from Local_got_entry_key
This patch removes the addend from Local_got_entry_key, which is
unnecessary now that Got_offset_list has an addend.  Note that it
might be advantageous to keep the addend in Local_got_entry_key when
linking objects containing a large number of section_sym+addend@got
relocations.  I opted to save some memory by removing the field but
left the class there in case we might need to restore {sym,addend}
lookup.  That's also why this change is split out from the
Got_offset_list change.

	PR 28192
	* object.h (Local_got_entry_key): Delete addend_ field.
	Adjust constructor and methods to suit.
	* object.cc (Sized_relobj::do_for_all_local_got_entries):
	Update key.
2021-09-18 08:20:11 +09:30
912697efc1 [GOLD] Got_offset_list: addend field
This is the first in a series of patches aimed at supporting GOT
entries against symbol plus addend generally for PowerPC64 rather than
just section symbol plus addend as gold has currently.

This patch adds an addend field to Got_offset_list, so that both local
and global symbols can have GOT entries with addend.

	PR 28192
	* object.h (Got_offset_list): Add addend_ field, init in both
	constructors.  Adjust all accessors to suit.
	(Sized_relobj::do_local_has_got_offset): Adjust to suit.
	(Sized_relobj::do_local_got_offset): Likewise.
	(Sized_relobj::do_set_local_got_offset): Likewise.
	* symtab.h (Symbol::has_got_offset): Add optional addend param.
	(Symbol::got_offset, Symbol::set_got_offset): Likewise.
	* incremental.cc (Local_got_offset_visitor::visit): Add unused
	uint64_t parameter with FIXME.
	(Global_got_offset_visitor::visit): Add unused uint64_t parameter.
2021-09-18 08:20:11 +09:30
6bc2c6ee80 Fix segfault when running ia16-elf-gdb
"A problem internal to GDB has been detected,
further debugging may prove unreliable."

Segmentation fault
2021-09-17 13:36:51 -06:00
c9f2799101 RISC-V: Merged extension string tables and their version tables into one.
There are two main reasons for this patch,

* In the past we had two extension tables, one is used to record all
supported extensions in bfd/elfxx-riscv.c, another is used to get the
default extension versions in gas/config/tc-riscv.c.  It is hard to
maintain lots of tables in different files, but in fact we can merge
them into just one table.  Therefore, we now define many riscv_supported_std*
tables, which record names and versions for all supported extensions.
We not only use these tables to initialize the riscv_ext_order, but
also use them to get the default versions of extensions, and decide if
the extensions should be enbaled by default.

* We add a new filed `default_enable' for the riscv_supported_std* tables,
to decide if the extension should be enabled by default.  For now if the
`default_enable' field of the extension is set to EXT_DEFAULT, then we
should enable the extension when the -march and elf architecture attributes
are not set.  In the future, I suppose the `default_enable' can be set
to lots of EXT_<VENDOR>, each vendor can decide to open which extensions,
when the target triple of vendor is chosen.

The elf/linux regression tests of riscv-gnu-toolchain are passed.

bfd/
	* elfnn-riscv.c (cpu-riscv.h): Removed sine it is included in
	bfd/elfxx-riscv.h.
	(riscv_merge_std_ext): Updated since the field of rpe is changed.
	* elfxx-riscv.c (cpu-riscv.h): Removed.
	(riscv_implicit_subsets): Added implicit extensions for g.
	(struct riscv_supported_ext): Used to be riscv_ext_version.  Moved
	from gas/config/tc-riscv.c, and added new field `default_enable' to
	decide if the extension should be enabled by default.
	(EXT_DEFAULT): Defined for `default_enable' field.
	(riscv_supported_std_ext): It used to return the supported standard
	architecture string, but now we move ext_version_table from
	gas/config/tc-riscv.c to here, and rename it to riscv_supported_std_ext.
	Currently we not only use the table to initialize riscv_ext_order, but
	also get the default versions of extensions, and decide if the extensions
	should be enbaled by default.
	(riscv_supported_std_z_ext): Likewise, but is used for z* extensions.
	(riscv_supported_std_s_ext): Likewise, but is used for s* extensions.
	(riscv_supported_std_h_ext): Likewise, but is used for h* extensions.
	(riscv_supported_std_zxm_ext): Likewise, but is used for zxm* extensions.
	(riscv_all_supported_ext): Includes all supported extension tables.
	(riscv_known_prefixed_ext): Updated.
	(riscv_valid_prefixed_ext): Updated.
	(riscv_init_ext_order): Init the riscv_ext_order table according to
	riscv_supported_std_ext.
	(riscv_get_default_ext_version): Moved from gas/config/tc-riscv.c.
	Get the versions of extensions from riscv_supported_std* tables.
	(riscv_parse_add_subset): Updated.
	(riscv_parse_std_ext): Updated.
	(riscv_set_default_arch): Set the default subset list according to
	the default_enable field of riscv_supported_*ext tables.
	(riscv_parse_subset): If the input ARCH is NULL, then we call
	riscv_set_default_arch to set the default subset list.
	* elfxx-riscv.h (cpu-riscv.h): Included.
	(riscv_parse_subset_t): Removed get_default_version field, and added
	isa_spec field to replace it.
	(extern riscv_supported_std_ext): Removed.
gas/
	* (bfd/cpu-riscv.h): Removed.
	(struct riscv_ext_version): Renamed and moved to bfd/elfxx-riscv.c.
	(ext_version_table): Likewise.
	(riscv_get_default_ext_version): Likewise.
	(ext_version_hash): Removed.
	(init_ext_version_hash): Removed.
	(riscv_set_arch): Updated since the field of rps is changed.  Besides,
	report error when the architecture string is empty.
	(riscv_after_parse_args): Updated.
2021-09-17 16:33:54 +08:00
648d5dc4e6 Automatic date update in version.in 2021-09-17 00:00:08 +00:00
169a287181 [gdb/testsuite] Fix interrupted sleep in multi-threaded test-cases
When running test-case gdb.threads/continue-pending-status.exp with native, I
have:
...
(gdb) continue^M
Continuing.^M
PASS: gdb.threads/continue-pending-status.exp: attempt 0: continue for ctrl-c
^C^M
Thread 1 "continue-pendin" received signal SIGINT, Interrupt.^M
[Switching to Thread 0x7ffff7fc4740 (LWP 1276)]^M
0x00007ffff758e4c0 in __GI___nanosleep () at nanosleep.c:27^M
27        return SYSCALL_CANCEL (nanosleep, requested_time, remaining);^M
(gdb) PASS: gdb.threads/continue-pending-status.exp: attempt 0: caught interrupt
...
but with target board unix/-m32, I run into:
...
(gdb) continue^M
Continuing.^M
PASS: gdb.threads/continue-pending-status.exp: attempt 0: continue for ctrl-c
[Thread 0xf74aeb40 (LWP 31957) exited]^M
[Thread 0xf7cafb40 (LWP 31956) exited]^M
[Inferior 1 (process 31952) exited normally]^M
(gdb) Quit^M
...

The problem is that the sleep (300) call at the end of main is interrupted,
which causes the inferior to exit before the ctrl-c can be send.

This problem is described at "Interrupted System Calls" in the docs, and the
suggested solution (using a sleep loop) indeed fixes the problem.

Fix this instead using the more prevalent:
...
  alarm (300);
  ...
  while (1) sleep (1);
...
which is roughly equivalent because the sleep is called at the end of main,
but slightly better because it guards against hangs from the start rather than
from the end of main.

Likewise in gdb.base/watch_thread_num.exp.

Likewise in gdb.btrace/enable-running.exp, but use the sleep loop there,
because the sleep is not called at the end of main.

Tested on x86_64-linux.
2021-09-16 14:27:01 +02:00
0ffd31f044 gdb: manual: fix werrors typo 2021-09-16 03:27:56 -04:00
dc746ef741 Automatic date update in version.in 2021-09-16 00:00:07 +00:00
f677852bbd [gdb/testsuite] Use function_range in gdb.dwarf2/dw2-abs-hi-pc.exp
When I run test-case gdb.dwarf2/dw2-abs-hi-pc.exp with gcc, we have:
...
(gdb) break hello^M
Breakpoint 1 at 0x4004c0: file dw2-abs-hi-pc-hello.c, line 24.^M
(gdb) PASS: gdb.dwarf2/dw2-abs-hi-pc.exp: break hello
...
but with clang, I run into:
...
(gdb) break hello^M
Breakpoint 1 at 0x4004e4^M
(gdb) FAIL: gdb.dwarf2/dw2-abs-hi-pc.exp: break hello
...

The problem is that the CU and function both have an empty address range:
...
 <0><d2>: Abbrev Number: 1 (DW_TAG_compile_unit)
    <108>   DW_AT_name        : dw2-abs-hi-pc-hello.c
    <123>   DW_AT_low_pc      : 0x4004e0
    <127>   DW_AT_high_pc     : 0x4004e0
 <1><12f>: Abbrev Number: 2 (DW_TAG_subprogram)
    <131>   DW_AT_name        : hello
    <13a>   DW_AT_low_pc      : 0x4004e0
    <13e>   DW_AT_high_pc     : 0x4004e0
...

The address ranges are set like this in dw2-abs-hi-pc-hello-dbg.S:
...
        .4byte  .hello_start    /* DW_AT_low_pc */
        .4byte  .hello_end      /* DW_AT_high_pc */
...
where the labels refer to dw2-abs-hi-pc-hello.c:
...
extern int v;

asm (".hello_start: .globl .hello_start\n");
void
hello (void)
{
asm (".hello0: .globl .hello0\n");
  v++;
asm (".hello1: .globl .hello1\n");
}
asm (".hello_end: .globl .hello_end\n");
...

Using asm labels in global scope is a known source of problems, as explained
in the comment of proc function_range in gdb/testsuite/lib/dwarf.exp.

Fix this by using function_range instead.

Tested on x86_64-linux with gcc and clang-7 and clang-12.
2021-09-15 15:53:18 +02:00
720f6ee095 arc: Fix got-weak linker test
Use regular expressions to fix the got-weak linker test.

ld/
	* testsuite/got-weak.d: Update test.

Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
2021-09-15 13:49:02 +03:00
b4745472b6 bfd: fix incorrect type used in sizeof
Noticed in passing that we used 'sizeof (char **)' when calculating
the size of a list of 'char *' pointers.  Of course, this isn't really
going to make a difference anywhere, but we may as well be correct.

There should be no user visible changes after this commit.

bfd/ChangeLog:

	* archures.c (bfd_arch_list): Use 'char *' instead of 'char **'
	when calculating space for a string list.
2021-09-15 11:32:33 +01:00
3d53d4603e [gdb/doc] Fix typo in maint selftest entry
Fix typo "will by" -> "will be".
2021-09-15 11:46:57 +02:00
7b7c365c5c [bfd] Ensure unique printable names for bfd archs
Remove duplicate entry in bfd_ft32_arch and bfd_rx_arch.

Fix printable name for bfd_mach_n1: "nh1" -> "n1".

	PR 28336
	* cpu-ft32.c (arch_info_struct): Remove "ft32" entry.
	* cpu-rx.c (arch_info_struct): Remove "rx" entry.
	* cpu-nds32.c (bfd_nds32_arch): Fix printable name for bfd_mach_n1
	entry.
2021-09-15 10:10:46 +02:00
0a8d812b42 PR28328, dlltool ice
PR 28328
	* archive.c (bfd_ar_hdr_from_filesystem): Don't use bfd_set_input_error
	here, our caller will do that.
2021-09-15 10:04:17 +09:30
ff03a88e30 Automatic date update in version.in 2021-09-15 00:00:07 +00:00
58eaf4e9bd [gdb/testsuite] Fix gdb_load_no_complaints with gnu-debuglink
When running test-case gdb.dwarf2/dw2-ranges-psym-warning.exp with target
board gnu-debuglink I run into:
...
(gdb) file dw2-ranges-psym-warning^M
Reading symbols from dw2-ranges-psym-warning...^M
Reading symbols from .debug/dw2-ranges-psym-warning.debug...^M
(gdb) FAIL: gdb.dwarf2/dw2-ranges-psym-warning.exp: No complaints
...

Fix this by updating the regexp in gdb_load_no_complaints.

Tested on x86_64-linux.
2021-09-14 14:52:38 +02:00
211aafd18d [gdb/symtab] Fix function range handling in psymtabs
Consider the test-case from this patch.

We run into:
...
(gdb) PASS: gdb.dwarf2/dw2-ranges-psym-warning.exp: continue
bt^M
warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
^M
warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
^M
warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
^M
warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
^M
warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
^M
warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
^M
  read in psymtab, but not in symtab.)^M
^M
)^M
(gdb) FAIL: gdb.dwarf2/dw2-ranges-psym-warning.exp: bt
...

This happens as follows.

The function foo:
...
 <1><31>: Abbrev Number: 4 (DW_TAG_subprogram)
    <33>   DW_AT_name        : foo
    <37>   DW_AT_ranges      : 0x0
...
has these ranges:
...
    00000000 00000000004004c1 00000000004004d2
    00000000 00000000004004ae 00000000004004af
    00000000 <End of list>
...
which have a hole at at [0x4004af,0x4004c1).

However, the address map of the partial symtabs incorrectly maps addresses
in the hole (such as 0x4004b6 in the backtrace) to the foo CU.

The address map of the full symbol table of the foo CU however does not
contain the addresses in the hole, which is what the warning / internal error
complains about.

Fix this by making sure that ranges of functions are read correctly.

The patch adds a bit to struct partial_die_info, in this hole (shown for
x86_64-linux):
...
/*   11: 7   |     4 */    unsigned int canonical_name : 1;
/* XXX  4-byte hole  */
/*   16      |     8 */    const char *raw_name;
...
So there's no increase in size for 64-bit, but AFAIU there will be an increase
for 32-bit.

Tested on x86_64-linux.

gdb/ChangeLog:

2021-08-10  Tom de Vries  <tdevries@suse.de>

	PR symtab/28200
	* dwarf2/read.c (struct partial_die_info): Add has_range_info and
	range_offset field.
	(add_partial_subprogram): Handle pdi->has_range_info.
	(partial_die_info::read): Set pdi->has_range_info.

gdb/testsuite/ChangeLog:

2021-08-10  Tom de Vries  <tdevries@suse.de>

	PR symtab/28200
	* gdb.dwarf2/dw2-ranges-psym-warning-main.c: New test.
	* gdb.dwarf2/dw2-ranges-psym-warning.c: New test.
	* gdb.dwarf2/dw2-ranges-psym-warning.exp: New file.
2021-09-14 14:41:27 +02:00
2762d28853 [gdb/symtab] Fix CU list in .debug_names for dummy CUs
With current trunk and target board cc-with-debug-names we have:
...
(gdb) file dw2-ranges-psym^M
Reading symbols from dw2-ranges-psym...^M
warning: Section .debug_names in dw2-ranges-psym has abbreviation_table of \
  size 1 vs. written as 28, ignoring .debug_names.^M
(gdb) set complaints 0^M
(gdb) FAIL: gdb.dwarf2/dw2-ranges-psym.exp: No complaints
...

The executable has 8 compilation units:
...
$ readelf -wi dw2-ranges-psym | grep @
  Compilation Unit @ offset 0x0:
  Compilation Unit @ offset 0x2e:
  Compilation Unit @ offset 0xa5:
  Compilation Unit @ offset 0xc7:
  Compilation Unit @ offset 0xd2:
  Compilation Unit @ offset 0x145:
  Compilation Unit @ offset 0x150:
  Compilation Unit @ offset 0x308:
...
of which the ones at 0xc7 and 0x145 are dummy CUs (that is, they do not
contain a single DIE), which were added by recent commit 5ef670d81fd
"[gdb/testsuite] Add dummy start and end CUs in dwarf assembly".

The .debug_names section contains this CU table:
...
[  0] 0x0
[  1] 0x2e
[  2] 0xa5
[  3] 0xd2
[  4] 0x150
[  5] 0x308
[  6] 0x1
[  7] 0x0
...
The last two entries are incorrect, and the entries for the dummy CUs are
missing.

The last two entries are incorrect because here in write_debug_names we write
the dimension of the CU list as 8:
...
  /* comp_unit_count - The number of CUs in the CU list.  */
  header.append_uint (4, dwarf5_byte_order,
                     per_objfile->per_bfd->all_comp_units.size ()
                     - per_objfile->per_bfd->tu_stats.nr_tus);
...
while the actual dimension of the CU list is 6.

The discrepancy is caused by this code which skips the dummy CUs:
...
  for (int i = 0; i < per_objfile->per_bfd->all_comp_units.size (); ++i)
    {
      ...
      /* CU of a shared file from 'dwz -m' may be unused by this main
        file.  It may be referenced from a local scope but in such
        case it does not need to be present in .debug_names.  */
      if (psymtab == NULL)
       continue;
...
because they have a null partial symtab.

We can fix this by writing the actual dimension of the CU list, but that still
leaves the dummy CUs out of the CU list.  The purpose of having these is to
delimit the end of preceding CUs.

So, fix this by:
- removing the code that skips the dummy CUs (note that the same change
  was done for .gdb_index in commit efba5c2319d '[gdb/symtab] Handle PU
  without import in "save gdb-index"'.
- verifying that all units are represented in the CU/TU lists
- using the actual CU list size when writing the dimension of the CU list
  (and likewise for the TU list).

Tested on x86_64-linux with native and target board cc-with-debug-names.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28261
2021-09-14 12:57:58 +02:00
3859e65e23 [gdb/testsuite] Generate .debug_aranges in gdb.dwarf2/locexpr-data-member-location.exp
When running test-case gdb.dwarf2/locexpr-data-member-location.exp with target
board cc-with-debug-names, all tests pass but we run into PR28261:
...
(gdb) run ^M
Starting program: locexpr-data-member-location ^M
warning: Section .debug_names in locexpr-data-member-location-lib.so has \
  abbreviation_table of size 1 vs. written as 37, ignoring .debug_names.^M
...

Using a patch that fixes PR28261, the warning is gone, but we run into:
...
FAIL: gdb.dwarf2/locexpr-data-member-location.exp: step into foo
...

This is due a missing .debug_aranges contribution for the CU declared in
gdb.dwarf2/locexpr-data-member-location.exp.

Fix this by adding the missing .debug_aranges contribution.

Tested on x86_64-linux.
2021-09-14 12:57:58 +02:00
09a7e91293 arc: Fix potential invalid pointer access when fixing got symbols.
When statically linking, it can arrive to an undefined weak symbol of
which its value cannot be determined. However, we are having pieces of
code which doesn't take this situation into account, leading to access
a structure which may not be initialized. Fix this situation and add a
test.

bfd/
xxxx-xx-xx  Cupertino Miranda  <cmiranda@synopsys.com>
            Claudiu Zissulescu  <claziss@synopsys.com>

	* arc-got.h (arc_static_sym_data): New structure.
	(get_static_sym_data): New function.
	(relocate_fix_got_relocs_for_got_info): Move the computation fo
	symbol value and section to above introduced function, and use
	this new function.

ld/testsuite/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

	* ld-arc/got-weak.d: New file.
	* ld-arc/got-weak.s: Likewise.

Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>

fix
2021-09-14 12:10:54 +03:00
f050cfdd82 sim: bfin: add support for SDL2
This probably should have been ported long ago, but better late than
never.  We keep support for both versions for now since both projects
tend to have long lifetimes.  Maybe consider dropping SDL1 in another
ten years.
2021-09-13 22:45:19 -04:00
924e660d52 Automatic date update in version.in 2021-09-14 00:00:06 +00:00
59a397f193 Remove use of __CYGNUSCLIB__
I found a check of __CYGNUSCLIB__ in dbxread.c.  I think this is dead
code.  This patch removes it.
2021-09-13 17:53:58 -06:00
c5e91131d7 [gdb/testsuite] Check for valid test name
When running gdb.base/batch-exit-status.exp I noticed that the test name
contains a newline:
...
PASS: gdb.base/batch-exit-status.exp: : No such file or directory\.^M
: No such file or directory\.: [lindex $result 2] == 0
...

Check for this in ::CheckTestNames::check, such that we have a warning:
...
PASS: gdb.base/batch-exit-status.exp: : No such file or directory\.^M
: No such file or directory\.: [lindex $result 2] == 0
WARNING: Newline in test name
...

Tested on x86_64-linux.
2021-09-13 21:41:13 +02:00
3047c7869d [gdb/tdep] Fix exec check in gdb_print_insn_arm
With a gdb build with --enable-targets=all we run into a KFAIL:
...
KFAIL: gdb.gdb/unittest.exp: executable loaded: maintenance selftest, \
  failed none (PRMS: gdb/27891)
...
due to:
...
Running selftest print_one_insn.^M
Self test failed: arch armv8.1-m.main: self-test failed at \
  disasm-selftests.c:165^M
...

The test fails because we expect disassembling of one arm insn to consume 4
bytes and produce (using verbose = true in disasm-selftests.c):
...
arm mov r0, #0
...
but instead the disassembler uses thumb mode and only consumes 2
bytes and produces:
...
arm movs        r0, r0
...

The failure does not show up in the "no executable loaded" variant because
this code in gdb_print_insn_arm isn't triggered:
...
  if (current_program_space->exec_bfd () != NULL)
    info->flags |= USER_SPECIFIED_MACHINE_TYPE;
...
and consequently we do this in print_insn:
...
      if ((info->flags & USER_SPECIFIED_MACHINE_TYPE) == 0)
        info->mach = bfd_mach_arm_unknown;
...
and don't set force_thumb to true in select_arm_features.

The code in gdb_print_insn_arm makes the assumption that the disassembly
architecture matches the exec architecture, which in this case is incorrect,
because the exec architecture is x86_64, and the disassembly architecture is
armv8.1-m.main.  Fix that by explicitly checking it:
...
  if (current_program_space->exec_bfd () != NULL
      && (current_program_space->exec_bfd ()->arch_info
	  == gdbarch_bfd_arch_info (gdbarch)))
...

This fixes the print_one_insn failure, so remove the KFAIL.

Tested on x86_64-linux.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27891
2021-09-13 20:16:36 +02:00
cad152f221 [gdb/tdep] Reset force_thumb in parse_arm_disassembler_options
With a gdb build with --enable-targets=all, we have 2 arch-specific failures
in selftest print_one_insn:
...
$ gdb -q -batch a.out -ex "maint selftest print_one_insn" 2>&1 \
  | grep "Self test failed: arch "
Self test failed: arch armv8.1-m.main: self-test failed at \
  disasm-selftests.c:165
Self test failed: arch arm_any: self-test failed at disasm-selftests.c:165
$
...

During the first failed test, force_thumb is set to true, and remains so until
and during the second test, which causes the second failure.

Fix this by resetting force_thumb to false in parse_arm_disassembler_options,
such that we get just one failure:
...
$ gdb -q -batch a.out -ex "maint selftest print_one_insn" 2>&1 \
  | grep "Self test failed: arch "
Self test failed: arch armv8.1-m.main: self-test failed at \
  disasm-selftests.c:165
$
...

Tested on x86_64-linux.
2021-09-13 20:16:36 +02:00
e68b7db18c Fix no-Python build
A build without Python will currently fail, because
selftests::test_python uses gdb_python_initialized, which is only
conditionally defined.

This patch fixes the build by making test_python also be conditionally
defined.  I chose this approach because the selftest will fail if
Python is not enabled, so it didn't seem useful to leave it defined.
2021-09-13 07:49:36 -06:00
18287cf8b1 RISC-V: Update the assembler insn testcase.
Since the 0x57 is preserved for the vadd.vv instruction in the integration
branch, remove it to make sure the testcase can work.

gas/
	* testsuite/gas/riscv/insn.d: Remove 0x57 since it is preserved
	for vadd.vv instruction.
	* testsuite/gas/riscv/insn.s: Likewise.
2021-09-13 20:22:47 +08:00
168495916d MIPS: don't use get_symbol_name() for section parsing. With s_change_section() later calling obj_elf_section(), it seems better to pre-parse the section name by the same function that will be used there. This way no differences in what is accepted will result.
gas	* config/tc-mips.c (s_change_section): Use obj_elf_section_name to
	parse the section name.
2021-09-13 11:02:48 +01:00
5a2947cf17 ia64: don't use get_symbol_name() for section parsing. With cross_section() later calling obj_elf_section(), it seems better to pre-parse the section name by the same function that will be used there. This way no differences in what is accepted will result.
gas	* config/tc-ia64.c (cross_section): Use obj_elf_section_name to
	parse the section name.
2021-09-13 11:00:25 +01:00
7486cb6843 [gdb/testsuite] Fix gdb.gdb/selftest.exp
With a gdb build with CFLAGS "-O2 -g -flto=auto", I run into:
...
 #7  gdb_main (args=0x7fffffffd220) at src/gdb/main.c:1368^M
 #8  main (argc=<optimized out>, argv=<optimized out>) at src/gdb/gdb.c:32^M
 (gdb) FAIL: gdb.gdb/selftest.exp: backtrace through signal handler
...
which means that this regexp in proc test_with_self fails:
...
  -re "#0.*(read|poll).*in main \\(.*\\) at .*gdb\\.c.*$gdb_prompt $" {
...

The problem is that gdb_main has been inlined into main, and consequently the
backtrace uses:
...
 #x  <fn> ...
...
instead of
...
 #x  <address> in <fn> ...
...

Fix this by updating the regexp to not require "in" before " main".

Tested on x86_64-linux.
2021-09-13 11:13:28 +02:00
fd5255582f Re: Deprecate a.out support for NetBSD targets
* config.bfd: Correct m68-*-*bsd* obsolete target match.
2021-09-13 17:04:01 +09:30
003fa0df36 [gdb/testsuite] Fix test name in gdb.base/batch-exit-status.exp
When running gdb.base/batch-exit-status.exp I noticed that the test name
contains a newline:
...
PASS: gdb.base/batch-exit-status.exp: : No such file or directory\.^M
: No such file or directory\.: [lindex $result 2] == 0
...

The mistake is that I passed an output regexp argument to a parameter
interpreted as testname prefix.  Fix this by passing a testname prefix
instead.

Add support for checking output, to be able to handle the output regexp
argument.

Tested on x86_64-linux.
2021-09-13 09:16:13 +02:00
52e5dceb69 Automatic date update in version.in 2021-09-13 00:00:06 +00:00
a02a90c114 [gdb/testsuite] Set sysroot earlier in local-board.exp
When running test-case gdb.base/batch-exit-status.exp for native, it passes.
But with target board cc-with-debug-names, we run into (added missing double
quotes for clarity):
...
builtin_spawn $build/gdb/testsuite/../../gdb/gdb -nw -nx \
  -data-directory $build/gdb/testsuite/../data-directory \
  -iex "set height 0" -iex "set width 0" -ex "set sysroot" -batch ""^M
: No such file or directory.^M
PASS: gdb.base/batch-exit-status.exp: \
  : No such file or directory\.: [lindex $result 2] == 0
FAIL: gdb.base/batch-exit-status.exp: \
  : No such file or directory\.: [lindex $result 3] == $expect_status
...

The difference between the passing and failing case is that with native we
have (leaving out set height/width for brevity):
...
$ gdb -batch ""; echo $?
: No such file or directory.
1
...
and with target board cc-with-debug-names:
...
$ gdb -ex "set sysroot" -batch ""; echo $?
: No such file or directory.
0
...

The difference is expected.  GDB returns the exit status of the last executed
command.  In the former case that's 'file ""', which fails.  In the latter case,
that's 'set sysroot', which succeeds.

Fix this by setting sysroot using -iex instead of -ex in local-board.exp, such
that we have the expected:
...
$ gdb -iex "set sysroot" -batch ""; echo $?
: No such file or directory.
1
...

Tested on x86_64-linux.
2021-09-12 11:30:06 +02:00
58632d2856 Automatic date update in version.in 2021-09-12 00:00:05 +00:00
bf9f8f4179 sim: run: change help short option to -h
It's unclear why -H was picked over the more standard -h, but since
-h is still not used, just change -H to -h to match pretty much every
other tool in the sourceware tree.
2021-09-11 02:55:06 -04:00
5abdee61d9 Automatic date update in version.in 2021-09-11 00:00:07 +00:00
cf9c1c753c [gdb/testsuite] Reimplement gdb.gdb/python-selftest.exp as unittest
The test-case gdb.gdb/python-selftest.exp:
- patches the gdb_python_initialized variable in gdb to 0
- checks that the output of a python command is "Python not initialized"

Reimplement gdb.gdb/python-selftest.exp as unittest, using:
- execute_command_to_string to capture the output
- try/catch to catch the "Python not initialized" exception.

Tested on x86_64-linux.
2021-09-10 21:54:46 +02:00
d7d1029e62 [gdb/testsuite] Fix DUPLICATE in gdb.base/global-var-nested-by-dso.exp
Fix DUPLICATE in gdb.base/global-var-nested-by-dso.exp by naming commands more
uniquely.
2021-09-10 17:16:48 +02:00
a1c3ad9cd8 [gdb/testsuite] Fix DUPLICATE in gdb.base/skip-solib.exp
Fix DUPLICATE in gdb.base/skip-solib.exp by using with_test_prefix.

Also fix indentation style and long lines, remove outdated question/answer
bits, and use multi_line.
2021-09-10 17:16:48 +02:00
e36788d135 [gdb/testsuite] Fix handling of nr_args < 3 in mi_gdb_test
The documentation of mi_gdb_test states that the command, pattern and message
arguments are mandatory:
...
 # mi_gdb_test COMMAND PATTERN MESSAGE [IPATTERN] -- send a command to gdb;
 #   test the result.
...

However, this is not checked, and when mi_gdb_test is called with less than 3
arguments, it passes or fails silently.

Fix this by using the following semantics:
- if there are 1 or 2 arguments, use the command as the message.
- if there is 1 argument, use ".*" as the pattern.
- if there are no or too much arguments, error out.

Fix a PATH issue in gdb.mi/mi-logging.exp, introduced by using the command as
message.  Fix a few other trivial-looking FAILs.

There are 11 less trivial-looking FAILs left in gdb.mi in test-cases:
- mi-nsmoribund.exp
- mi-breakpoint-changed.exp
- mi-break.exp.

Tested on x86_64-linux.
2021-09-10 17:16:48 +02:00
ca49878470 [gdb/testsuite] Add string_list_to_regexp
A regexp pattern with escapes like this is hard to read:
...
set re "~\"\[$\]$decimal = 1\\\\n\"\r\n\\^done"
...

We can make it more readable by spacing out parts (which allows us to also use
the curly braces where that's convenient):
...
set re [list "~" {"} {[$]} $decimal " = 1" "\\\\" "n" {"} "\r\n" "\\^" "done"]
set re [join $re ""]
...
or by using string_to_regexp:
...
set re [list \
            [string_to_regexp {~"$}] \
            $decimal \
            [string_to_regexp " = 1\\n\"\r\n^done"]]
set re [join $re ""]
...
Note: we have to avoid applying string_to_list to decimal, which is already a
regexp.

Add a proc string_list_to_regexp to make it easy to do both:
...
set re [list \
            [string_list_to_regexp ~ {"} $] \
            $decimal \
            [string_list_to_regexp " = 1" \\ n {"} \r\n ^ done]]
...

Also add a test-case gdb.testsuite/string_to_regexp.exp.
2021-09-10 17:16:48 +02:00