]> git.ipfire.org Git - thirdparty/binutils-gdb.git/log
thirdparty/binutils-gdb.git
3 years agogdb/testsuite: fix fission support in the Dwarf assembler
Andrew Burgess [Fri, 26 Mar 2021 12:06:37 +0000 (12:06 +0000)] 
gdb/testsuite: fix fission support in the Dwarf assembler

This commit fixes fission support in the Dwarf assembler. I added the
new test gdb.dwarf2/fission-absolute-dwo.exp which is a simple example
of using the fission support.  I also rewrote the existing test
gdb.dwarf2/fission-multi-cu.exp to use the new functionality (instead
of using an x86-64 only assembler file).

To better support compiling the assembler files produced by the Dwarf
assembler I have added the new proc build_executable_and_dwo_files in
lib/dwarf.exp, this replaces build_executable_from_fission_assembler,
all the tests that used the old proc have been updated.  Where the old
proc assumed a single .S source file which contained the entire test,
the new proc allows for multiple source files.

The Dwarf assembler already had some fission support, however, this
was not actually used in any tests, and when I tried using it there
were a few issues.

The biggest change is that we now generate DW_FORM_GNU_addr_index
instead of DW_FORM_addr for the low and high pc in
_handle_macro_at_range, support for the DW_FORM_GNU_addr_index is new
in this commit.

gdb/testsuite/ChangeLog:

* gdb.dwarf2/fission-absolute-dwo.c: New file.
* gdb.dwarf2/fission-absolute-dwo.exp: New file.
* gdb.dwarf2/fission-base.exp: Use build_executable_and_dwo_files
instead of build_executable_from_fission_assembler.
* gdb.dwarf2/fission-loclists-pie.exp: Likewise.
* gdb.dwarf2/fission-loclists.exp: Likewise.

3 years agogdb: Handle missing .debug_str section
Andrew Burgess [Mon, 22 Mar 2021 16:37:39 +0000 (16:37 +0000)] 
gdb: Handle missing .debug_str section

While messing with the Dwarf assembler (gdb/testsuite/lib/dwarf.exp) I
managed to create an ELF which made use of DW_FORM_strp, but didn't
include a .debug_str section.

When I started GDB on this ELF, GDB crashed.  I would have expected to
get an error instead.

I tracked this down to an unfortunate design choice in
dwarf2_section_info, a class which wraps around a bfd section, and is
used for reading in debug information.  GBB creates many
dwarf2_section_info objects, one for each debug section that might
need to be read, then as we find the input bfd sections we associate
them with the corresponding dwarf2_section_info.

If no matching input bfd section is found then the dwarf2_section_info
is left in an unassociated state, its internal bfd section pointer is
null.

If later GDB tries to read content from the dwarf2_section_info, for
example, which trying to read the string associated with DW_FORM_strp,
we spot that there is no associated bfd section and issue an error
message.

To make the users life easier, the error message includes the section
name being looked for, and the bfd from which the section was
obtained.

However, we get the section name by calling bfd_section_name on the
associated section, and we get the bfd filename by calling
bfd_get_filename on the owner of the associated section.

Of course, if there is no associated section then both the calls
bfd_section_name and dwarf2_section_info::get_bfd_owner will result in
undefined behaviour (e.g. a crash).

The solution I propose in this patch is, I know, not ideal.  I simply
spot the case where there is no associated section, and print a
simpler error message, leaving out the section name and filename.

A better solution would involve redesigning dwarf2_section_info, we
could associate each dwarf2_section_info with the initial bfd being
parsed.  We would then display this filename if there's nothing better
to display (e.g. if we find a section in a dwo/dwp split dwarf file
then we would probably use that filename in preference).

Each dwarf2_section_info could also have the concept of the default
section name that would be read for that section, for example, string
data might appear in ".debug_str" or ".zdebug_str", but if neither is
found, then it would probably be OK to just say ".debug_str" is
missing.

Anyway, I didn't do any of that redesign, I just wanted to stop GDB
crashing for now, so instead we get this:

  Dwarf Error: DW_FORM_strp used without required section

Which isn't the best, but in context, isn't too bad:

  Reading symbols from /path/to/executable...
  Dwarf Error: DW_FORM_strp used without required section
  (No debugging symbols found in /path/to/executable)

I also added some asserts into dwarf2_section_info which should
trigger before GDB crashes in future, if we trigger any other bad
paths through this code.

And there's a test for the specific issue I hit.

gdb/ChangeLog:

* dwarf2/section.c (dwarf2_section_info::get_bfd_owner): Add an
assert.
(dwarf2_section_info::get_file_name): Add an assert.
(dwarf2_section_info::read_string): Display a minimal, sane error
when the dwarf2_section_info is not associated with a bfd section.

gdb/testsuite/ChangeLog:

* gdb.dwarf2/dw2-using-debug-str.exp: Add an additional test.

3 years agogdb/py: fix gdb.parameter('data-directory')
Andrew Burgess [Fri, 26 Mar 2021 17:14:26 +0000 (17:14 +0000)] 
gdb/py: fix gdb.parameter('data-directory')

It was reported on IRC that using gdb.parameter('data-directory')
doesn't work correctly.

The problem is that the data directory is stored in 'gdb_datadir',
however the set/show command is associated with a temporary
'staged_gdb_datadir'.

When the user does 'set data-directory VALUE', the VALUE is stored in
'staged_gdb_datadir' by GDB, then set_gdb_datadir is called.  This in
turn calls set_gdb_data_directory to copy the value from
staged_gdb_datadir into gdb_datadir.

However, set_gdb_data_directory will resolve relative paths, so the
value stored in gdb_datadir might not match the value in
staged_gdb_datadir.

The Python gdb.parameter API fetches the parameter values by accessing
the variable associated with the show command, so in this case
staged_gdb_datadir.  This causes two problems:

1. Initially staged_gdb_datadir is NULL, and remains as such until the
user does 'set data-directory VALUE' (which might never happen), but
gdb_datadir starts with GDB's default data-directory value.  So
initially from Python gdb.parameter('data-directory') will return the
empty string, even though at GDB's CLI 'show data-directory' prints a
real path.

2. If the user does 'set data-directory ./some/relative/path', GDB
will resolve the relative path, thus, 'show data-directory' at the CLI
will print an absolute path.  However, the value is staged_gdb_datadir
will still be the relative path, and gdb.parameter('data-directory')
from Python will return the relative path.

In this commit I fix both of these issues by:

1. Initialising the value in staged_gdb_datadir based on the initial
value in gdb_datadir, and

2. In set_gdb_datadir, after calling set_gdb_data_directory, I copy
the value in gdb_datadir back into staged_gdb_datadir.

With these two changes in place the value in staged_gdb_datadir should
always match the value in gdb_datadir, and accessing data-directory
from Python should now work correctly.

gdb/ChangeLog:

* top.c (staged_gdb_datadir): Update comment.
(set_gdb_datadir): Copy the value of gdb_datadir back into
staged_datadir.
(init_main): Initialise staged_gdb_datadir.

gdb/testsuite/ChangeLog:

* gdb.python/py-parameter.exp: Add test for reading data-directory
using gdb.parameter API.

3 years agoFix pr27217 testcase failure
Alan Modra [Wed, 7 Apr 2021 08:42:38 +0000 (18:12 +0930)] 
Fix pr27217 testcase failure

aarch64_be-linux-gnu_ilp32  +FAIL: PR27212

PR 27217
* testsuite/gas/aarch64/pr27217.d: Correct name.  Accept ilp32 relocs.

3 years agoAutomatic date update in version.in
GDB Administrator [Wed, 7 Apr 2021 00:00:15 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agoReturn symbol from symbol_at_address_func
Alan Modra [Tue, 6 Apr 2021 09:27:04 +0000 (18:57 +0930)] 
Return symbol from symbol_at_address_func

include/
* dis-asm.h (struct disassemble_info <symbol_at_address_func>):
Return asymbol*.
binutils/
* objdump.c (objdump_symbol_at_address): Return asymbol*.
opcodes/
* dis-buf.c (generic_symbol_at_address): Return symbol* NULL.
* s12z-dis.c (decode_possible_symbol): Use symbol returned from
symbol_at_address_func.

3 years agoC99 NEWS and README
Alan Modra [Tue, 6 Apr 2021 04:12:18 +0000 (13:42 +0930)] 
C99 NEWS and README

* NEWS: Mention C99 requirement.
* README: Likewise.  Modernise examples and "Reporting bugs".

3 years ago[gdb/breakpoints] Workaround missing line-table entry
Tom de Vries [Tue, 6 Apr 2021 13:12:38 +0000 (15:12 +0200)] 
[gdb/breakpoints] Workaround missing line-table entry

When running test-case gdb.opt/inline-cmds.exp, we run into this KFAIL with
gcc:
...
Breakpoint 7, main () at gdb.opt/inline-cmds.c:71^M
71        result = 0; /* set breakpoint 3 here */^M
(gdb) PASS: gdb.opt/inline-cmds.exp: continue to breakpoint: consecutive func1
next^M
73        func1 (); /* first call */^M
(gdb) PASS: gdb.opt/inline-cmds.exp: next to first func1
next^M
75        marker ();^M
(gdb) KFAIL: gdb.opt/inline-cmds.exp: next to second func1 (PRMS: gdb/25884)
...
while with clang we have instead:
...
next^M
74        func1 (); /* second call */^M
(gdb) PASS: gdb.opt/inline-cmds.exp: next to second func1
...

The relevant bit of the test source is here in inline-cmds.c:
...
    71    result = 0; /* set breakpoint 3 here */
    72
    73    func1 (); /* first call */
    74    func1 (); /* second call */
    75    marker ();
...
with func1 defined as:
...
    33  inline __attribute__((always_inline)) int func1(void)
    34  {
    35    bar ();
    36    return x * y;
    37  }
...

The corresponding insns are:
...
  40050b:       movl   $0x0,0x200b1f(%rip)        # 601034 <result>
  400515:       callq  40057b <bar>
  40051a:       callq  40057b <bar>
  40051f:       callq  400596 <marker>
...
and the line number info is:
...
Line number    Starting address    View    Stmt
         71            0x40050b               x
         35            0x400515               x
         75            0x40051f               x
...

The line number info is missing an entry for the insn at 40051a, and that is
causing the FAIL.  This is a gcc issue, filed as PR gcc/98780 -" Missing line
table entry for inlined stmt at -g -O0".

[ For contrast, with clang we have an extra entry:
...
Line number    Starting address    View    Stmt
         71            0x40050b               x
         35            0x400515               x
         35            0x40051a
         75            0x40051f               x
...
though it appears to be missing the start-of-statement marker. ]

However, there is debug info that indicates that the insn at 40051a is not
part of the line table entry for the insn at 400515:
...
<2><1c4>: Abbrev Number: 8 (DW_TAG_inlined_subroutine)
    <1c5>   DW_AT_abstract_origin: <0x2a2>
    <1c9>   DW_AT_low_pc      : 0x400515
    <1d1>   DW_AT_high_pc     : 0x5
    <1d9>   DW_AT_call_file   : 1
    <1da>   DW_AT_call_line   : 73
 <2><1db>: Abbrev Number: 8 (DW_TAG_inlined_subroutine)
    <1dc>   DW_AT_abstract_origin: <0x2a2>
    <1e0>   DW_AT_low_pc      : 0x40051a
    <1e8>   DW_AT_high_pc     : 0x5
    <1f0>   DW_AT_call_file   : 1
    <1f1>   DW_AT_call_line   : 74
...
and indeed lldb manages to "next" from line 73 to line 74.

Work around the missing line table entry, by using the inline frame info to
narrow the stepping range in prepare_one_step.

Tested on x86_64-linux.

gdb/ChangeLog:

2021-04-06  Tom de Vries  <tdevries@suse.de>

PR breakpoints/25884
* infcmd.c (prepare_one_step): Using inline frame info to narrow
stepping range.

gdb/testsuite/ChangeLog:

2021-04-06  Tom de Vries  <tdevries@suse.de>

PR breakpoints/25884
* gdb.opt/inline-cmds.exp: Remove kfail.

3 years agoFix a problem assembling AArch64 sources when a relocation is generated against a...
Nick Clifton [Tue, 6 Apr 2021 12:27:50 +0000 (13:27 +0100)] 
Fix a problem assembling AArch64 sources when a relocation is generated against a symbol that has a defined value.

PR 27217
* config/tc-aarch64.c (my_get_expression): Rename to
aarch64_get_expression.  Add a fifth argument to enable deferring
of expression resolution.
(parse_typed_reg): Update calls to my_get_expression.
(parse_vector_reg_list): Likewise.
(parse_immediate_expression): Likewise.
(parse_big_immediate): Likewise.
(parse_shift): Likewise.
(parse_shifter_operand_imm): Likewise.
(parse_operands): Likewise.
(parse_shifter_operand_reloc): Update calls to my_get_expression
and call aarch64_force_reloc to determine the value of the new
fifth argument.
(parse_address_main): Likewise.
(parse_half): Likewise.
(parse_adrp): Likewise.
(aarch64_force_reloc): New function.  Contains code extracted from...
(aarch64_force_relocation): ... here.
* testsuite/gas/aarch64/pr27217.s: New test case.
* testsuite/gas/aarch64/pr27217.d: New test driver.

3 years agogas: missing (re-)initialization of local variable in fixup_segment()
Jan Beulich [Tue, 6 Apr 2021 08:56:30 +0000 (10:56 +0200)] 
gas: missing (re-)initialization of local variable in fixup_segment()

At the very least this has been causing bogus diagnostics, e.g.

.text
.data
.long .bss - .
.long -.text
.bss

yielding

Error: can't resolve `0' {.bss section} - `.text' {.text section}

instead of

Error: can't resolve `0' {*ABS* section} - `.text' {.text section}

In particular for targets overriding any of TC_FORCE_RELOCATION_* & Co
or for ones setting md_register_arithmetic to true the problems may be
worse.

3 years agold: warn about PE base relocations to sections above .reloc
Jan Beulich [Tue, 6 Apr 2021 08:54:57 +0000 (10:54 +0200)] 
ld: warn about PE base relocations to sections above .reloc

Due to a bogus linker script, or perhaps because a section doesn't get
placed by a linker script while default placement puts it too high up,
sections can end up above .reloc. Since the process of determining its
contents (and hence its size) happens before final section placement,
relocations needed for such sections would no longer point at the
correct address in the final binary. Warn about this (down the road this
may want to become an error, unless size determination and content
creation for .reloc would get decoupled).

To avoid triggering the warning when .reloc gets discarded, suppress
populating the section in the first place in this case.

3 years ago[gdb/tui] Fix len_without_escapes in tui-disasm.c
Tom de Vries [Tue, 6 Apr 2021 08:40:11 +0000 (10:40 +0200)] 
[gdb/tui] Fix len_without_escapes in tui-disasm.c

On openSUSE Tumbleweed I run into:
...
FAIL: gdb.tui/basic.exp: asm window shows main
ERROR: invalid command name "_csi_L"
...

Using a minimal example, we get:
...
$ gdb -q outputs/gdb.tui/basic/basic -ex "tui enable" -ex "layout asm"
<TUI output>
src/gdb/ui-style.c:243: internal-error: bool \
  ui_file_style::parse(const char*, size_t*): Assertion `match == 0' failed.
...

The problem is in len_without_escapes, where we detect the start of an escape
sequence, but then pass ptr to style.parse while ptr no longer points to the
escape due to the ptr++ in the while condition:
...
  while ((c = *ptr++) != '\0')
     {
      if (c == '\033')
        {
          ui_file_style style;
          size_t n_read;
          if (style.parse (ptr, &n_read))
...

Fix this by removing the ++ in the while condition, and adding ptr++ in the
loop body where appropriate.

Tested on x86_64-linux.

gdb/ChangeLog:

2021-04-06  Tom de Vries  <tdevries@suse.de>

PR tui/27680
* tui/tui-disasm.c (len_without_escapes): Pass ptr pointing at escape
to style.parse.

3 years ago[gdb/testsuite] Fix xfail handling in gdb.threads/gcore-thread.exp
Tom de Vries [Tue, 6 Apr 2021 08:40:11 +0000 (10:40 +0200)] 
[gdb/testsuite] Fix xfail handling in gdb.threads/gcore-thread.exp

When running test-case gdb.threads/gcore-thread.exp on openSUSE Tumbleweed,
I run into these XFAILs:
...
XFAIL: gdb.threads/gcore-thread.exp: clear __stack_user.next
XFAIL: gdb.threads/gcore-thread.exp: clear stack_used.next
...

Apart from the xfail, the test-case also sets core0file to "":
...
        -re "No symbol \"${symbol}\" in current context\\.\r\n$gdb_prompt $" {
            xfail $test
            # Do not do the verification.
            set core0file ""
        }
...

After which we run into this FAIL, because gdb_core_cmd fails to load a
core file called "":
...
(gdb) core ^M
No core file now.^M
(gdb) FAIL: gdb.threads/gcore-thread.exp: core0file: \
  re-load generated corefile
...

Fix this FAIL by skipping gdb_core_cmd if the core file is "".

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-04-06  Tom de Vries  <tdevries@suse.de>

PR testsuite/27691
* gdb.threads/gcore-thread.exp: Don't call gdb_core_cmd with core
file "".

3 years agoAutomatic date update in version.in
GDB Administrator [Tue, 6 Apr 2021 00:00:15 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agoAdjust location of readline in sim/erc32
Tom Tromey [Mon, 5 Apr 2021 12:53:35 +0000 (06:53 -0600)] 
Adjust location of readline in sim/erc32

sim/erc32 uses an obsolete path to the in-tree build of readline.
readline was moved into a subdirectory some time ago.  This patch
fixes the problem.  Tested by rebuilding.

sim/erc32/ChangeLog
2021-04-05  Tom Tromey  <tromey@adacore.com>

* configure: Rebuild.
* configure.ac (READLINE): Adjust in-tree value.

3 years agoC99 ld configury
Alan Modra [Mon, 5 Apr 2021 06:01:53 +0000 (15:31 +0930)] 
C99 ld configury

* configure.ac: Move initfini-array arg handling earlier.  Don't
check for string.h, strings.h, stdlib.h, or locale.h.  Do check
for inttypes.h, stdint.h, sys/types.h.  Don't check for
setlocale, free, getev or strstr.
(AC_ISC_POSIX): Don't invoke.
* sysdep.h: Include string.h and stdlib.h unconditionally.  Test
HAVE_SYS_TYPE_H and HAVE_SYS_STAT_H.  Remove strstr, free and
getenv fallback declarations.
* ld.h: Don't test HAVE_LOCALE_H.
* ldmain.c: Don't test HAVE_SETLOCALE.
* config.in: Regenerate.
* configure: Regenerate.

3 years agoC99 gas configury
Alan Modra [Mon, 5 Apr 2021 06:01:25 +0000 (15:31 +0930)] 
C99 gas configury

Also remove alloca stuff since we don't use alloca in gas nowadays.

* configure.ac: Don't check for string.h, strings.h, stdlib.h,
errno.h, limits.h, locale.h or time.h.  Don't check for unlink,
remove, sbrk (unused) or setlocale.  Adjust gas_test_headers.
Don't check for errno, free, malloc, realoc, sbrk, strstr, getenv
strstr, or vsnprintf declarations.
(AC_ISC_POSIX, AC_FUNC_ALLOCA, AC_C_INLINE): Don't invoke.
* as.h: Don't include alloca-conf.h, include config.h instead.
Include string.h, stdlib.h, errno.h unconditionally.  Remove
various fallback declarations.
* asintl.h: Don't test HAVE_LOCALE_H.
* as.c: Don't test HAVE_SETLOCALE.
* dwarf2dbg.c: Include limits.h unconditionally.
* expr.c: Likewise.
* sb.c: Likewise.
* symbols.c: Likewise.
* config/tc-cr16.c: Likewise.
* config/tc-d30v.c: Likewise.
* config/tc-i386.c: Likewise.
* config/tc-ia64.c: Likewise.
* config/tc-tic54x.c (tic54x_mlib): Call remove rather than unlink.
* config.in: Regenerate.
* configure: Regenerate.
* Makefile.in: Regenerate.
* doc/Makefile.in: Regenerate.

3 years agoC99 binutils configury
Alan Modra [Mon, 5 Apr 2021 06:00:22 +0000 (15:30 +0930)] 
C99 binutils configury

* configure.ac: Assume long long is available.  Don't test for
strings.h, stdlib.h, limits.h, locale.h, or wchar.h.  Check
inttypes.h, stdint.h, sys/stat.h and sys/types.h. Don't check for
strcoll, setlocale, setmode or location of time_t.  Don't check
for fprintf, getenv, snprintf, strnlen, strstr or vsnprintf decls.
(AC_ISC_POSIX, AXC_HEADER_STRING, AC_FUNC_ALLOCA): Don't invoke.
* sysdep.h: Don't include alloca-conf.h, include config.h instead.
Test HAVE_SYS_TYPES_H and reorder includes.  Include limits.h,
locale.h, string.h and stdlib.h unconditionally.  Remove various
fallback declarations.  Assume long long is available.
* addr2line.c: Don't test HAVE_SETLOCALE.
* ar.c: Likewise.
* coffdump.c: Likewise.
* dlltool.c: Likewise.
* dllwrap.c: Likewise.
* elfedit.c: Likewise.
* nm.c: Likewise.
* objcopy.c: Likewise.
* objdump.c: Likewise.
* readelf.c: Likewise.
* size.c: Likewise.
* srconv.c: Likewise.
* strings.c: Likewise.
* sysdump.c: Likewise.
* windmc.c: Likewise.
* windres.c: Likewise.
* bucomm.c: Don't test HAVE_TIME_T_IN_TIME_H or HAVE_TIME_T_IN_TYPES_H.
* dwarf.c: Include limits.h unconditionally.  Assume long long
is available.
* nm.c: Don't test HAVE_STRCOLL.
* readelf.c: Don't test HAVE_WCHAR_H.
* strings.c: Assume long long is available.
* syslex.l: Include string.h unconditionally.
* aclocal.m4: Regenerate.
* config.in: Regenerate.
* configure: Regenerate.
* Makefile.in: Regenerate.
* doc/Makefile.in: Regenerate.

3 years agoC99 opcodes configury
Alan Modra [Mon, 5 Apr 2021 05:58:04 +0000 (15:28 +0930)] 
C99 opcodes configury

* configure.ac: Don't check for limits.h, string.h, strings.h or
stdlib.h.
(AC_ISC_POSIX): Don't invoke.
* sysdep.h: Include stdlib.h and string.h unconditionally.
* i386-opc.h: Include limits.h unconditionally.
* wasm32-dis.c: Likewise.
* cgen-opc.c: Don't include alloca-conf.h.
* config.in: Regenerate.
* configure: Regenerate.

3 years agoC99 bfd configury
Alan Modra [Mon, 5 Apr 2021 05:57:37 +0000 (15:27 +0930)] 
C99 bfd configury

Certain library headers and functions are required by C99.  This
removes configure tests for them.  The patch also removes AC_ISC_POSIX
and AC_HEADER_DIRENT, which the autoconf manual states are obsolescent.
sys/time.h is no longer tangled up with time.h so it can be handled by
the gprof configure.

* configure.ac: Don't check for long long or long double type.
Don't check for alloca.h, limits.h, stddef.h, stdlib.h, string.h,
strings.h, time.h, wchar.h, wctype.h or sys/time.h.  Don't check
for strtoull, free, malloc, realloc, getenv, strstr, snprintf,
vsnprintf, strlen or setitimer.  Sort AC_CHECK_DECLS.
(AC_ISC_POSIX): Don't invoke.
(AC_HEADER_TIME, AC_HEADER_DIRENT, ACX_HEADER_STRING): Likewise.
* sysdep.h: Remove many HAVE_*_H checks and fallback declarations.
Do test HAVE_SYS_TYPES_H.  Don't include sys/time.h.  Reorder
header order as per automake AC_INCLUDES_DEFAULT.
* bfd-in.h: Include inttypes.h unconditionally.
* bfd.c (_bfd_doprnt, _bfd_doprnt_scan): Assume long long and
long double are available.
(bfd_scan_vma): Assume long long and strtoull are available.
* elflink.c: Include limits.h unconditionally.
* elfnn-riscv.c: Likewise.
* wasm-module.c: Likewise.
* hpux-core.c: Include dirent.h unconditionally.
* trad-core.c: Likewise.
* hosts/x86-64linux.h: Include stdlib.h unconditionally.
* peXXigen.c: Remove HAVE_WCHAR_H and HAVE_WCTYPE_H checks.
* elf32-m68hc1x.c: Don't include alloca-conf.h.
* elf64-hppa.c: Likewise.
* som.c: Likewise.
* wasm-module.c: Likewise.
* xsym.c: Likewise.
* bfd-in2.h: Regenerate.
* config.in: Regenerate.
* configure: Regenerate.

3 years agoC99 gprof configury
Alan Modra [Mon, 5 Apr 2021 05:57:02 +0000 (15:27 +0930)] 
C99 gprof configury

Given C99 we don't need to check for setlocale.  The patch also
adds setitimer checks so that they can be removed from bfd where they
aren't needed.  According to the automake manual AC_ISC_POSIX is
obsolete, so that is removed.  HAVE_SETMODE isn't checked anywhere,
so it is pointless to have a configure test for setmode.

* configure.ac: Check for sys/time.h and setitimer.  Don't invoke
AC_ISC_POSIX.  Don't check for setmode.
* gprof.c: Don't test HAVE_SETLOCALE.
* gprof.h: Include sys/time.h.
* configure: Regenerate.
* gconfig.in: Regenerate.

3 years agogdb: fix internal error in avr_frame_unwind_cache
Simon Marchi [Mon, 5 Apr 2021 02:29:34 +0000 (22:29 -0400)] 
gdb: fix internal error in avr_frame_unwind_cache

When trying to do pretty much anything that requires unwinding a frame
on AVR, we get

    /home/simark/src/wt/avr/gdb/trad-frame.h:143: internal-error: LONGEST trad_frame_saved_reg::addr() const: Assertion `m_kind == trad_frame_saved_reg_kind::ADDR' failed.

This is likely coming from the trad-frame refactor in 098caef485a4
("Refactor struct trad_frame_saved_regs").  Here's an example of how to
reproduce it:

In one terminal:

    $ cat test.c
    int foo(int x)
    {
      return x * 7;
    }

    int main() {
        return foo(2);
    }
    $ avr-gcc -gdwarf-4 -mmcu=atmega2560 test.c
    $ /tmp/simavr/bin/simavr --mcu atmega2560 -g a.out
    Loaded 330 .text at address 0x0
    Loaded 0 .data

And in another one:

    $ ./gdb -q -nx --data-directory=data-directory a.out -ex "tar rem :1234" -ex "b foo" -ex c -ex bt
    Reading symbols from a.out...
    Remote debugging using :1234
    0x00000000 in __vectors ()
    Breakpoint 1 at 0x110: file test.c, line 3.
    Note: automatically using hardware breakpoints for read-only addresses.
    Continuing.

    Breakpoint 1, foo (x=2) at test.c:3
    3         return x * 7;
    #0  foo (x=2) at test.c:3
    /home/simark/src/wt/avr/gdb/trad-frame.h:143: internal-error: LONGEST trad_frame_saved_reg::addr() const: Assertion `m_kind == trad_frame_saved_reg_kind::ADDR' failed.

What the AVR code does is:

1. In avr_scan_prologue, in the block that says "First stage of the
   prologue scanning.", look for "push rX" instructions and note that rX
   is saved on the stack.  But instead of putting the actual stack
   address directly, it puts an offset (from the previous frame's sp).
2. Back in avr_frame_unwind_cache, in the block that says "Adjust all
   the saved registers", adjust all these values to be real stack
   addresses.

To check whether a register was assigned an address (and therefore if it
needs adjustment), the code does:

    if (info->saved_regs[i].addr () > 0)

Since commit 098caef485a4, it's invalid to call the `addr` getter of
trad_frame_saved_reg if the register hasn't been assigned an address.
Instead, the code could use the `is_addr` getter to verify if the
register has been assigned an address.  This is what this patch does.

gdb/ChangeLog:

* avr-tdep.c (avr_frame_unwind_cache): Use
trad_frame_saved_reg::is_addr.

Change-Id: I5803089160b829400178746c5e3bca0c1cd11c00

3 years agoAutomatic date update in version.in
GDB Administrator [Mon, 5 Apr 2021 00:00:15 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agosim: mips: Add handlers to simulator monitor for unlink, lseek and stat
Faraz Shahbazker [Sun, 4 Apr 2021 06:12:43 +0000 (11:42 +0530)] 
sim: mips: Add handlers to simulator monitor for unlink, lseek and stat

sim/mips/ChangeLog
* interp.c (sim_monitor): Add switch entries for unlink (13),
lseek (14), and stat (15).

Derived from patch authored by Steve Ellcey <sellcey@mips.com>

3 years agoAutomatic date update in version.in
GDB Administrator [Sun, 4 Apr 2021 00:00:14 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agosim: example-synacor: a simple implementation for reference
Mike Frysinger [Thu, 10 Dec 2020 03:26:30 +0000 (22:26 -0500)] 
sim: example-synacor: a simple implementation for reference

Provide a simple example simulator for people porting to new targets
to use as a reference.  This one has the advantage of being used by
people and having a fun program available for it.

It doesn't require a special target -- the example simulators can be
built for any existing port.

3 years agosim: testsuite: integrate common tests into build
Mike Frysinger [Sun, 14 Mar 2021 01:54:49 +0000 (20:54 -0500)] 
sim: testsuite: integrate common tests into build

Now that we have the common automake build with support for build-time
programs working, we can integrate the common tests into the default
`make check` flow.

3 years agosim: add preliminary support for --enable-targets
Mike Frysinger [Sat, 16 Jan 2021 07:27:38 +0000 (02:27 -0500)] 
sim: add preliminary support for --enable-targets

This doesn't actually create one `run` program like other projects,
but creates multiple `run-$arch` targets.  While it might not seem
that useful initially, this has some nice properties:
- Allows us to quickly build all sim targets in a single tree.
- Positions us better for converting targets over to a proper
  multitarget build+install.

We don't have the ability to actually run tests against them, but
that's due to a limitation in gas: it doesn't support multitarget.
If that ever changes, we should be able to turn on our tests too.
We can improve the test framework to fallback to a system toolchain
if available to help mitigate that.

3 years agosim: igen: merge build into top level
Mike Frysinger [Mon, 22 Feb 2021 04:35:46 +0000 (23:35 -0500)] 
sim: igen: merge build into top level

This simplifies the build a bit (especially for deps in port subdirs),
and avoids recursive make.  This in turn speeds up the build, and sets
us up for multi-target.

3 years agosim: unify toolchain settings
Mike Frysinger [Sun, 17 Jan 2021 19:45:25 +0000 (14:45 -0500)] 
sim: unify toolchain settings

The toplevel, common, and igen dirs all have their own code for
setting up toolchain settings.  Unify all of that in a new macro.

3 years agoAutomatic date update in version.in
GDB Administrator [Sat, 3 Apr 2021 00:00:14 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agogdb: remove objfile parameter from get_objfile_bfd_data
Simon Marchi [Fri, 2 Apr 2021 15:50:45 +0000 (11:50 -0400)] 
gdb: remove objfile parameter from get_objfile_bfd_data

I noticed it was unused.  I think that makes sense, as it shows that
objfile_per_bfd_storage is not specific to one objfile (it can be shared
by multiple objfiles that have the same bfd).

There is one thing I wonder though, maybe I'm missing something.  If
the BFD doesn't require relocation, get_objfile_bfd_data stores the
newly allocated object in objfiles_bfd_data, so we can assume that
objfiles_bfd_data is the owner of the object.  When the bfd's refcount
drops to 0, the corresponding objfile_per_bfd_storage object in
objfiles_bfd_data is deleted.

But if the BFD requires relocation, get_objfile_bfd_data returns a newly
allocated object that isn't kept anywhere else (and isn't shared).  So
the objfile becomes the owner of the objfile_per_bfd_storage object.  In
objfile::~objfile, we have this:

    if (obfd)
      gdb_bfd_unref (obfd);
    else
      delete per_bfd;

I'm thinking that obfd could be non-nullptr, and it could require
relocation.  In that case, it would never be freed.  Anyway, that's not
really connected to this patch.

gdb/ChangeLog:

* objfiles.c (get_objfile_bfd_data): Remove objfile parameter,
adjust callers.

Change-Id: Ifa3158074ea6b42686780ba09d0c964b0cf14cf1

3 years agogdb: pass objfile_per_bfd_storage instead of objfile to partial_symtab
Simon Marchi [Fri, 2 Apr 2021 15:45:25 +0000 (11:45 -0400)] 
gdb: pass objfile_per_bfd_storage instead of objfile to partial_symtab

Since partial_symtab is supposed to be objfile-independent (since series
[1]), I think it would make sense for partial_symtab to not take an
objfile as a parameter in its constructor.

This patch replaces that parameter with an objfile_per_bfd_storage
parameter.

The objfile is used for two things:

 - to get the objfile_name, for debug messages.  We can get that name
   from the bfd instead.
 - to intern the partial symtab filename.  Even though it goes through
   an objfile method, the request is actually forwarded to the
   underlying objfile_per_bfd_storage.  So we can ask the new
   objfile_per_bfd_storage instead.

In order to get a reference to the BFD from the objfile_per_bfd_storage,
the BFD is saved in the objfile_per_bfd_storage object.

[1] https://sourceware.org/pipermail/gdb-patches/2021-February/176625.html

gdb/ChangeLog:

* psympriv.h (struct partial_symtab) <partial_symtab>: Change
objfile parameter for objfile_per_bfd_storage, adjust callers.
(struct standard_psymtab) <standard_psymtab>: Likewise.
(struct legacy_psymtab) <legacy_psymtab>: Likewise.
* psymtab.c (partial_symtab::partial_symtab): Likewise.
* ctfread.c (struct ctf_psymtab): Likewise.
* dwarf2/read.h (struct dwarf2_psymtab): Likewise.
* dwarf2/read.c (struct dwarf2_include_psymtab): Likewise.
(dwarf2_create_include_psymtab): Likewise.
* objfiles.h (struct objfile_per_bfd_storage)
<objfile_per_bfd_storage>: Add bfd parameter, adjust callers.
<get_bfd>: New method.
<m_bfd>: New field.
* objfiles.c (get_objfile_bfd_data): Adjust.

Change-Id: I2ed3ab5d2e6f27d034bd4dc26ae2fae7b0b8a2b9

3 years agogdb: use std::string in partial_symtab::partial_symtab / allocate_symtab
Simon Marchi [Fri, 2 Apr 2021 15:39:55 +0000 (11:39 -0400)] 
gdb: use std::string in partial_symtab::partial_symtab / allocate_symtab

This simplifies the code a bit.

gdb/ChangeLog:

* psymtab.c (partial_symtab::partial_symtab): Change
last_objfile_name to be an std::string.
* symfile.c (allocate_symtab): Likewise.

Change-Id: I3dfe217233ed9346c2abc04a9b1be0df69a90af8

3 years agogdb: add intern methods to objfile_per_bfd_storage
Simon Marchi [Fri, 2 Apr 2021 15:23:52 +0000 (11:23 -0400)] 
gdb: add intern methods to objfile_per_bfd_storage

This allows keeping the objfile_per_bfd_storage implementation details
into objfile_per_bfd_storage, instead of into objfile.  And this makes
the intern methods usable for code that only has an
objfile_per_bfd_storage to work with.

gdb/ChangeLog:

* objfiles.h (struct objfile_per_bfd_storage) <intern>: New
methods.
(struct objfile) <intern>: Use
objfile::objfile_per_bfd_storage::intern.

Change-Id: Ifd54026c5efaeffafac9b84ff84c199acc7ce78a

3 years agogdb: remove TYPE_FLAG_ENUM
Simon Marchi [Fri, 2 Apr 2021 01:10:09 +0000 (21:10 -0400)] 
gdb: remove TYPE_FLAG_ENUM

gdb/ChangeLog:

* gdbtypes.h (TYPE_FLAG_ENUM): Remove, replace all uses
with type::is_flag_enum.

Change-Id: I74e23893066eecd6df641045b859a6d6ebb13dd0

3 years agogdb: add type::is_flag_enum / type::set_is_flag_enum
Simon Marchi [Fri, 2 Apr 2021 01:10:09 +0000 (21:10 -0400)] 
gdb: add type::is_flag_enum / type::set_is_flag_enum

Add the `is_flag_enum` and `set_is_flag_enum` methods on `struct type`,
in order to remove the `TYPE_FLAG_ENUM` macro.  In this patch, the macro
is changed to use the getter, so all the call sites of the macro that
are used as a setter are changed to use the setter method directly.  The
next patch will remove the macro completely.

gdb/ChangeLog:

* gdbtypes.h (struct type) <is_flag_enum,
set_is_flag_enum>: New methods.
(TYPE_FLAG_ENUM): Use type::is_flag_enum, change all
write call sites to use type::set_is_flag_enum.

Change-Id: I9c56c91626c8d784947ba94fcb97818526b81d1c

3 years agogdb: remove TYPE_DECLARED_CLASS
Simon Marchi [Fri, 2 Apr 2021 01:10:09 +0000 (21:10 -0400)] 
gdb: remove TYPE_DECLARED_CLASS

gdb/ChangeLog:

* gdbtypes.h (TYPE_DECLARED_CLASS): Remove, replace all uses
with type::is_declared_class.

Change-Id: Ifecb2342417ecd7bf570c3205344b09d706daab2

3 years agogdb: add type::is_declared_class / type::set_is_declared_class
Simon Marchi [Fri, 2 Apr 2021 01:10:08 +0000 (21:10 -0400)] 
gdb: add type::is_declared_class / type::set_is_declared_class

Add the `is_declared_class` and `set_is_declared_class` methods on
`struct type`, in order to remove the `TYPE_DECLARED_CLASS` macro.  In
this patch, the macro is changed to use the getter, so all the call
sites of the macro that are used as a setter are changed to use the
setter method directly.  The next patch will remove the macro
completely.

gdb/ChangeLog:

* gdbtypes.h (struct type) <is_declared_class,
set_is_declared_class>: New methods.
(TYPE_DECLARED_CLASS): Use type::is_declared_class, change all
write call sites to use type::set_is_declared_class.

Change-Id: Idf08d32e137c885a0aba0a18f556a899c1cbfd68

3 years agoAutomatic date update in version.in
GDB Administrator [Fri, 2 Apr 2021 00:00:15 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agoFix obvious typo in gdb/testsuite/lib/pdtrace.in
Egeyar Bagcioglu [Thu, 1 Apr 2021 20:46:56 +0000 (22:46 +0200)] 
Fix obvious typo in gdb/testsuite/lib/pdtrace.in

3 years agoUse importlib instead of imp module on python 3.4+
Boris Staletic [Thu, 1 Apr 2021 18:09:27 +0000 (12:09 -0600)] 
Use importlib instead of imp module on python 3.4+

Python 3.4 has deprecated the imp module in favour of importlib. This
patch avoids the DeprecationWarning. This warning is visible to users
whose libpython.so has been compiled with --with-pydebug.

Considering that even python 3.5 has reached end of life, would it be
better to just use importlib and drop support for python 3.0 to 3.3?

2021-02-28  Boris Staletic  <boris.staletic@gmail.com>

* gdb/python/lib/gdb/__init__.py: Use importlib on python 3.4+
to avoid deprecation warnings.

3 years agoPE/Windows x86_64: Fix weak undef symbols after image base change
Tamar Christina [Thu, 1 Apr 2021 16:10:38 +0000 (17:10 +0100)] 
PE/Windows x86_64: Fix weak undef symbols after image base change

The change in PR19011 changed the image load address from being in the lower
32-bit address space to the higher 64-bit address space.

However when you have a weak undef symbol which stays undef at the end of
linking the linker has to resolve this (Windows loader does not support undef
symbols).  As such typically these would resolve to 0.

The relocation used for these weak symbols are the normal 32-bit PC_REL call
relocs.  So when doing the overflow check LD checks if the distance between the
symbol and the call is within range.  However now that the load address is
> 32-bits and the symbol val is 0 this overflow check will always fail.

As such the linker gives a bogus error.  This patch makes the linker not emit
the overflow failure but chooses to still let the check be performed (as it's
mid-end code).

One down side of this is that it does break the common convention that the call
be to sym at 0x0. i.e. before you'd get

      401015:   74 05                   je     40101c
      401017:   e8 e4 ef bf ff          callq  0

and now you get

   140001015:   74 05                   je     14000101c
   140001017:   e8 e4 ef ff bf          call   100000000

since the call is PC_REL there's no way to get the range large enough to
resolve to 0.  As such I have chosen to leave it as the furthest simple range
that we can still represent.

By only ignoring the error we leave the symbol value itself to still be 0
such that the if(<symbol>) checks still work correctly.

bfd/ChangeLog:

2021-04-01  Tamar Christina  <tamar.christina@arm.com>

PR ld/26659
* cofflink.c (_bfd_coff_generic_relocate_section): Ignore overflow.

ld/ChangeLog:

2021-04-01  Tamar Christina  <tamar.christina@arm.com>

PR ld/26659
* testsuite/ld-pe/pe.exp: Add test.
* testsuite/ld-pe/pr26659-weak-undef-sym.d: New test.
* testsuite/ld-pe/pr26659-weak-undef-sym.s: New test.

3 years agoFix microblaze sim build error
Martin Liska [Thu, 1 Apr 2021 05:17:14 +0000 (07:17 +0200)] 
Fix microblaze sim build error

I see the following error for --target=microblaze-elf:

../../../sim/microblaze/interp.c: In function 'sim_engine_run':
../../../sim/microblaze/interp.c:147:39: error: passing argument 2 of 'get_insn_microblaze' from incompatible pointer type [-Werror=incompatible-pointer-types]
  147 |       op = get_insn_microblaze (inst, &imm_unsigned, &insn_type,
      |                                       ^~~~~~~~~~~~~
      |                                       |
      |                                       int *
In file included from ../../bfd/bfd.h:45,
                 from ../../../sim/microblaze/interp.c:24:
../../../sim/microblaze/../../opcodes/microblaze-dis.h:34:57: note: expected '_Bool *' but argument is of type 'int *'
   34 | extern enum microblaze_instr get_insn_microblaze (long, bool *,
      |                                                         ^

sim/microblaze/ChangeLog:

* interp.c (sim_engine_run): Use bool instead of int.

3 years agoRemove strneq macro and use startswith.
Martin Liska [Mon, 22 Mar 2021 13:56:16 +0000 (14:56 +0100)] 
Remove strneq macro and use startswith.

bfd/ChangeLog:

* ecoff.c (strneq): Remove strneq and use startswith.
(_bfd_ecoff_slurp_armap): Likewise.

binutils/ChangeLog:

* elfcomm.h (strneq): Remove strneq and use startswith.
* readelf.c (ia64_process_unwind): Likewise.
(process_note): Likewise.

gas/ChangeLog:

* config/obj-coff.c (strneq): Remove strneq and use startswith.
(weak_is_altname): Likewise.
(obj_coff_section): Likewise.
* config/tc-cr16.c (process_label_constant): Likewise.
* config/tc-crx.c (strneq): Likewise.

include/ChangeLog:

* opcode/cr16.h (strneq): Remove strneq and use startswith.

ld/ChangeLog:

* ldbuildid.c (strneq): Remove strneq and use startswith.
(validate_build_id_style): Likewise.
(compute_build_id_size): Likewise.

opcodes/ChangeLog:

* arm-dis.c (strneq): Remove strneq and use startswith.
* cr16-dis.c (print_insn_cr16): Likewise.
* score-dis.c (streq): Likewise.
(strneq): Likewise.
* score7-dis.c (strneq): Likewise.

3 years agoUse startswith in gas subfolder.
Martin Liska [Mon, 22 Mar 2021 12:33:04 +0000 (13:33 +0100)] 
Use startswith in gas subfolder.

gas/ChangeLog:

* as.c (select_emulation_mode): Use startswith.
* config/m68k-parse.y: Likewise.
* config/obj-aout.c (obj_aout_type): Likewise.
* config/obj-elf.c (elf_common_parse): Likewise.
(obj_elf_section_type): Likewise.
(obj_elf_section_word): Likewise.
(obj_elf_section): Likewise.
(obj_elf_symver): Likewise.
(adjust_stab_sections): Likewise.
* config/obj-evax.c (evax_shorten_name): Likewise.
* config/obj-macho.c (obj_mach_o_is_frame_section): Likewise.
* config/tc-aarch64.c (parse_aarch64_imm_float): Likewise.
(aarch64_parse_features): Likewise.
(create_register_alias): Likewise.
(aarch64_data_in_code): Likewise.
(md_parse_option): Likewise.
* config/tc-alpha.c (s_alpha_section_word): Likewise.
(s_alpha_pdesc): Likewise.
* config/tc-arc.c (tokenize_extregister): Likewise.
* config/tc-arm.c (create_register_alias): Likewise.
(create_neon_reg_alias): Likewise.
(parse_ifimm_zero): Likewise.
(parse_qfloat_immediate): Likewise.
(arm_elf_section_type): Likewise.
(arm_parse_extension): Likewise.
(aeabi_set_public_attributes): Likewise.
(s_arm_arch_extension): Likewise.
(arm_data_in_code): Likewise.
(start_unwind_section): Likewise.
* config/tc-avr.c (avr_ldi_expression): Likewise.
* config/tc-csky.c (is_freglist_legal): Likewise.
(csky_s_section): Likewise.
* config/tc-d30v.c (do_assemble): Likewise.
* config/tc-dlx.c (parse_operand): Likewise.
* config/tc-epiphany.c (md_assemble): Likewise.
* config/tc-h8300.c (h8300_elf_section): Likewise.
(get_operand): Likewise.
* config/tc-hppa.c (pa_ip): Likewise.
(pa_level): Likewise.
(pa_space): Likewise.
* config/tc-i386.c (i386_mach): Likewise.
(md_assemble): Likewise.
(check_VecOperations): Likewise.
(i386_target_format): Likewise.
(i386_elf_section_type): Likewise.
* config/tc-ia64.c (start_unwind_section): Likewise.
(md_parse_option): Likewise.
(is_taken_branch): Likewise.
(idesc->name,): Likewise.
(note_register_values): Likewise.
(do_alias): Likewise.
* config/tc-m32c.c (insn_to_subtype): Likewise.
* config/tc-m68hc11.c (get_operand): Likewise.
(md_assemble): Likewise.
* config/tc-m68k.c (m68k_ip): Likewise.
(m68k_elf_suffix): Likewise.
* config/tc-mcore.c (mcore_s_section): Likewise.
* config/tc-metag.c (parse_get_set): Likewise.
(md_parse_option): Likewise.
* config/tc-microblaze.c (parse_imm): Likewise.
(check_got): Likewise.
(md_apply_fix): Likewise.
* config/tc-mips.c (CPU_HAS_MIPS16): Likewise.
(md_begin): Likewise.
(s_is_linkonce): Likewise.
(check_regno): Likewise.
(match_float_constant): Likewise.
(classify_vr4120_insn): Likewise.
(match_insn): Likewise.
(mips_after_parse_args): Likewise.
(s_change_sec): Likewise.
(s_option): Likewise.
(parse_code_option): Likewise.
(md_section_align): Likewise.
(nopic_need_relax): Likewise.
* config/tc-mmix.c (mmix_handle_mmixal): Likewise.
* config/tc-mn10300.c (mn10300_fix_adjustable): Likewise.
(mn10300_end_of_match): Likewise.
* config/tc-msp430.c (msp430_make_init_symbols): Likewise.
* config/tc-nds32.c (nds32_parse_option): Likewise.
* config/tc-nds32.h (md_do_align): Likewise.
* config/tc-nios2.c (strprefix): Likewise.
(nios2_special_relocation_p): Likewise.
(nios2_parse_base_register): Likewise.
(nios2_cons): Likewise.
* config/tc-ns32k.c (addr_mode): Likewise.
* config/tc-pdp11.c (set_option): Likewise.
(parse_reg): Likewise.
(parse_ac5): Likewise.
(parse_op_no_deferred): Likewise.
(set_cpu_model): Likewise.
(set_machine_model): Likewise.
* config/tc-pj.c (md_operand): Likewise.
* config/tc-ppc.c (ppc_set_cpu): Likewise.
(ppc_arch): Likewise.
(ppc_section_type): Likewise.
* config/tc-s12z.c (tb_reg_rel): Likewise.
(tb_opr_rel): Likewise.
* config/tc-s390.c (s390_parse_cpu): Likewise.
(md_parse_option): Likewise.
* config/tc-score.c (s3_nopic_need_relax): Likewise.
(s3_pic_need_relax): Likewise.
* config/tc-score7.c (s7_nopic_need_relax): Likewise.
(s7_pic_need_relax): Likewise.
* config/tc-sh.h (SUB_SEGMENT_ALIGN): Likewise.
* config/tc-sparc.c (md_parse_option): Likewise.
(sparc_ip): Likewise.
(s_reserve): Likewise.
(s_common): Likewise.
(s_seg): Likewise.
(sparc_cons): Likewise.
* config/tc-tic54x.c (stag_add_field): Likewise.
(tic54x_endstruct): Likewise.
* config/tc-tic6x.c (tic6x_start_unwind_section): Likewise.
* config/tc-v850.c (v850_comm): Likewise.
(md_begin): Likewise.
(md_assemble): Likewise.
* config/tc-vax.c (vax_cons): Likewise.
* config/tc-wasm32.c (wasm32_leb128): Likewise.
* config/tc-xstormy16.c (md_operand): Likewise.
* config/tc-xtensa.c (get_directive): Likewise.
(xg_instruction_matches_option_term): Likewise.
(is_unaligned_label): Likewise.
(cache_literal_section): Likewise.
* config/xtensa-relax.c (parse_precond): Likewise.
(parse_option_cond): Likewise.
(transition_applies): Likewise.
(wide_branch_opcode): Likewise.
* dw2gencfi.c: Likewise.
* dwarf2dbg.c (dwarf2_directive_filename): Likewise.
* ehopt.c (get_cie_info): Likewise.
* input-file.c (input_file_open): Likewise.
* listing.c (listing_newline): Likewise.
(debugging_pseudo): Likewise.
* read.c (read_a_source_file): Likewise.
* write.c (adjust_reloc_syms): Likewise.
(compress_debug): Likewise.
(maybe_generate_build_notes): Likewise.

3 years agoUse startswith more for strncmp function calls.
Martin Liska [Thu, 18 Mar 2021 14:16:54 +0000 (15:16 +0100)] 
Use startswith more for strncmp function calls.

bfd/ChangeLog:

* elf-bfd.h (bfd_section_is_ctf): Use startswith function.
* elf.c (_bfd_elf_make_section_from_shdr): Likewise.
(elf_get_reloc_section): Likewise.
* elf32-arc.c (elf_arc_size_dynamic_sections): Likewise.
* elf32-m32r.c (m32r_elf_section_flags): Likewise.
* elf32-microblaze.c (microblaze_elf_size_dynamic_sections): Likewise.
* elf32-nds32.c (nds32_elf_size_dynamic_sections): Likewise.
(nds32_elf_relocate_section): Likewise.
(nds32_elf_action_discarded): Likewise.
(nds32_elf_check_relocs): Likewise.
(nds32_elf_section_flags): Likewise.
* elf32-or1k.c (or1k_elf_check_relocs): Likewise.
* elf32-ppc.c (ppc_elf_section_from_shdr): Likewise.
* elf32-rx.c (rx_table_find): Likewise.
(rx_table_map): Likewise.
* elf32-spu.c (spu_elf_backend_symbol_processing): Likewise.
(spu_elf_find_overlays): Likewise.
(needs_ovl_stub): Likewise.
(allocate_spuear_stubs): Likewise.
(build_spuear_stubs): Likewise.
(mark_overlay_section): Likewise.
(spu_elf_auto_overlay): Likewise.
(spu_elf_output_symbol_hook): Likewise.
* elf32-tilepro.c (tilepro_elf_size_dynamic_sections): Likewise.
* elf32-xtensa.c (xtensa_property_section_name): Likewise.
* elf64-ppc.c (ppc64_elf_section_flags): Likewise.
(ppc64_elf_relocate_section): Likewise.
* elflink.c (resolve_section): Likewise.
(UNARY_OP): Likewise.
(BINARY_OP_HEAD): Likewise.
(elf_link_input_bfd): Likewise.
* elfnn-riscv.c (riscv_elf_size_dynamic_sections): Likewise.
* elfxx-riscv.c (riscv_parse_subset): Likewise.
* elfxx-tilegx.c (tilegx_elf_size_dynamic_sections): Likewise.
* opncls.c (get_build_id): Likewise.

binutils/ChangeLog:

* dllwrap.c: Use startswith function.
* objcopy.c (is_dwo_section): Likewise.
(handle_remove_section_option): Likewise.
(copy_main): Likewise.
* objdump.c (is_significant_symbol_name): Likewise.

3 years agoReplace const_strneq with startswith.
Martin Liska [Mon, 22 Mar 2021 11:12:36 +0000 (12:12 +0100)] 
Replace const_strneq with startswith.

binutils/ChangeLog:

* dwarf.c (display_debug_lines_raw): Replace const_strneq with
startswith.
(display_debug_lines_decoded): Likewise.
(display_debug_links): Likewise.
* elfcomm.c (setup_archive): Likewise.
* elfcomm.h (const_strneq): Likewise.
* readelf.c (process_section_headers): Likewise.
(slurp_ia64_unwind_table): Likewise.
(slurp_hppa_unwind_table): Likewise.
(decode_arm_unwind): Likewise.
(display_debug_section): Likewise.
(process_note): Likewise.

3 years ago[gdb/testsuite] Fix unset of DEBUGINFOD_URLS in default_gdb_init
Tom de Vries [Thu, 1 Apr 2021 06:24:13 +0000 (08:24 +0200)] 
[gdb/testsuite] Fix unset of DEBUGINFOD_URLS in default_gdb_init

In commit cfcbd506fb0 "[gdb/testsuite] Ignore DEBUGINFOD_URLS" I added
unsetting of env(DEBUGINFOD_URLS), but it doesn't work because I forgot to
add :: in front.

Fix this, and rewrite using "unset -nocomplain" instead of unsetenv, which
allows us to drop the "info exists" test.

2021-04-01  Tom de Vries  <tdevries@suse.de>

* lib/gdb.exp (default_gdb_init): Use ::env.  Use unset
-nocomplain ::env(V) instead of unsetenv V.

3 years agoUse startswith in gdb subfolder.
Martin Liska [Tue, 23 Mar 2021 09:02:04 +0000 (10:02 +0100)] 
Use startswith in gdb subfolder.

gdb/ChangeLog:

* cp-name-parser.y: Use startswith instead of strncmp.
* m2-exp.y: Likewise.
* macroexp.c (substitute_args): Likewise.
* mi/mi-main.c (command_notifies_uscc_observer): Likewise.
* rust-exp.y: Likewise.

3 years agoRemove two trivial functions from dwarf2/read.c
Tom Tromey [Thu, 1 Apr 2021 00:28:28 +0000 (18:28 -0600)] 
Remove two trivial functions from dwarf2/read.c

This removes dw2_map_matching_symbols and dw2_expand_symtabs_matching,
merging them with their sole trivial callers.

gdb/ChangeLog
2021-03-31  Tom Tromey  <tom@tromey.com>

* dwarf2/read.c (dwarf2_gdb_index::map_matching_symbols): Merge
with dw2_map_matching_symbols.
(dwarf2_gdb_index::expand_symtabs_matching): Merge with
dw2_expand_symtabs_matching.

3 years agoAutomatic date update in version.in
GDB Administrator [Thu, 1 Apr 2021 00:00:08 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agoPR27675, PowerPC missing extended mnemonic mfummcr2
Alan Modra [Wed, 31 Mar 2021 22:41:25 +0000 (09:11 +1030)] 
PR27675, PowerPC missing extended mnemonic mfummcr2

PR 27675
* ppc-opc.c (powerpc_opcodes): Add mfummcr2 and mfmmcr2.

3 years agoFix typo in dwarf2/stringify.h
Tom Tromey [Wed, 31 Mar 2021 15:48:56 +0000 (09:48 -0600)] 
Fix typo in dwarf2/stringify.h

Pedro pointed out a typo in a comment in dwarf2/stringify.h.  This
fixes it.

gdb/ChangeLog
2021-03-31  Tom Tromey  <tromey@adacore.com>

* dwarf2/stringify.h: Fix typo.

3 years agoAdd some error checking to DWARF assembler
Tom Tromey [Wed, 31 Mar 2021 15:17:23 +0000 (09:17 -0600)] 
Add some error checking to DWARF assembler

I had written a DWARF location expression like

    DW_OP_const1u
    DW_OP_stack_value

... and was surprised to see that the DW_OP_stack_value didn't appear
in the "readelf" output.

The problem here is that DW_OP_const1u requires an operand, but
neither the DWARF assembler nor gas diagnosed this problem.

This patch adds some checking to Dwarf::_location to try to avoid this
in the future.  The checking is done via a helper proc that also
dissects the argument list and sets an array in the caller's frame.

gdb/testsuite/ChangeLog
2021-03-31  Tom Tromey  <tromey@adacore.com>

* lib/dwarf.exp (Dwarf::_get_args): New proc.
(Dwarf::_location): Use it.

3 years ago[gdb/testsuite] Ignore DEBUGINFOD_URLS
Tom de Vries [Wed, 31 Mar 2021 13:17:19 +0000 (15:17 +0200)] 
[gdb/testsuite] Ignore DEBUGINFOD_URLS

On openSUSE Tumbleweed, DEBUGINFOD_URLS is now defined by default:
...
$ echo $DEBUGINFOD_URLS
https://debuginfod.opensuse.org/
...

With DEBUGINFOD_URLS defined we run into:
...
FAIL: gdb.mi/mi-sym-info.exp: List all functions from debug information only \
  (timeout)
...
as reported in PR27667.

There's a latency of ~0.5s per request, which is ok-ish for interactive usage.
But the symbol-info-functions command ends up issuing 21 source requests,
which means we easily run into the 10s timeout.

Fix this by unsetting DEBUGINFOD_URLS in default_gdb_init.

gdb/testsuite/ChangeLog:

2021-03-31  Tom de Vries  <tdevries@suse.de>

PR testsuite/27667
* lib/gdb.exp (default_gdb_init): Unset DEBUGINFOD_URLS.

3 years agoDon't include bfd/sysdep.h for gas files
Alan Modra [Wed, 31 Mar 2021 07:45:46 +0000 (18:15 +1030)] 
Don't include bfd/sysdep.h for gas files

* itbl-lex-wrapper.c: Include as.h not sysdep.h.
* config/bfin-lex-wrapper.c: Likewise.
* itbl-lex.l: Don't include as.h.
* config/bfin-lex.l: Likewise.

3 years agoPR27671, Poisoning TRUE / FALSE poisons Win32 system headers
Alan Modra [Wed, 31 Mar 2021 12:29:25 +0000 (22:59 +1030)] 
PR27671, Poisoning TRUE / FALSE poisons Win32 system headers

PR 27671
* bfd-in.h: Don't poison FALSE or TRUE.
* bfd-in2.h: Regenerate.

3 years agoUse bool in gas
Alan Modra [Wed, 31 Mar 2021 00:12:05 +0000 (10:42 +1030)] 
Use bool in gas

* as.h (POISON_BFD_BOOLEAN): Define.
* as.c, * as.h, * atof-generic.c, * config/atof-ieee.c,
* config/bfin-aux.h, * config/obj-coff.c, * config/obj-ecoff.c,
* config/obj-elf.c, * config/obj-elf.h, * config/obj-som.c,
* config/tc-aarch64.c, * config/tc-alpha.c, * config/tc-arc.c,
* config/tc-arc.h, * config/tc-arm.c, * config/tc-arm.h,
* config/tc-avr.c, * config/tc-avr.h, * config/tc-bfin.c,
* config/tc-bfin.h, * config/tc-bpf.c, * config/tc-cris.c,
* config/tc-csky.c, * config/tc-csky.h, * config/tc-d10v.c,
* config/tc-d10v.h, * config/tc-d30v.c, * config/tc-d30v.h,
* config/tc-dlx.c, * config/tc-dlx.h, * config/tc-epiphany.c,
* config/tc-epiphany.h, * config/tc-fr30.c, * config/tc-fr30.h,
* config/tc-frv.c, * config/tc-frv.h, * config/tc-ft32.c,
* config/tc-ft32.h, * config/tc-h8300.c, * config/tc-hppa.c,
* config/tc-i386-intel.c, * config/tc-i386.c, * config/tc-ia64.c,
* config/tc-ip2k.c, * config/tc-iq2000.c, * config/tc-iq2000.h,
* config/tc-lm32.c, * config/tc-lm32.h, * config/tc-m32c.c,
* config/tc-m32c.h, * config/tc-m32r.c, * config/tc-m32r.h,
* config/tc-m68hc11.c, * config/tc-m68k.c, * config/tc-mcore.c,
* config/tc-mcore.h, * config/tc-mep.c, * config/tc-mep.h,
* config/tc-metag.c, * config/tc-metag.h,
* config/tc-microblaze.c, * config/tc-mips.c, * config/tc-mips.h,
* config/tc-mmix.c, * config/tc-mn10200.c, * config/tc-mn10300.c,
* config/tc-mn10300.h, * config/tc-moxie.c, * config/tc-msp430.c,
* config/tc-msp430.h, * config/tc-mt.c, * config/tc-mt.h,
* config/tc-nds32.c, * config/tc-nds32.h, * config/tc-nios2.c,
* config/tc-ns32k.c, * config/tc-or1k.c, * config/tc-or1k.h,
* config/tc-pdp11.c, * config/tc-ppc.c, * config/tc-pru.c,
* config/tc-pru.h, * config/tc-riscv.c, * config/tc-riscv.h,
* config/tc-rx.c, * config/tc-rx.h, * config/tc-s12z.c,
* config/tc-s12z.h, * config/tc-s390.c, * config/tc-score.c,
* config/tc-score.h, * config/tc-score7.c, * config/tc-sh.c,
* config/tc-sh.h, * config/tc-spu.c, * config/tc-tic54x.c,
* config/tc-tic6x.c, * config/tc-tic6x.h, * config/tc-tilegx.c,
* config/tc-tilepro.c, * config/tc-v850.c, * config/tc-v850.h,
* config/tc-visium.c, * config/tc-visium.h, * config/tc-wasm32.c,
* config/tc-wasm32.h, * config/tc-xc16x.c, * config/tc-xgate.c,
* config/tc-xstormy16.c, * config/tc-xstormy16.h,
* config/tc-xtensa.c, * config/tc-xtensa.h, * config/tc-z80.c,
* config/tc-z8k.c, * config/xtensa-istack.h,
* config/xtensa-relax.c, * config/xtensa-relax.h, * dw2gencfi.c,
* dwarf2dbg.c, * dwarf2dbg.h, * expr.c, * expr.h, * frags.c,
* frags.h, * listing.c, * macro.c, * output-file.c, * read.c,
* read.h, * stabs.c, * symbols.c, * write.c: Replace bfd_boolean
with bool, FALSE with false, and TRUE with true.

3 years agoUse bool in ld
Alan Modra [Wed, 31 Mar 2021 00:09:51 +0000 (10:39 +1030)] 
Use bool in ld

* sysdep.h (POISON_BFD_BOOLEAN): Define.
* configure.ac (elf_list_options, elf_shlib_list_options=false),
(elf_plt_unwind_list_options=false): Replace FALSE with false,
and TRUE with true.
* emulparams/call_nop.sh, * emulparams/cet.sh,
* emulparams/dynamic_undefined_weak.sh,
* emulparams/elf32b4300.sh, * emulparams/elf32lm32.sh,
* emulparams/elf32lr5900.sh, * emulparams/elf32lr5900n32.sh,
* emulparams/elf32visium.sh, * emulparams/elf_x86_64.sh,
* emulparams/extern_protected_data.sh, * emulparams/plt_unwind.sh,
* emulparams/reloc_overflow.sh, * emulparams/static.sh,
* emulparams/x86-64-lam.sh, * emultempl/aarch64elf.em,
* emultempl/aix.em, * emultempl/alphaelf.em,
* emultempl/armcoff.em, * emultempl/armelf.em,
* emultempl/avrelf.em, * emultempl/beos.em, * emultempl/bfin.em,
* emultempl/cr16elf.em, * emultempl/crxelf.em,
* emultempl/cskyelf.em, * emultempl/elf.em, * emultempl/genelf.em,
* emultempl/hppaelf.em, * emultempl/linux.em,
* emultempl/m68hc1xelf.em, * emultempl/metagelf.em,
* emultempl/mipself.em, * emultempl/mmix-elfnmmo.em,
* emultempl/mmixelf.em, * emultempl/mmo.em, * emultempl/msp430.em,
* emultempl/nios2elf.em, * emultempl/pdp11.em, * emultempl/pe.em,
* emultempl/pep.em, * emultempl/ppc32elf.em,
* emultempl/ppc64elf.em, * emultempl/rxelf.em,
* emultempl/rxlinux.em, * emultempl/scoreelf.em,
* emultempl/solaris2.em, * emultempl/spuelf.em,
* emultempl/ticoff.em, * emultempl/v850elf.em, * emultempl/vms.em,
* emultempl/xtensaelf.em, * emultempl/z80.em, * ld.h,
* ldbuildid.c, * ldbuildid.h, * ldcref.c, * ldctor.c, * ldctor.h,
* ldelf.c, * ldelf.h, * ldelfgen.c, * ldelfgen.h, * ldemul.c,
* ldemul.h, * ldexp.c, * ldexp.h, * ldfile.c, * ldfile.h,
* ldgram.y, * ldlang.c, * ldlang.h, * ldmain.c, * ldmain.h,
* ldmisc.c, * ldmisc.h, * ldwrite.c, * lexsup.c, * mri.c,
* pe-dll.c, * pe-dll.h, * pep-dll.h, * plugin.c, * plugin.h,
* testplug.c, * testplug2.c, * testplug3.c, * testplug4.c: Replace
bfd_boolean with bool, FALSE with false, and TRUE with true.
* configure: Regenerate.

3 years agoUse bool in binutils
Alan Modra [Wed, 31 Mar 2021 00:09:37 +0000 (10:39 +1030)] 
Use bool in binutils

* sysdep.h (POISON_BFD_BOOLEAN): Define.
* addr2line.c, * ar.c, * arsup.c, * bfdtest2.c, * binemul.c,
* binemul.h, * bucomm.c, * bucomm.h, * budbg.h, * coffgrok.c,
* debug.c, * debug.h, * dlltool.c, * dwarf.c, * dwarf.h,
* elfedit.c, * emul_aix.c, * mclex.c, * nm.c, * objcopy.c,
* objdump.c, * od-macho.c, * prdbg.c, * rdcoff.c, * rddbg.c,
* readelf.c, * rename.c, * stabs.c, * strings.c, * windint.h,
* windmc.c, * windmc.h, * windres.c, * winduni.c,
* wrstabs.c: Replace bfd_boolean with bool, FALSE with false,
and TRUE with true throughout.

3 years agoUse bool in opcodes
Alan Modra [Wed, 31 Mar 2021 00:06:19 +0000 (10:36 +1030)] 
Use bool in opcodes

cpu/
* frv.opc: Replace bfd_boolean with bool, FALSE with false, and
TRUE with true throughout.
opcodes/
* sysdep.h (POISON_BFD_BOOLEAN): Define.
* aarch64-asm-2.c, * aarch64-asm.c, * aarch64-asm.h,
* aarch64-dis-2.c, * aarch64-dis.c, * aarch64-dis.h,
* aarch64-gen.c, * aarch64-opc.c, * aarch64-opc.h, * arc-dis.c,
* arc-dis.h, * arc-fxi.h, * arc-opc.c, * arm-dis.c, * bfin-dis.c,
* cris-dis.c, * csky-dis.c, * csky-opc.h, * dis-buf.c,
* disassemble.c, * frv-opc.c, * frv-opc.h, * h8300-dis.c,
* i386-dis.c, * m68k-dis.c, * metag-dis.c, * microblaze-dis.c,
* microblaze-dis.h, * micromips-opc.c, * mips-dis.c,
* mips-formats.h, * mips-opc.c, * mips16-opc.c, * mmix-dis.c,
* msp430-dis.c, * nds32-dis.c, * nfp-dis.c, * nios2-dis.c,
* ppc-dis.c, * riscv-dis.c, * score-dis.c, * score7-dis.c,
* tic6x-dis.c, * v850-dis.c, * vax-dis.c, * wasm32-dis.c,
* xtensa-dis.c: Replace bfd_boolean with bool, FALSE with false,
and TRUE with true throughout.

3 years agoUse bool in bfd
Alan Modra [Wed, 31 Mar 2021 00:00:54 +0000 (10:30 +1030)] 
Use bool in bfd

* sysdep.h: POISON_BFD_BOOLEAN: Define.
* aix5ppc-core.c, * aout-cris.c, * aout-ns32k.c, * aout-target.h,
* aoutx.h, * arc-got.h, * archive.c, * archive64.c, * archures.c,
* bfd-in.h, * bfd.c, * bfdwin.c, * binary.c, * cache.c,
* coff-alpha.c, * coff-arm.c, * coff-arm.h, * coff-bfd.c,
* coff-bfd.h, * coff-go32.c, * coff-i386.c, * coff-ia64.c,
* coff-mcore.c, * coff-mips.c, * coff-rs6000.c, * coff-sh.c,
* coff-stgo32.c, * coff-tic30.c, * coff-tic4x.c, * coff-tic54x.c,
* coff-x86_64.c, * coff-z80.c, * coff-z8k.c, * coff64-rs6000.c,
* coffcode.h, * coffgen.c, * cofflink.c, * compress.c,
* corefile.c, * cpu-aarch64.c, * cpu-aarch64.h, * cpu-alpha.c,
* cpu-arc.c, * cpu-arm.c, * cpu-arm.h, * cpu-avr.c, * cpu-bfin.c,
* cpu-bpf.c, * cpu-cr16.c, * cpu-cris.c, * cpu-crx.c,
* cpu-csky.c, * cpu-d10v.c, * cpu-d30v.c, * cpu-dlx.c,
* cpu-epiphany.c, * cpu-fr30.c, * cpu-frv.c, * cpu-ft32.c,
* cpu-h8300.c, * cpu-hppa.c, * cpu-i386.c, * cpu-ia64.c,
* cpu-iamcu.c, * cpu-ip2k.c, * cpu-iq2000.c, * cpu-k1om.c,
* cpu-l1om.c, * cpu-lm32.c, * cpu-m10200.c, * cpu-m10300.c,
* cpu-m32c.c, * cpu-m32r.c, * cpu-m68hc11.c, * cpu-m68hc12.c,
* cpu-m68k.c, * cpu-m9s12x.c, * cpu-m9s12xg.c, * cpu-mcore.c,
* cpu-mep.c, * cpu-metag.c, * cpu-microblaze.c, * cpu-mips.c,
* cpu-mmix.c, * cpu-moxie.c, * cpu-msp430.c, * cpu-mt.c,
* cpu-nds32.c, * cpu-nfp.c, * cpu-nios2.c, * cpu-ns32k.c,
* cpu-or1k.c, * cpu-pdp11.c, * cpu-pj.c, * cpu-powerpc.c,
* cpu-pru.c, * cpu-riscv.c, * cpu-rl78.c, * cpu-rs6000.c,
* cpu-rx.c, * cpu-s12z.c, * cpu-s390.c, * cpu-score.c,
* cpu-sh.c, * cpu-sparc.c, * cpu-spu.c, * cpu-tic30.c,
* cpu-tic4x.c, * cpu-tic54x.c, * cpu-tic6x.c, * cpu-tilegx.c,
* cpu-tilepro.c, * cpu-v850.c, * cpu-v850_rh850.c, * cpu-vax.c,
* cpu-visium.c, * cpu-wasm32.c, * cpu-xc16x.c, * cpu-xgate.c,
* cpu-xstormy16.c, * cpu-xtensa.c, * cpu-z80.c, * cpu-z8k.c,
* dwarf1.c, * dwarf2.c, * ecoff-bfd.h, * ecoff.c, * ecofflink.c,
* elf-attrs.c, * elf-bfd.h, * elf-eh-frame.c, * elf-hppa.h,
* elf-ifunc.c, * elf-m10200.c, * elf-m10300.c, * elf-nacl.c,
* elf-nacl.h, * elf-properties.c, * elf-s390-common.c,
* elf-s390.h, * elf-strtab.c, * elf-vxworks.c, * elf-vxworks.h,
* elf.c, * elf32-am33lin.c, * elf32-arc.c, * elf32-arm.c,
* elf32-arm.h, * elf32-avr.c, * elf32-avr.h, * elf32-bfin.c,
* elf32-bfin.h, * elf32-cr16.c, * elf32-cr16.h, * elf32-cris.c,
* elf32-crx.c, * elf32-csky.c, * elf32-csky.h, * elf32-d10v.c,
* elf32-d30v.c, * elf32-dlx.c, * elf32-epiphany.c,
* elf32-fr30.c, * elf32-frv.c, * elf32-ft32.c, * elf32-gen.c,
* elf32-h8300.c, * elf32-hppa.c, * elf32-hppa.h, * elf32-i386.c,
* elf32-ip2k.c, * elf32-iq2000.c, * elf32-lm32.c, * elf32-m32c.c,
* elf32-m32r.c, * elf32-m68hc11.c, * elf32-m68hc12.c,
* elf32-m68hc1x.c, * elf32-m68hc1x.h, * elf32-m68k.c,
* elf32-m68k.h, * elf32-mcore.c, * elf32-mep.c, * elf32-metag.c,
* elf32-metag.h, * elf32-microblaze.c, * elf32-mips.c,
* elf32-moxie.c, * elf32-msp430.c, * elf32-mt.c, * elf32-nds32.c,
* elf32-nios2.c, * elf32-nios2.h, * elf32-or1k.c, * elf32-pj.c,
* elf32-ppc.c, * elf32-ppc.h, * elf32-pru.c, * elf32-rl78.c,
* elf32-rx.c, * elf32-s12z.c, * elf32-s390.c, * elf32-score.c,
* elf32-score.h, * elf32-score7.c, * elf32-sh-relocs.h,
* elf32-sh.c, * elf32-sparc.c, * elf32-spu.c, * elf32-spu.h,
* elf32-tic6x.c, * elf32-tic6x.h, * elf32-tilegx.c,
* elf32-tilepro.c, * elf32-v850.c, * elf32-v850.h,
* elf32-vax.c, * elf32-visium.c, * elf32-wasm32.c,
* elf32-xc16x.c, * elf32-xgate.c, * elf32-xstormy16.c,
* elf32-xtensa.c, * elf32-z80.c, * elf64-alpha.c, * elf64-bpf.c,
* elf64-gen.c, * elf64-hppa.c, * elf64-ia64-vms.c,
* elf64-mips.c, * elf64-mmix.c, * elf64-nfp.c, * elf64-ppc.c,
* elf64-ppc.h, * elf64-s390.c, * elf64-sparc.c,
* elf64-tilegx.c, * elf64-x86-64.c, * elfcode.h,
* elfcore.h, * elflink.c, * elfn32-mips.c, * elfnn-aarch64.c,
* elfnn-ia64.c, * elfnn-riscv.c, * elfxx-aarch64.c,
* elfxx-aarch64.h, * elfxx-ia64.c, * elfxx-ia64.h,
* elfxx-mips.c, * elfxx-mips.h, * elfxx-riscv.c, * elfxx-riscv.h,
* elfxx-sparc.c, * elfxx-sparc.h, * elfxx-target.h,
* elfxx-tilegx.c, * elfxx-tilegx.h, * elfxx-x86.c, * elfxx-x86.h,
* format.c, * genlink.h, * hash.c, * i386aout.c, * i386lynx.c,
* i386msdos.c, * ihex.c, * libaout.h, * libbfd-in.h,
* libbfd.c, * libcoff-in.h, * libecoff.h, * libpei.h,
* libxcoff.h, * linker.c, * mach-o-aarch64.c, * mach-o-arm.c,
* mach-o-i386.c, * mach-o-x86-64.c, * mach-o.c, * mach-o.h,
* merge.c, * mmo.c, * netbsd.h, * opncls.c, * pc532-mach.c,
* pdp11.c, * pe-arm.c, * pe-i386.c, * pe-mcore.c, * pe-sh.c,
* pe-x86_64.c, * peXXigen.c, * pef.c, * pei-arm.c, * pei-i386.c,
* pei-ia64.c, * pei-mcore.c, * pei-sh.c, * pei-x86_64.c,
* peicode.h, * plugin.c, * plugin.h, * ppcboot.c, * reloc.c,
* reloc16.c, * rs6000-core.c, * section.c, * simple.c, * som.c,
* som.h, * srec.c, * stabs.c, * syms.c, * targets.c, * tekhex.c,
* verilog.c, * vms-alpha.c, * vms-lib.c, * vms-misc.c, * vms.h,
* wasm-module.c, * xcofflink.c, * xcofflink.h, * xsym.c,
* xsym.h: Replace bfd_boolean with bool, FALSE with false, and
TRUE with true throughout.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
* libcoff.h: Regenerate.

3 years agoUse bool in gprof
Alan Modra [Tue, 30 Mar 2021 23:59:52 +0000 (10:29 +1030)] 
Use bool in gprof

* basic_blocks.c: Replace bfd_boolean with bool, FALSE with false,
and TRUE with true throughout.
* basic_blocks.h: Likewise.
* cg_arcs.c: Likewise.
* cg_dfn.c: Likewise.
* cg_print.c: Likewise.
* corefile.c: Likewise.
* gmon_io.c: Likewise.
* gprof.c: Likewise.
* gprof.h: Likewise.
* hist.c: Likewise.
* mips.c: Likewise.
* source.c: Likewise.
* source.h: Likewise.
* sym_ids.c: Likewise.
* sym_ids.h: Likewise.
* symtab.h: Likewise.
* vax.c: Likewise.

3 years agoUse bool in include
Alan Modra [Tue, 30 Mar 2021 23:50:10 +0000 (10:20 +1030)] 
Use bool in include

* bfdlink.h: Replace bfd_boolean with bool throughout.
* coff/ecoff.h: Likewise.
* coff/xcoff.h: Likewise.
* dis-asm.h: Likewise.
* elf/mmix.h: Likewise.
* elf/xtensa.h: Likewise.
* opcode/aarch64.h: Likewise, and FALSE with false, TRUE with true.
* opcode/arc.h: Likewise.
* opcode/mips.h: Likewise.
* opcode/tic6x-opcode-table.h: Likewise.
* opcode/tic6x.h: Likewise.

3 years agoUse stdbool.h
Alan Modra [Tue, 30 Mar 2021 23:49:10 +0000 (10:19 +1030)] 
Use stdbool.h

With this in place we can retire bfd_boolean one project at a time.

bfd/
* bfd-in.h: Include stdbool.h.
(bfd_boolean): Define as bool
* bfd-in2.h: Regenerate.

3 years agoRemove bfd_stdint.h
Alan Modra [Tue, 30 Mar 2021 23:37:02 +0000 (10:07 +1030)] 
Remove bfd_stdint.h

If we require C99 for binutils then stdint.h is available.

bfd/
* .gitignore: Delete bfd_stdint.h entry.
* Makefile.am (bfdinclude_HEADERS): Delete bfd_stdint.h.
(BUILD_HFILES, LOCAL_H_DEPS): Likewise.
* bfd-in.h: Include stdint.h in place of bfd_stdint.h.
* configure.ac: Don't invoke GCC_HEADER_STDINT.
* configure.com: Don't create bfd_stdint.h.
* Makefile.in: Regenerate.
* aclocal.m4: Regenerate.
* bfd-in2.h: Regenerate.
* config.in: Regenerate.
* configure: Regenerate.
* doc/Makefile.in: Regenerate.
* po/BLD-POTFILES.in: Regenerate.
binutils/
* coffdump.c: Include stdint.h in place of bfd_stdint.h.
* dwarf.c: Likewise.
gas/
* config/tc-aarch64.c: Include stdint.h in place of bfd_stdint.h.
* config/tc-crx.c: Likewise.
* config/tc-nds32.h: Likewise.
include/
* cgen/basic-modes.h: Include stdint.h in place of bfd_stdint.h.
* elf/nfp.h: Likewise.
* opcode/aarch64.h: Likewise.
* opcode/cgen.h: Likewise.
* opcode/nfp.h: Likewise.
* opcode/ppc.h: Likewise.
ld/
* elf-hints-local.h: Include stdint.h in place of bfd_stdint.h.
* emultempl/nds32elf.em: Likewise.
* testsuite/ld-elf/mbind2b.c: Likewise.
* testsuite/ld-elf/pr18718.c: Likewise.
* testsuite/ld-elf/pr18720a.c: Likewise.
* testsuite/ld-elf/pr25749-1.c: Likewise.
* testsuite/ld-elf/pr25749-1a.c: Likewise.
* testsuite/ld-elf/pr25749-1b.c: Likewise.
* testsuite/ld-elf/pr25749-1c.c: Likewise.
* testsuite/ld-elf/pr25749-1d.c: Likewise.
* testsuite/ld-elf/pr25749-2.c: Likewise.
* testsuite/ld-elf/pr25754-1a.c: Likewise.
* testsuite/ld-elf/pr25754-2a.c: Likewise.
* testsuite/ld-elf/pr25754-3a.c: Likewise.
* testsuite/ld-elf/pr25754-4a.c: Likewise.
* testsuite/ld-elf/pr25754-5a.c: Likewise.
* testsuite/ld-elf/pr25754-6a.c: Likewise.
opcodes/
* aarch64-dis.c: Include stdint.h in place of bfd_stdint.h.
* aarch64-dis.h: Likewise.
* aarch64-opc.c: Likewise.
* avr-dis.c: Likewise.
* csky-dis.c: Likewise.
* nds32-asm.c: Likewise.
* nds32-dis.c: Likewise.
* nfp-dis.c: Likewise.
* riscv-dis.c: Likewise.
* s12z-dis.c: Likewise.
* wasm32-dis.c: Likewise.

3 years agoInclude string.h in bfd.h and delete LITMEMCPY, LITSTRCPY
Alan Modra [Tue, 30 Mar 2021 23:32:08 +0000 (10:02 +1030)] 
Include string.h in bfd.h and delete LITMEMCPY, LITSTRCPY

This fixes the issue that startswith depends on strncpy being
declared, and not all projects using bfd.h include string.h before
bfd.h.  I've also deleted some macros that don't find much use
anywhere.

bfd/
* bfd-in.h: Include string.h.
(LITMEMCPY, LITSTRCPY): Delete.
* bfd-in2.h: Regenerate.
binutils/
* prdbg.c (pr_function_type): Replace LITSTTCPY with strcpy.

3 years agoAutomatic date update in version.in
GDB Administrator [Wed, 31 Mar 2021 00:00:11 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agogdb/dwarf: disable per-BFD resource sharing for -readnow objfiles
Simon Marchi [Tue, 30 Mar 2021 17:37:11 +0000 (13:37 -0400)] 
gdb/dwarf: disable per-BFD resource sharing for -readnow objfiles

New in v2:

  - Disable sharing only for -readnow objfiles, not all objfiles.

As described in PR 27541, we hit an internal error when loading a binary
the standard way and then loading it with the -readnow option:

    $ ./gdb -nx -q --data-directory=data-directory ~/a.out -ex "set confirm off" -ex "file -readnow ~/a.out"
    Reading symbols from /home/simark/a.out...
    Reading symbols from ~/a.out...
    /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:8098: internal-error: void create_all_comp_units(dwarf2_per_objfile*): Assertion `per_objfile->per_bfd->all_comp_units.empty ()' failed.

This is a recurring problem that exposes a design issue in the DWARF
per-BFD sharing feature.  Things work well when loading a binary with
the same method (with/without index, with/without readnow) twice in a
row.  But they don't work so well when loading a binary with different
methods.  See this previous fix, for example:

    efb763a5ea35 ("gdb: check for partial symtab presence in dwarf2_initialize_objfile")

That one handled the case where the first load is normal (uses partial
symbols) and the second load uses an index.

The problem is that when loading an objfile with a method A, we create a
dwarf2_per_bfd and some dwarf2_per_cu_data and initialize them with the
data belonging to that method.  When loading another obfile sharing the
same BFD but with a different method B, it's not clear how to re-use the
dwarf2_per_bfd/dwarf2_per_cu_data previously created, because they
contain the data specific to method A.

I think the most sensible fix would be to not share a dwarf2_per_bfd
between two objfiles loaded with different methods.  That means that two
objfiles sharing the same BFD and loaded the same way would share a
dwarf2_per_bfd.  Two objfiles sharing the same BFD but loaded with
different methods would use two different dwarf2_per_bfd structures.

However, this isn't a trivial change.  So to fix the known issue quickly
(including in the gdb 10 branch), this patch just disables all
dwarf2_per_bfd sharing for objfiles using READNOW.

Generalize the gdb.base/index-cache-load-twice.exp test to test all
the possible combinations of loading a file with partial symtabs, index
and readnow.  Move it to gdb.dwarf2, since it really exercises features
of the DWARF reader.

gdb/ChangeLog:

PR gdb/27541
* dwarf2/read.c (dwarf2_has_info): Don't share dwarf2_per_bfd
with objfiles using READNOW.

gdb/testsuite/ChangeLog:

PR gdb/27541
* gdb.base/index-cache-load-twice.exp: Remove.
* gdb.base/index-cache-load-twice.c: Remove.
* gdb.dwarf2/per-bfd-sharing.exp: New.
* gdb.dwarf2/per-bfd-sharing.c: New.

Change-Id: I9ffcf1e136f3e75242f70e4e58e4ba1fd3083389

3 years ago[gdb/testsuite] Add missing .debug_abbrev terminator in dw2-cu-size.S
Tom de Vries [Tue, 30 Mar 2021 13:16:26 +0000 (15:16 +0200)] 
[gdb/testsuite] Add missing .debug_abbrev terminator in dw2-cu-size.S

Since commit 27012aba8a6 "Remove Irix 6 workaround from DWARF abbrev reader"
we have:
...
(gdb) file dw2-cu-size^M
Reading symbols from dw2-cu-size...^M
DW_FORM_strp pointing outside of .debug_str section [in module dw2-cu-size]^M
(No debugging symbols found in dw2-cu-size)^M
(gdb) ptype noloc^M
No symbol table is loaded.  Use the "file" command.^M
(gdb) FAIL: gdb.dwarf2/dw2-cu-size.exp: ptype noloc
...

The problem is a missing .debug_abbrev terminator in dw2-cu-size.S, which
causes the .debug_abbrev contribution to be merged with the next:
...
 Number TAG (0x9b)
   1      DW_TAG_compile_unit    [has children]
    DW_AT_name         DW_FORM_string
    DW_AT_producer     DW_FORM_string
    DW_AT_language     DW_FORM_data1
    DW_AT value: 0     DW_FORM value: 0
   2      DW_TAG_variable    [no children]
    DW_AT_name         DW_FORM_string
    DW_AT_type         DW_FORM_ref4
    DW_AT_external     DW_FORM_flag
    DW_AT value: 0     DW_FORM value: 0
   3      DW_TAG_base_type    [no children]
    DW_AT_name         DW_FORM_string
    DW_AT_byte_size    DW_FORM_data1
    DW_AT_encoding     DW_FORM_data1
    DW_AT value: 0     DW_FORM value: 0
   4      DW_TAG_const_type    [no children]
    DW_AT_type         DW_FORM_ref_udata
    DW_AT value: 0     DW_FORM value: 0
   1      DW_TAG_compile_unit    [has children]
    DW_AT_producer     DW_FORM_strp
    DW_AT_language     DW_FORM_data1
    DW_AT_name         DW_FORM_strp
    DW_AT_comp_dir     DW_FORM_strp
    DW_AT_low_pc       DW_FORM_addr
    DW_AT_high_pc      DW_FORM_data8
    DW_AT_stmt_list    DW_FORM_sec_offset
    DW_AT value: 0     DW_FORM value: 0
...
and consequently, abbreviation code 1 no longer refers to a unique entry.

The eventually causes us to access the first attribute of this DIE:
...
 <0><124>: Abbrev Number: 1 (DW_TAG_compile_unit)
    <125>   DW_AT_name        : file1.txt
    <12f>   DW_AT_producer    : GNU C 3.3.3
    <13b>   DW_AT_language    : 1       (ANSI C)
...
which has form DW_FORM_string, using DW_FORM_strp.

Fix this by adding the missing .debug_abbrev terminator in dw2-cu-size.S.

gdb/testsuite/ChangeLog:

2021-03-30  Tom de Vries  <tdevries@suse.de>

PR testsuite/27604
* gdb.dwarf2/dw2-cu-size.S: Add missing .debug_abbrev terminator.

3 years agoFix inverted logic bug
Luis Machado [Mon, 29 Mar 2021 16:48:43 +0000 (13:48 -0300)] 
Fix inverted logic bug

During reviews, I changed the success/failure variables from int to bool, but
missed updating the code in a couple spots.  Given the logic inversion, the
gdbserver code fails instead of succeeding.

Fixed with the following patch. Seems fairly obvious, so I'll push it soon.

gdbserver/ChangeLog:

2021-03-30  Luis Machado  <luis.machado@linaro.org>

* server.cc (handle_general_set, handle_query): Update variable
to bool and fix verification logic.

3 years agox86: drop seg_entry
Jan Beulich [Tue, 30 Mar 2021 12:09:41 +0000 (14:09 +0200)] 
x86: drop seg_entry

Use struct reg_entry instead for most purposes, with a separate array
holding just the respective opcode prefix bytes.

3 years agox86: drop REGNAM_{AL,AX,EAX}
Jan Beulich [Tue, 30 Mar 2021 12:08:48 +0000 (14:08 +0200)] 
x86: drop REGNAM_{AL,AX,EAX}

The former two are unused anyway. And having such constants isn't very
helpful either, when they live in a place where updating the register
table wouldn't even allow noticing the need to adjust these constants.

3 years agox86: adjust st(<N>) parsing
Jan Beulich [Tue, 30 Mar 2021 12:08:11 +0000 (14:08 +0200)] 
x86: adjust st(<N>) parsing

st(1) ... st(7) will never be looked up in the hash table, so there's no
point inserting the entries. It's also not really necessary to do a 2nd
hash lookup after parsing the register number, nor is there a real
reason for having both st and st(0) entries. Plus we can easily do away
with the need for st to be first in the table.

3 years agox86: integrate rc_op into struct _i386_insn
Jan Beulich [Tue, 30 Mar 2021 12:06:37 +0000 (14:06 +0200)] 
x86: integrate rc_op into struct _i386_insn

There's no need for the extra level of indirection and the extra storage
needed for the pointer, pointing from one piece of static data to
another. Key checking of rounding being in effect off of the type field
of the structure instead.

3 years agox86: integrate broadcast_op into struct _i386_insn
Jan Beulich [Tue, 30 Mar 2021 12:06:09 +0000 (14:06 +0200)] 
x86: integrate broadcast_op into struct _i386_insn

There's no need for the extra level of indirection and the extra storage
needed for the pointer, pointing from one piece of static data to
another. Key checking of broadcast being in effect off of the type field
of the structure instead.

3 years agox86: integrate mask_op into struct _i386_insn
Jan Beulich [Tue, 30 Mar 2021 12:05:42 +0000 (14:05 +0200)] 
x86: integrate mask_op into struct _i386_insn

There's no need for the extra level of indirection and the extra storage
needed for the pointer, pointing from one piece of static data to
another. Key checking of masking being in effect off of the register
field of the structure instead.

3 years agox86: make swap_2_operands() have unsigned parameters
Jan Beulich [Tue, 30 Mar 2021 12:05:10 +0000 (14:05 +0200)] 
x86: make swap_2_operands() have unsigned parameters

All callers pass unsigned values (in some cases by virtue of passing
non-negative literal numbers).

This in turn requires struct {Mask,RC,Broadcast}_Operation's "operand"
fields to become unsigned, in turn allowing to reduce the amount of
casting needed (the two new casts that are necessary cast _to_
"unsigned" instead of _from_, as that's the form that'll never case
undefined behavior).

3 years agoasan: linker.c:2294:8: runtime error: load of value 253
Alan Modra [Tue, 30 Mar 2021 02:33:30 +0000 (13:03 +1030)] 
asan: linker.c:2294:8: runtime error: load of value 253

Seen after converting bfd_boolean to bool.
mmix  +FAIL: ld-mmix/zeroehmmo

./ld-new   -L/home/alan/src/binutils-gdb/ld/testsuite/ld-mmix  -m mmo -Ttext 0xa00 -T /home/alan/src/binutils-gdb/ld/testsuite/ld-mmix/zeroeh.ld -o tmpdir/dump tmpdir/x.o tmpdir/y.o
/home/alan/src/binutils-gdb/bfd/linker.c:2294:8: runtime error: load of value 253, which is not a valid value for type '_Bool'

* elflink.c (elf_link_add_object_symbols): Don't set h->indx
unless is_elf_hash_table.

3 years agoPR27625, powerpc64 gold __tls_get_addr calls
Alan Modra [Tue, 30 Mar 2021 01:55:03 +0000 (12:25 +1030)] 
PR27625, powerpc64 gold __tls_get_addr calls

This patch supports linking powerpc64 glibc with gold, specifically
the __tls_get_addr call in elf/dl-sym.c.  That call lacks marker
relocations tying it to the arg setup instructions, but the arg setup
insns are also contructed lacking the usual relocations on a Global
Dynamic TLS code sequence.  So there is no chance that anything in
that sequence might be wrongly edited by the linker.

In fact, the aim of linking glibc could have been supported by simply
omitting the error whenever TLS optimisation is disabled, as it is
when linking a shared library.  The patch goes further than that,
disabling TLS GD and LD sequence optimisation on a per-object basis
for object files lacking marker relocs.

PR gold/27625
* powerpc.cc (Powerpc_relobj): Add no_tls_marker_, tls_marker_,
and tls_opt_error_ variables and accessors.
(Target_powerpc::Scan::local, global): Call set_tls_marker and
set_no_tls_marker for GD and LD code sequence relocations.
(Target_powerpc::Relocate::relocate): Downgrade the "lacks marker
reloc" error to a warning when safe to do so, and omit the error
entirely if not optimising TLS sequences.  Do not optimise GD and
LD sequences for objects lacking marker relocs.
(Target_powerpc::relocate_relocs): Heed no_tls_marker here too.

3 years agoAutomatic date update in version.in
GDB Administrator [Tue, 30 Mar 2021 00:00:11 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agoRemove parameter from language_info
Tom Tromey [Mon, 29 Mar 2021 14:25:13 +0000 (08:25 -0600)] 
Remove parameter from language_info

I noticed that language_info is only ever called with a value of '1'.
This patch removes the parameter.

2021-03-29  Tom Tromey  <tromey@adacore.com>

* top.c (check_frame_language_change): Update.
* language.c (language_info): Remove parameter.
* language.h (language_info): Remove parameter.

3 years agoDon't pass empty options to GCC
Luis Machado [Wed, 24 Mar 2021 14:12:46 +0000 (11:12 -0300)] 
Don't pass empty options to GCC

On aarch64-linux, I noticed the compile command didn't work at all.  It
always gave the following error:

aarch64-linux-gnu-g++: error: : No such file or directory

Turns out we're passing an empty argv entry to GCC (because aarch64 doesn't
have a -m64 option), and GCC's behavior is to think that is a file it needs
to open.  One can reproduce it like so:

gcc "" "" "" ""
gcc: error: : No such file or directory
gcc: error: : No such file or directory
gcc: error: : No such file or directory
gcc: error: : No such file or directory
gcc: fatal error: no input files
compilation terminated.

The solution is to check for an empty string and skip adding that to argv.

Regression tested on aarch64-linux/Ubuntu 18.04/20.04.

gdb/ChangeLog:

2021-03-29  Luis Machado  <luis.machado@linaro.org>

* compile/compile.c (get_args): Don't add empty argv entries.

3 years agoFix memory tagging section type
Luis Machado [Fri, 26 Mar 2021 12:37:56 +0000 (09:37 -0300)] 
Fix memory tagging section type

It was reported to me that on Ubuntu 14.04 (fairly old) the documentation
fails to build with the following:

gdb/doc/gdb.texinfo:10888: warning: node `Memory' is up for `Memory Tagging' in sectioning but not in menu
gdb/doc/gdb.texinfo:10693: node `Memory' lacks menu item for `Memory Tagging' despite being its Up target
Makefile:491: recipe for target 'gdb.info' failed
make[3]: *** [gdb.info] Error 1

This doesn't seem to happen on Ubuntu 18.04/20.04, but it does make sense.

Fix this by turning @subsection into a @section and adding the
"Memory Tagging" entry to the menu.

gdb/doc/ChangeLog:

2021-03-29  Luis Machado  <luis.machado@linaro.org>

* gdb.textinfo (Memory Tagging): Make it a @section.

3 years agotestsuite, mi: avoid a clang bug in 'user-selected-context-sync.exp'
Tankut Baris Aktemur [Mon, 29 Mar 2021 14:00:41 +0000 (16:00 +0200)] 
testsuite, mi: avoid a clang bug in 'user-selected-context-sync.exp'

This test causes several timeouts for Clang, taking too long time to
finish.  The reason is, for an infinite loop of the form

   while(1); /* suppose this is line 30.  */

Clang generates code that looks like

   0x00000000004004d4 <+4>:     jmp    0x4004d9 <loop+9>
   0x00000000004004d9 <+9>:     jmp    0x4004d9 <loop+9>

So, the real loop is the instruction at address 0x4004d9.  But a
breakpoint that's defined at the loop line (assume line 30 in this
case) is inserted at address 0x4004d4.

  (gdb) break 30
  Breakpoint 1 at 0x4004d4: file test.c, line 30.

Therefore, continuing a thread that was spinning on the loop does not hit
the breakpoint.  The bug is reported at

  https://bugs.llvm.org/show_bug.cgi?id=49614

Tweak the infinite loop to spin on a variable to avoid this bug.  The
test is unrelated to the bug.

gdb/testsuite/ChangeLog:
2021-03-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

* gdb.mi/user-selected-context-sync.exp: Spin on a variable in
the infinite loop to avoid a Clang bug.

3 years agoRestore procfs.c compilation
Rainer Orth [Mon, 29 Mar 2021 11:26:35 +0000 (13:26 +0200)] 
Restore procfs.c compilation

Since c8fbd44a018a9923f906bfd2be5489caa87b602a (gdb: remove
target_is_pushed free function), procfs.c compilation is broken, which
went unnoticed for lack of functioning buildbots:

/vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c: In member function 'virtual void procfs_target::attach(const char*, int)':
/vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c:1772:8: error: 'inf' was not declared in this scope; did you mean 'info'?
 1772 |   if (!inf->target_is_pushed (this))
      |        ^~~
      |        info
/vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c: In member function 'virtual void procfs_target::create_inferior(const char*, const string&, char**, int)':
/vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c:2865:8: error: 'inf' was not declared in this scope; did you mean 'info'?
 2865 |   if (!inf->target_is_pushed (this))
      |        ^~~
      |        info

Fixed by defining inf.  Tested on amd64-pc-solaris2.11 and
sparcv9-sun-solaris2.11.

2021-03-29  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

gdb:
* procfs.c (procfs_target::attach): Define inf.
Use it.
(procfs_target::create_inferior): Likewise.

3 years agox86: move some opcode table entries
Jan Beulich [Mon, 29 Mar 2021 10:06:43 +0000 (12:06 +0200)] 
x86: move some opcode table entries

For a long time there hasn't been a need anymore to keep together all
templates with identical mnemonics. Move the MOVQ and MOVABS ones next
to their MOV counterparts. Move the string forms of CMPSD and MOVSD next
to their CMPS / MOVS counterparts. Re-arrange what so fgar was the SSE3
section.

This makes reasonably obvious that MONITOR/MWAIT aren't suitable to
cover by CpuSSE3, but adjusting this is left for another time.

3 years agox86: VPSADBW's source operands are also commutative
Jan Beulich [Mon, 29 Mar 2021 10:06:09 +0000 (12:06 +0200)] 
x86: VPSADBW's source operands are also commutative

In commit 79dec6b7baa2 ("x86-64: optimize certain commutative
VEX-encoded insns") I missed the fact that there being subtraction
involved here doesn't matter, as absolute differences get summed up.

3 years agox86: fold SSE2AVX and their base MMX/SSE templates
Jan Beulich [Mon, 29 Mar 2021 10:05:25 +0000 (12:05 +0200)] 
x86: fold SSE2AVX and their base MMX/SSE templates

This way not only the overall (source) table size shrinks by quite a
bit and the risk of related templates going out of sync with one another
gets lowered, but also (dis)similarities between neighboring templates
become easier to spot.

Note that for certain SSE2AVX templates this results in benign attribute
changes:
- LDMXCSR and STMXCSR: NoAVX gets set,
- MOVMSKPS, PMOVMSKB, PEXTR{B,W} (register destination), and PINSR{B,W}
  (register source): IgnoreSize and NoRex64 get set,
- CVT{DQ,PS}2PD, CVTSD2SS, MOVMSKPD, MOVDDUP, PMOV{S,Z}X{BW,WD,DQ}, and
  ROUNDSD: NoRex64 gets set,
- CVTSS2SD, INSERTPS, PEXTRW (memory destination), PINSRW (memory
  source), and PMOV{S,Z}X{BD,WQ,BQ}: IgnoreSize gets set.
Similarly the "normal" (non-SSE2AVX)
- non-64-bit CVTS{I,S}2SD forms get NoRex64 set,
- CMP{EQ,ORD,NEQ,UNORD}{P,S}{S,D} forms get C set,
all again in a benign way.

The remaining differences in the generated table are due to re-ordering
of entries in the course of being folded into templates.

3 years agox86: undo Prefix_0X<nn> use in opcode table
Jan Beulich [Mon, 29 Mar 2021 10:04:03 +0000 (12:04 +0200)] 
x86: undo Prefix_0X<nn> use in opcode table

The table entries are more natural to read (and slightly shorter) when
the prefixes, like is the case for VEX/XOP/EVEX-encoded entries, are
specified as part of the opcode. This is particularly noticable for
side-by-side legacy and SSE2AVX entries.

An implication is that we now need to use "unsigned long long" for the
initially parsed opcode in i386-gen. I don't expect this to be an issue.

3 years agox86: shrink some struct insn_template fields
Jan Beulich [Mon, 29 Mar 2021 10:03:31 +0000 (12:03 +0200)] 
x86: shrink some struct insn_template fields

Now that all base opcodes are only at most 2 bytes in size, shrink its
template field to just as much. By also shrinking extension_opcode and
operands to just what they really need, we can free up an entire 32-bit
slot (plus 4 left bits past the bitfields themselves).

At present this alters sizeof(struct insn_template) only for 32-bit
builds. In 64-bit builds it instead leaves a padding hole that will
allow to buffer future growth of other fields (opcode_modifier,
cpu_flags, operand_types[]).

3 years agox86: derive opcode encoding space attribute from base opcode
Jan Beulich [Mon, 29 Mar 2021 10:02:50 +0000 (12:02 +0200)] 
x86: derive opcode encoding space attribute from base opcode

Just like is already done for VEX/XOP/EVEX encoded insns, record the
encoding space information in the respective opcode modifier field. Do
this again without changing the source table, but rather by deriving the
values from their existing source representation.

3 years agoTRUE/FALSE simplification
Alan Modra [Sun, 28 Mar 2021 23:22:56 +0000 (09:52 +1030)] 
TRUE/FALSE simplification

There is really no need to write code like "foo != 0 ? TRUE : FALSE"
unless we had stupidly defined FALSE as something other than 0 or TRUE
as something other than 1.  The simpler "foo != 0" does just as well.
Similarly "(condition == TRUE)" or "(condition == FALSE) can be
simplified to "(condition)" and "(!condition)" respectively.

I'll note that there is reason to use "integer_expression != 0" when
assigning a bfd_boolean rather than the simpler "integer_expression",
if you expect the variable to have 0 or 1 value.  It's probably even a
good idea to not rely on implicit conversion if bfd_boolean were _Bool.

bfd/
* aoutx.h (aout_link_write_symbols): Don't cast boolean expression
to bfd_boolean.
* elf32-or1k.c (or1k_set_got_and_rela_sizes): Dont compare booleans
against FALSE.
* elf32-arc.c (name_for_global_symbol): Don't compare boolean to TRUE.
(is_reloc_PC_relative): Don't use "boolean_condition ? TRUE : FALSE".
(is_reloc_SDA_relative, is_reloc_for_GOT): Likewise.
(is_reloc_for_PLT, is_reloc_for_TLS): Likewise.
* elf32-arm.c (stm32l4xx_need_create_replacing_stub): Likewise.
* elf32-nds32.c (insert_nds32_elf_blank): Likewise.
* elf32-rx.c (rx_set_section_contents): Likewise.
* elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Likewise.
* elfxx-mips.c (_bfd_mips_elf_ignore_undef_symbol): Likewise.
* mach-o.c (bfd_mach_o_read_command): Likewise.
* targets.c (bfd_get_target_info): Likewise.
binutils/
* dlltool.c (main): Don't use "boolean_condition ? TRUE : FALSE".
* dwarf.c (read_and_display_attr_value): Likewise.
(display_debug_str_offsets): Likewise.
* objdump.c (dump_bfd): Likewise.
* readelf.c (dump_section_as_strings): Likewise.
(dump_section_as_bytes): Likewise.
gas/
* atof-generic.c (FALSE, TRUE): Don't define.
* config/obj-elf.h (FALSE, TRUE): Don't define.
* config/obj-som.h (FALSE, TRUE): Don't define.
* config/tc-hppa.h (FALSE, TRUE): Don't define.
* config/tc-pdp11.c (FALSE, TRUE): Don't define.
* config/tc-iq2000.h (obj_fix_adjustable): Delete.
* config/tc-m32r.h (TC_FIX_ADJUSTABLE): Delete.
* config/tc-mt.h (obj_fix_adjustable): Delete.
* config/tc-nds32.h (TC_FIX_ADJUSTABLE): Delete.
* config/tc-arc.c (parse_opcode_flags): Simplify boolean expression.
(relaxable_flag, relaxable_operand, assemble_insn): Likewise.
(tokenize_extregister): Likewise.
* config/tc-csky.c (parse_opcode, get_operand_value): Likewise.
(parse_operands_op, parse_operands, md_assemble): Likewise.
* config/tc-d10v.c (build_insn): Likewise.
* config/tc-score.c (s3_gen_insn_frag): Likewise.
* config/tc-score7.c (s7_gen_insn_frag, s7_relax_frag): Likewise.
* config/tc-tic6x.c (tic6x_update_features, md_assemble): Likewise.
* config/tc-z80.c (emit_byte): Likewise.
include/
* opcode/aarch64.h (alias_opcode_p): Simplify boolean expression.
(opcode_has_alias, pseudo_opcode_p, optional_operand_p): Likewise.
(opcode_has_special_coder): Likewise.
ld/
* emultempl/aix.em (gld${EMULATION_NAME}_before_allocation): Simplify
boolean expression.
* lexsup.c (parse_args): Likewise.
* pe-dll.c (pe_dll_id_target): Likewise.
opcodes/
* aarch64-opc.c (vector_qualifier_p): Simplify boolean expression.
(fp_qualifier_p, get_data_pattern): Likewise.
(aarch64_get_operand_modifier_from_value): Likewise.
(aarch64_extend_operator_p, aarch64_shift_operator_p): Likewise.
(operand_variant_qualifier_p): Likewise.
(qualifier_value_in_range_constraint_p): Likewise.
(aarch64_get_qualifier_esize): Likewise.
(aarch64_get_qualifier_nelem): Likewise.
(aarch64_get_qualifier_standard_value): Likewise.
(get_lower_bound, get_upper_bound): Likewise.
(aarch64_find_best_match, match_operands_qualifier): Likewise.
(aarch64_print_operand): Likewise.
* aarch64-opc.h (operand_has_inserter, operand_has_extractor): Likewise.
(operand_need_sign_extension, operand_need_shift_by_two): Likewise.
(operand_need_shift_by_four, operand_maybe_stack_pointer): Likewise.
* arm-dis.c (print_insn_mve, print_insn_thumb32): Likewise.
* tic6x-dis.c (tic6x_check_fetch_packet_header): Likewise.
(print_insn_tic6x): Likewise.

3 years agogas int vs bfd_boolean fixes
Alan Modra [Sun, 28 Mar 2021 23:19:35 +0000 (09:49 +1030)] 
gas int vs bfd_boolean fixes

* config/tc-arm.c (struct arm_long_option_table <func>): Return
bfd_boolean.
* config/tc-arm.h (arm_optimize_expr, arm_data_in_code): Likewise.
* config/tc-metag.c (parse_mov_port): Replace unsigned int variable
with bfd_boolean.
(parse_mmov, parse_mov_ct, parse_alu, parse_shift, parse_bitop),
(parse_cmp, parse_fmmov, parse_fmov_data, parse_fearith),
(parse_dget_set, parse_dalu): Likewise, ensuring assignment from
logical expressions.
(struct metag_long_option <func>): Return bfd_boolean.
(metag_parse_cpu, metag_parse_fpu, metag_parse_dsp): Likewise.
* config/tc-msp430.c (msp430_dstoperand): Correct dummy type.
* config/tc-s12z.c (parse_operand_func): Return bfd_boolean.
(no_operands, lex_force_match, lex_reg_list): Likewise.
(size_from_suffix): Return int.
(s12z_relax_frag, md_estimate_size_before_relax): Return 0.
* config/tc-s12z.h (tc_s12z_fix_adjustable): Likewise.

3 years agobinutils int vs bfd_boolean fixes
Alan Modra [Sun, 28 Mar 2021 23:17:16 +0000 (09:47 +1030)] 
binutils int vs bfd_boolean fixes

* objdump.c (process_links): Use type int.
* readelf.c (request_dump): Don't increment do_dump, set it.
* windint.h (target_is_bigendian): Use type bfd_boolean.
* windmc.c (target_is_bigendian): Likewise.
* windres.c (target_is_bigendian): Likewise.

3 years agoopcodes int vs bfd_boolean fixes
Alan Modra [Sun, 28 Mar 2021 23:14:48 +0000 (09:44 +1030)] 
opcodes int vs bfd_boolean fixes

cpu/
* frv.opc (frv_is_branch_major, frv_is_float_major),
(frv_is_media_major, frv_is_branch_insn, frv_is_float_insn),
(frv_is_media_insn, spr_valid): Correct prototypes.
include/
* opcode/aarch64.h (aarch64_opcode_encode): Correct prototype.
opcodes/
* arc-dis.c (extract_operand_value): Correct NULL cast.
* frv-opc.h: Regenerate.

3 years agoMiscellaneous BFD int vs bfd_boolean fixes
Alan Modra [Sun, 28 Mar 2021 23:12:37 +0000 (09:42 +1030)] 
Miscellaneous BFD int vs bfd_boolean fixes

nds32 hyper_relax takes values of 0, 1 and 2.  vms_write_data_block
return TRUE/FALSE not positive/negative.

* coff-z80.c (z80_is_local_label_name): Return bfd_boolean.
* elf32-z80.c (z80_is_local_label_name): Likewise.
* elf32-spu.c (spu_elf_modify_headers): Likewise.
* elf32-nds32.h (struct elf_nds32_link_hash_table <hyper_relax>):
Change type to int.
* vms-lib.c (_bfd_vms_lib_write_archive_contents): Correct test
for error return from vms_write_data_block.

3 years agohash table iterator callback functions int vs. bfd_boolean
Alan Modra [Sun, 28 Mar 2021 23:11:01 +0000 (09:41 +1030)] 
hash table iterator callback functions int vs. bfd_boolean

Correct return type of callbacks invoked by htab_traverse and other
hashtab.h functions to int, and one case of a callback invoked by
elf_link_hash_traverse to bfd_boolean.

* elf32-i386.c (elf_i386_finish_local_dynamic_symbol): Return int.
* elf64-ia64-vms.c (elf64_ia64_local_dyn_info_free): Likewise.
(elf64_ia64_local_dyn_sym_thunk): Likewise.
* elf64-x86-64.c (elf_x86_64_finish_local_dynamic_symbol): Likewise.
* elfnn-aarch64.c (elfNN_aarch64_allocate_local_ifunc_dynrelocs),
(elfNN_aarch64_finish_local_dynamic_symbol): Likewise.
* elfnn-ia64.c (elfNN_ia64_local_dyn_info_free): Likewise.
(elfNN_ia64_local_dyn_sym_thunk): Likewise.
* elfnn-riscv.c (allocate_local_ifunc_dynrelocs): Likewise.
(riscv_pcrel_reloc_eq): Likewise.
(riscv_elf_finish_local_dynamic_symbol): Likewise.
* elfxx-sparc.c (allocate_local_dynrelocs): Likewise.
(finish_local_dynamic_symbol): Likewise.
* elfxx-x86.c (elf_x86_allocate_local_dynreloc): Likewise.
* elfxx-mips.c (mips_elf_resolve_got_page_ref): Likewise.
(mips_elf_count_got_symbols): Change return type to bfd_boolean.

3 years agoELF output symbol hooks int vs. bfd_boolean
Alan Modra [Sun, 28 Mar 2021 23:09:15 +0000 (09:39 +1030)] 
ELF output symbol hooks int vs. bfd_boolean

elf_backend_link_output_symbol_hook and elf_link_output_symstrtab may
return 2 when a symbol is to be discarded.  Update places that use
bfd_boolean rather than int for these functions.

* elflink.c (elf_link_output_symstrtab): Make flinfo parameter
a void pointer.
(bfd_elf_final_link): Delete out_sym_func typedef and don't cast
elf_link_output_symstrtab when calling output_arch_syms and
output_arch_local_syms.
* elf-bfd.h (struct elf_backend_data <elf_backend_output_arch_syms,
elf_backend_output_arch_local_syms>): Change return type of func
arg to match elf_link_output_symstrtab.
* elf-vxworks.h (elf_vxworks_link_output_symbol_hook): Correct
return type.
* elf32-nds32.c (nds32_elf_output_symbol_hook): Correct return type.
(nds32_elf_output_arch_syms): Correct func return type.