binutils-gdb.git
3 years agoGCC_CET_HOST_FLAGS: Check if host supports multi-byte NOPs
H.J. Lu [Thu, 18 Mar 2021 14:54:15 +0000 (07:54 -0700)]
GCC_CET_HOST_FLAGS: Check if host supports multi-byte NOPs

Check if host supports multi-byte NOPs before enabling CET on host.

config/

PR binutils/27397
* cet.m4 (GCC_CET_HOST_FLAGS): Check if host supports multi-byte
NOPs.

libiberty/

PR binutils/27397
* configure: Regenerated.

3 years agoFix section dumping so that warnings are not issued for missed sections in separate...
Nick Clifton [Thu, 18 Mar 2021 14:01:25 +0000 (14:01 +0000)]
Fix section dumping so that warnings are not issued for missed sections in separate debuginfo files.

PR 27478
* readelf.c (dump_section_as_strings): Mention separate filename.
(dump_section_as_bytes): Likewise.
(dump_section_as_ctf): Likewise.
(initialise_dumkps_byname): Only issue a warning for missing
sections if processing the main file.
(process_section_contents): Only issue a warning for unsumped
section numbers in the main file.
(initialise_dump_sects): New function.  Contains code extracted
from ...
(process_object): ... here.  Also call initialise_dump_sects for
separate files.

3 years agolibctf: support encodings for enums
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: support encodings for enums

The previous commit started to error-check the lookup of
ctf_type_encoding for the underlying type that is internally done when
carrying out a ctf_type_encoding on a slice.

Unfortunately, enums have no encoding, so this has historically been
returning an error (which is ignored) and then populating the cte_format
with uninitialized data.  Now the error is not ignored, this is
returning an error, which breaks linking of CTF containing bitfields of
enumerated type.

CTF format v3 does not record the actual underlying type of a enum, but
we can mock up something that is not *too* wrong, and that is at any
rate better than uninitialized data.

ld/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* testsuite/ld-ctf/slice.c: Check slices of enums too.
* testsuite/ld-ctf/slice.d: Results adjusted.

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-types.c (ctf_type_encoding): Support, after a fashion, for enums.
* ctf-dump.c (ctf_dump_format_type): Do not report enums' degenerate
encoding.

3 years agolibctf: a couple of small error-handling fixes
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: a couple of small error-handling fixes

Out-of-memory errors initializing the string atoms table were
disregarded (though they would have caused a segfault very shortly
afterwards).  Errors hashing types during deduplication were only
reported if they happened on the output dict, which is almost never the
case (most errors are going to be on the dict we're working over, which
is going to be one of the inputs).  (The error was detected in both
cases, but the errno was extracted from the wrong dict.)

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-dedup.c (ctf_dedup_rhash_type): Report errors on the input
dict properly.
* ctf-open.c (ctf_bufopen_internal): Report errors initializing
the atoms table.

3 years agolibctf: types: unify code dealing with small-vs-large struct members
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: types: unify code dealing with small-vs-large struct members

This completes the job of unifying what was once three separate code
paths full of duplication for every function dealing with querying the
properties of struct and union members.  The dynamic code path was
already removed: this change removes the distinction between small and
large members, by adding a helper that copies out members from the vlen,
expanding small members into large ones as it does so.

This makes it possible to have *more* representations of things like
structure members without needing to change the querying functions at
all.  It also lets us check for buffer overruns more effectively,
verifying that we don't accidentally overrun the end of the vlen in
either the dynamic or static type case.

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-impl.h (ctf_next_t) <ctn_tp>: New.
<u.ctn_mp>: Remove.
<u.ctn_lmp>: Remove.
<u.ctn_vlen>: New.
* ctf-types.c (ctf_struct_member): New.
(ctf_member_next): Use it, dropping separate large/small code paths.
(ctf_type_align): Likewise.
(ctf_member_info): Likewise.
(ctf_type_rvisit): Likewise.

3 years agolibctf: eliminate dtd_u, part 5: structs / unions
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: eliminate dtd_u, part 5: structs / unions

Eliminate the dynamic member storage for structs and unions as we have
for other dynamic types.  This is much like the previous enum
elimination, except that structs and unions are the only types for which
a full-sized ctf_type_t might be needed.  Up to now, this decision has
been made in the individual ctf_add_{struct,union}_sized functions and
duplicated in ctf_add_member_offset.  The vlen machinery lets us
simplify this, always allocating a ctf_lmember_t and setting the
dtd_data's ctt_size to CTF_LSIZE_SENT: we figure out whether this is
really justified and (almost always) repack things down into a
ctf_stype_t at ctf_serialize time.

This allows us to eliminate the dynamic member paths from the iterators and
query functions in ctf-types.c in favour of always using the large-structure
vlen stuff for dynamic types (the diff is ugly but that's just because of the
volume of reindentation this calls for).  This also means the large-structure
vlen stuff gets more heavily tested, which is nice because it was an almost
totally unused code path before now (it only kicked in for structures of size
>4GiB, and how often do you see those?)

The only extra complexity here is ctf_add_type.  Back in the days of the
nondeduplicating linker this was called a ridiculous number of times for
countless identical copies of structures: eschewing the repeated lookups of the
dtd in ctf_add_member_offset and adding the members directly saved an amazing
amount of time.  Now the nondeduplicating linker is gone, this is extreme
overoptimization: we can rip out the direct addition and use ctf_member_next and
ctf_add_member_offset, just like ctf_dedup_emit does.

We augment a ctf_add_type test to try adding a self-referential struct, the only
thing the ctf_add_type part of this change really perturbs.

This completes the elimination of dtd_u.

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-impl.h (ctf_dtdef_t) <dtu_members>: Remove.
<dtd_u>: Likewise.
(ctf_dmdef_t): Remove.
(struct ctf_next) <u.ctn_dmd>: Remove.
* ctf-create.c (INITIAL_VLEN): New, more-or-less arbitrary initial
vlen size.
(ctf_add_enum): Use it.
(ctf_dtd_delete): Do not free the (removed) dmd; remove string
refs from the vlen on struct deletion.
(ctf_add_struct_sized): Populate the vlen: do it by hand if
promoting forwards.  Always populate the full-size
lsizehi/lsizelo members.
(ctf_add_union_sized): Likewise.
(ctf_add_member_offset): Set up the vlen rather than the dmd.
Expand it as needed, repointing string refs via
ctf_str_move_pending. Add the member names as pending strings.
Always populate the full-size lsizehi/lsizelo members.
(membadd): Remove, folding back into...
(ctf_add_type_internal): ... here, adding via an ordinary
ctf_add_struct_sized and _next iteration rather than doing
everything by hand.
* ctf-serialize.c (ctf_copy_smembers): Remove this...
(ctf_copy_lmembers): ... and this...
(ctf_emit_type_sect): ... folding into here. Figure out if a
ctf_stype_t is needed here, not in ctf_add_*_sized.
(ctf_type_sect_size): Figure out the ctf_stype_t stuff the same
way here.
* ctf-types.c (ctf_member_next): Remove the dmd path and always
use the vlen.  Force large-structure usage for dynamic types.
(ctf_type_align): Likewise.
(ctf_member_info): Likewise.
(ctf_type_rvisit): Likewise.
* testsuite/libctf-regression/type-add-unnamed-struct-ctf.c: Add a
self-referential type to this test.
* testsuite/libctf-regression/type-add-unnamed-struct.c: Adjusted
accordingly.
* testsuite/libctf-regression/type-add-unnamed-struct.lk: Likewise.

3 years agolibctf: eliminate dtd_u, part 4: enums
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: eliminate dtd_u, part 4: enums

This is the first tricky one, the first complex multi-entry vlen
containing strings.  To handle this in vlen form, we have to handle
pending refs moving around on realloc.

We grow vlen regions using a new ctf_grow_vlen function, and iterate
through the existing enums every time a grow happens, telling the string
machinery the distance between the old and new vlen region and letting
it adjust the pending refs accordingly.  (This avoids traversing all
outstanding refs to find the refs that need adjusting, at the cost of
having to traverse one enum: an obvious major performance win.)

Addition of enums themselves (and also structs/unions later) is a bit
trickier than earlier forms, because the type might be being promoted
from a forward, and forwards have no vlen: so we have to spot that and
create it if needed.

Serialization of enums simplifies down to just telling the string
machinery about the string refs; all the enum type-lookup code loses all
its dynamic member lookup complexity entirely.

A new test is added that iterates over (and gets values of) an enum with
enough members to force a round of vlen growth.

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-impl.h (ctf_dtdef_t) <dtd_vlen_alloc>: New.
(ctf_str_move_pending): Declare.
* ctf-string.c (ctf_str_add_ref_internal): Fix error return.
(ctf_str_move_pending): New.
* ctf-create.c (ctf_grow_vlen): New.
(ctf_dtd_delete): Zero out the vlen_alloc after free.  Free the
vlen later: iterate over it and free enum name refs first.
(ctf_add_generic): Populate dtd_vlen_alloc from vlen.
(ctf_add_enum): populate the vlen; do it by hand if promoting
forwards.
(ctf_add_enumerator): Set up the vlen rather than the dmd.  Expand
it as needed, repointing string refs via ctf_str_move_pending. Add
the enumerand names as pending strings.
* ctf-serialize.c (ctf_copy_emembers): Remove.
(ctf_emit_type_sect): Copy the vlen into place and ref the
strings.
* ctf-types.c (ctf_enum_next): The dynamic portion now uses
the same code as the non-dynamic.
(ctf_enum_name): Likewise.
(ctf_enum_value): Likewise.
* testsuite/libctf-lookup/enum-many-ctf.c: New test.
* testsuite/libctf-lookup/enum-many.lk: New test.

3 years agolibctf: do not corrupt strings across ctf_serialize
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: do not corrupt strings across ctf_serialize

The preceding change revealed a new bug: the string table is sorted for
better compression, so repeated serialization with type (or member)
additions in the middle can move strings around.  But every
serialization flushes the set of refs (the memory locations that are
automatically updated with a final string offset when the strtab is
updated), so if we are not to have string offsets go stale, we must do
all ref additions within the serialization code (which walks the
complete set of types and symbols anyway). Unfortunately, we were adding
one ref in another place: the type name in the dynamic type definitions,
which has a ref added to it by ctf_add_generic.

So adding a type, serializing (via, say, one of the ctf_write
functions), adding another type with a name that sorts earlier, and
serializing again will corrupt the name of the first type because it no
longer had a ref pointing to its dtd entry's name when its string offset
was shifted later in the strtab to mae way for the other type.

To ensure that we don't miss strings, we also maintain a set of *pending
refs* that will be added later (during serialization), and remove
entries from that set when the ref is finally added.  We always use
ctf_str_add_pending outside ctf-serialize.c, ensure that ctf_serialize
adds all strtab offsets as refs (even those in the dtds) on every
serialization, and mandate that no refs are live on entry to
ctf_serialize and that all pending refs are gone before strtab
finalization.  (Of necessity ctf_serialize has to traverse all strtab
offsets in the dtds in order to serialize them, so adding them as refs
at the same time is easy.)

(Note that we still can't erase unused atoms when we roll back, though
we can erase unused refs: members and enums are still not removed by
rollbacks and might reference strings added after the snapshot.)

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-hash.c (ctf_dynset_elements): New.
* ctf-impl.h (ctf_dynset_elements): Declare it.
(ctf_str_add_pending): Likewise.
(ctf_dict_t) <ctf_str_pending_ref>: New, set of refs that must be
added during serialization.
* ctf-string.c (ctf_str_create_atoms): Initialize it.
(CTF_STR_ADD_REF): New flag.
(CTF_STR_MAKE_PROVISIONAL): Likewise.
(CTF_STR_PENDING_REF): Likewise.
(ctf_str_add_ref_internal): Take a flags word rather than int
params.  Populate, and clear out, ctf_str_pending_ref.
(ctf_str_add): Adjust accordingly.
(ctf_str_add_external): Likewise.
(ctf_str_add_pending): New.
(ctf_str_remove_ref): Also remove the potential ref if it is a
pending ref.
* ctf-serialize.c (ctf_serialize): Prohibit addition of strings
with ctf_str_add_ref before serialization.  Ensure that the
ctf_str_pending_ref set is empty before strtab finalization.
(ctf_emit_type_sect): Add a ref to the ctt_name.
* ctf-create.c (ctf_add_generic): Add the ctt_name as a pending
ref.
* testsuite/libctf-writable/reserialize-strtab-corruption.*: New test.

3 years agolibctf: don't lose track of all valid types upon serialization
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: don't lose track of all valid types upon serialization

One pattern which is rarely done in libctf but which is meant to work is
this:

ctf_create();
ctf_add_*(); // add stuff
ctf_type_*() // look stuff up
ctf_write_*();
ctf_add_*(); // should still work
ctf_type_*() // so should this
ctf_write_*(); // and this

i.e., writing out a dict should not break it and you should be able to
do everything you could do with it before, including writing it out
again.

Unfortunately this has been broken for a while because the field which
indicates the maximum valid type ID was not preserved across
serialization: so type additions after serialization would overwrite
types (obviously disastrous) and type lookups would just fail.

Fix trivial.

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-serialize.c (ctf_serialize): Preserve ctf_typemax across
serialization.

3 years agoAdd install dependencies for ld -> bfd and libctf -> bfd
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
Add install dependencies for ld -> bfd and libctf -> bfd

This stops problems parallel-installing if a relink of libctf is needed.

Also adds corresponding install-strip dependencies.

ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

PR libctf/27482
* Makefile.def: Add install-bfd dependencies for install-libctf and
install-ld, and install-strip-bfd dependencies for
install-strip-libctf and install-strip-ld; move the install-ld
dependency on install-libctf to join it.
* Makefile.in: Regenerated.

3 years agolibctf: eliminate dtd_u, part 3: functions
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: eliminate dtd_u, part 3: functions

One more member vanishes from the dtd_u, leaving only the member for
struct/union/enum members.

There's not much to do here, since as of commit afd78bd6f0a30ba5 we use
the same representation (type sizes, etc) in the dtu_argv as we will
use in the final vlen, with one exception: the vlen has alignment
padding, and the dtu_argv did not.  Simplify things by adding suitable
padding in both cases.

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-impl.h (ctf_dtdef_t) <dtd_u.dtu_argv>: Remove.
* ctf-create.c (ctf_dtd_delete): No longer free it.
(ctf_add_function): Use the dtd_vlen, not dtu_argv.  Properly align.
* ctf-serialize.c (ctf_emit_type_sect): Just copy the dtd_vlen.
* ctf-types.c (ctf_func_type_info): Just use the vlen.
(ctf_func_type_args): Likewise.

3 years agolibctf: eliminate dtd_u, part 2: arrays
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: eliminate dtd_u, part 2: arrays

This is even simpler than ints, floats and slices, with the only extra
complication being the need to manually transfer the array parameter in
the rarely-used function ctf_set_array.  (Arrays are unique in libctf in
that they can be modified post facto, not just created and appended to.
I'm not sure why they got this exemption, but it's easy to maintain.)

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-impl.h (ctf_dtdef_t) <dtd_u.dtu_arr>: Remove.
* ctf-create.c (ctf_add_array): Use the dtd_vlen, not dtu_arr.
(ctf_set_array): Likewise.
* ctf-serialize.c (ctf_emit_type_sect): Just copy the dtd_vlen.
* ctf-types.c (ctf_array_info): Just use the vlen.

3 years agolibctf: eliminate dtd_u, part 1: int/float/slice
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: eliminate dtd_u, part 1: int/float/slice

This series eliminates a lot of special-case code to handle dynamic
types (types added to writable dicts and not yet serialized).

Historically, when such types have variable-length data in their final
CTF representations, libctf has always worked by adding such types to a
special union (ctf_dtdef_t.dtd_u) in the dynamic type definition
structure, then picking the members out of this structure at
serialization time and packing them into their final form.

This has the advantage that the ctf_add_* code doesn't need to know
anything about the final CTF representation, but the significant
disadvantage that all code that looks up types in any way needs two code
paths, one for dynamic types, one for all others.  Historically libctf
"handled" this by not supporting most type lookups on dynamic types at
all until ctf_update was called to do a complete reserialization of the
entire dict (it didn't emit an error, it just emitted wrong results).
Since commit 676c3ecbad6e9c4, which eliminated ctf_update in favour of
the internal-only ctf_serialize function, all the type-lookup paths
grew an extra branch to handle dynamic types.

We can eliminate this branch again by dropping the dtd_u stuff and
simply writing out the vlen in (close to) its final form at ctf_add_*
time: type lookup for types using this approach is then identical for
types in writable dicts and types that are in read-only ones, and
serialization is also simplified (we just need to write out the vlen
we already created).

The only complexity lies in type kinds for which multiple
vlen representations are valid depending on properties of the type,
e.g. structures.  But we can start simple, adjusting ints, floats,
and slices to work this way, and leaving everything else as is.

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-impl.h (ctf_dtdef_t) <dtd_u.dtu_enc>: Remove.
<dtd_u.dtu_slice>: Likewise.
<dtd_vlen>: New.
* ctf-create.c (ctf_add_generic): Perhaps allocate it.  All
callers adjusted.
(ctf_dtd_delete): Free it.
(ctf_add_slice): Use the dtd_vlen, not dtu_enc.
(ctf_add_encoded): Likewise.  Assert that this must be an int or
float.
* ctf-serialize.c (ctf_emit_type_sect): Just copy the dtd_vlen.
* ctf-dedup.c (ctf_dedup_rhash_type): Use the dtd_vlen, not
dtu_slice.
* ctf-types.c (ctf_type_reference): Likewise.
(ctf_type_encoding): Remove most dynamic-type-specific code: just
get the vlen from the right place.  Report failure to look up the
underlying type's encoding.

3 years agolibctf: fix GNU style for do {} while
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: fix GNU style for do {} while

It's formatted like this:

do
  {
    ...
  }
while (...);

Not like this:

do
 {
    ...
  } while (...);

or this:

do {
  ...
} while (...);

We used both in various places in libctf.  Fixing it necessitated some
light reindentation.

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-archive.c (ctf_archive_next): GNU style fix for do {} while.
* ctf-dedup.c (ctf_dedup_rhash_type): Likewise.
(ctf_dedup_rwalk_one_output_mapping): Likewise.
* ctf-dump.c (ctf_dump_format_type): Likewise.
* ctf-lookup.c (ctf_symbol_next): Likewise.
* swap.h (swap_thing): Likewise.

3 years agolibctf: split up ctf_serialize
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: split up ctf_serialize

ctf_serialize and its various pieces may be split out into a separate
file now, but ctf_serialize is still far too long and disordered, mixing
header initialization, sizing of multiple CTF sections, sorting and
emission of multiple CTF sections, strtab construction and ctf_dict_t
copying into a single ugly organically-grown mess.

Fix the worst of this by migrating all section sizing and emission into
separate functions, two per section (or class of section in the case of
the symtypetabs).  Only the variable section is now sized and emitted
directly in ctf_serialize (because it only takes about three lines to do
so).

The section sizes themselves are still maintained by ctf_serialize so
that it can work out the header offsets, but ctf_symtypetab_sect_sizes
and ctf_emit_symtypetab_sects share a lot of extra state: migrate that
into a shared structure, emit_symtypetab_state_t.

(Test results unchanged.)

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-serialize.c: General reshuffling, and...
(emit_symtypetab_state_t): New, migrated from
local variables in ctf_serialize.
(ctf_serialize): Split out most section sizing and
emission.
(ctf_symtypetab_sect_sizes): New (split out).
(ctf_emit_symtypetab_sects): Likewise.
(ctf_type_sect_size): Likewise.
(ctf_emit_type_sect): Likewise.

3 years agolibctf: fix comment above ctf_dict_t
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: fix comment above ctf_dict_t

It is perfectly possible to have dynamically allocated data owned by a
specific dict: you just have to teach ctf_serialize about it.

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-impl.h (ctf_dict_t): Fix comment.

3 years agolibctf: split serialization and file writeout into its own file
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: split serialization and file writeout into its own file

The code to serialize CTF dicts just gets bigger and bigger as the
dictionary's complexity grows: adding symtypetabs almost doubled it on
its own.  It's long past time to split this out into its own source
file, accompanied by the functions that do the actual writeout.

This leaves ctf-create.c populated exclusively by functions related to
actual writable dict creation (ctf_add_*, ctf_create etc), and leaves
both files a much more reasonable size.

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-create.c (symtypetab_delete_nonstatic_vars): Move
into ctf-serialize.c.
(ctf_symtab_skippable): Likewise.
(CTF_SYMTYPETAB_EMIT_FUNCTION): Likewise.
(CTF_SYMTYPETAB_EMIT_PAD): Likewise.
(CTF_SYMTYPETAB_FORCE_INDEXED): Likewise.
(symtypetab_density): Likewise.
(emit_symtypetab): Likewise.
(emit_symtypetab_index): Likewise.
(ctf_copy_smembers): Likewise.
(ctf_copy_lmembers): Likewise.
(ctf_copy_emembers): Likewise.
(ctf_sort_var): Likewise.
(ctf_serialize): Likewise.
(ctf_gzwrite): Likewise.
(ctf_compress_write): Likewise.
(ctf_write_mem): Likewise.
(ctf_write): Likewise.
* ctf-serialize.c: New file.
* Makefile.am (libctf_nobfd_la_SOURCES): Add it.
* Makefile.in: Regenerate.

3 years agolibctf: fix some tabdamage and move some code around
Nick Alcock [Thu, 18 Mar 2021 12:37:52 +0000 (12:37 +0000)]
libctf: fix some tabdamage and move some code around

ctf-link.c is unnecessarily confusing because ctf_link_lazy_open is
positioned near functions that have nothing to do with opening files.

Move it around, and fix some tabdamage that's crept in lately.

libctf/ChangeLog
2021-03-18  Nick Alcock  <nick.alcock@oracle.com>

* ctf-link.c (ctf_link_lazy_open): Move up in the file, to near
ctf_link_add_ctf.
* ctf-lookup.c (ctf_lookup_symbol_idx): Repair tabdamage.
(ctf_lookup_by_sym_or_name): Likewise.
* testsuite/libctf-lookup/struct-iteration.c: Likewise.
* testsuite/libctf-regression/type-add-unnamed-struct.c: Likewise.

3 years agoAutomatic date update in version.in
GDB Administrator [Thu, 18 Mar 2021 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agogdb: remove unneeded argument in check_multi_target_resumption
Simon Marchi [Wed, 13 Jan 2021 04:42:12 +0000 (23:42 -0500)]
gdb: remove unneeded argument in check_multi_target_resumption

If we reach the modified line, resume_target is necessarily nullptr,
because of the check at the beginning of the function.  So we'll
necessarily iterate on all non-exited inferiors (across all targets),
which is what we want.  So just remove the unnecessary argument.

gdb/ChangeLog:

* infrun.c (check_multi_target_resumption): Remove argument to
all_non_exited_inferiors.

Change-Id: If95704915dca19599d5f7f4732bbd6ccd20bf6b4

3 years agogdb/testsuite: add test for run/attach while program is running
Simon Marchi [Mon, 25 Jan 2021 04:57:28 +0000 (23:57 -0500)]
gdb/testsuite: add test for run/attach while program is running

A WIP patch series broke the use case of doing "run" or "attach" while
the program is running, but it wasn't caught by the testsuite, which
means it's not covered.  Add a test for that.

gdb/testsuite/ChangeLog:

* gdb.base/run-attach-while-running.exp: New.
* gdb.base/run-attach-while-running.c: New.

Change-Id: I77f098ec0b28dc2d4575ea80e941f6a75273e431

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

3 years agoRetain .debug_addr sections loaded in the main file.
Nick Clifton [Tue, 16 Mar 2021 18:01:58 +0000 (18:01 +0000)]
Retain .debug_addr sections loaded in the main file.

PR 27534
* readelf.c (display_debug_section): Also retain .debug_addr
sections.

3 years agoRe-enable the dislay of debug sections in separate debuginfo files without the need...
Nick Clifton [Tue, 16 Mar 2021 16:39:46 +0000 (16:39 +0000)]
Re-enable the dislay of debug sections in separate debuginfo files without the need for -P.

PR 27533
* readelf.c (process_section_contents): Only dump debug
information for separate files unless process_links is enabled.
(process_object): Always call process_section_contents for
separate info files.

3 years agoFix cygwin build error
Christian Biesinger [Mon, 15 Mar 2021 13:31:43 +0000 (08:31 -0500)]
Fix cygwin build error

With "gcc version 10.2.0 (GCC)" on cygwin, I get this build error:
  CXX    windows-nat.o
In file included from ../../gdb/../gdbsupport/common-defs.h:129,
                 from ../../gdb/defs.h:28,
                 from ../../gdb/windows-nat.c:24:
../../gdb/windows-nat.c: In function 'void windows_init_thread_list()':
../../gdb/windows-nat.c:513:17: error: zero-length gnu_printf format string [-Werror=format-zero-length]
  513 |   DEBUG_EVENTS ("");
      |                 ^~
../../gdb/../gdbsupport/common-debug.h:65:43: note: in definition of macro 'debug_prefixed_printf_cond'
   65 |  debug_prefixed_printf (module, __func__, fmt, ##__VA_ARGS__); \
      |                                           ^~~
../../gdb/windows-nat.c:513:3: note: in expansion of macro 'DEBUG_EVENTS'
  513 |   DEBUG_EVENTS ("");
      |   ^~~~~~~~~~~~
cc1plus: all warnings being treated as errors

This was introduced in 4ef367bffd73d50002339deba40983530ccb9d15, which removed
the function name from this debug message:
-  DEBUG_EVENTS (("gdb: windows_init_thread_list\n"));
+  DEBUG_EVENTS ("");

DEBUG_EVENTS now always includes the function name, so just add a "called"
message to fix the compile error.

gdb/ChangeLog:

2021-03-16  Christian Biesinger  <cbiesinger@google.com>

* windows-nat.c (windows_init_thread_list): Add message to
debug log.

3 years agoFix potentially undefined behaviour use of strcpcy.
Nick Clifton [Tue, 16 Mar 2021 14:02:38 +0000 (14:02 +0000)]
Fix potentially undefined behaviour use of strcpcy.

* pe-dll.c (pe_find_cdecl_alias_match): Use memmove to overwrite
lname string.

3 years agoFix a potential buffer overrun qwhen writing out PE aux entries.
Nick Clifton [Tue, 16 Mar 2021 12:44:50 +0000 (12:44 +0000)]
Fix a potential buffer overrun qwhen writing out PE aux entries.

* peXXigen.c (_bfd_XXi_swap_aux_out): Avoid potential buffer
overrun by using sizeof of the destination x_fname field as the
limit for a memcpy.

* coff/internal.h (struct internal_auxent): Fix a couple of typos
in comment describing the x_fname field.

3 years agogdb/python: fix FrameDecorator regression on Python 2
Andrew Burgess [Mon, 15 Mar 2021 14:20:13 +0000 (14:20 +0000)]
gdb/python: fix FrameDecorator regression on Python 2

This commit:

  commit d1cab9876d72d867b2de82688f5f5a2a4b655edb
  Date:   Tue Sep 15 11:08:56 2020 -0600

      Don't use gdb_py_long_from_ulongest

Introduced a regression when GDB is compiled with Python 2.  The frame
filter API expects the gdb.FrameDecorator.function () method to return
either a string (the name of a function) or an address, which GDB then
uses to lookup a msymbol.

If the address returned from gdb.FrameDecorator.function () comes from
gdb.Frame.pc () then before the above commit we would always expect to
see a PyLong object.

After the above commit we might (on Python 2) get a PyInt object.

The GDB code does not expect to see a PyInt, and only checks for a
PyLong, we then see an error message like:

  RuntimeError: FrameDecorator.function: expecting a String, integer or None.

This commit just adds an additional call to PyInt_Check which handle
the missing case.

I had already written a test case to cover this issue before spotting
that the gdb.python/py-framefilter.exp test also triggers this
failure.  As the new test case is slightly different I have kept it
in.

The new test forces the behaviour of gdb.FrameDecorator.function
returning an address.  The reason the existing test case hits this is
due to the behaviour of the builtin gdb.FrameDecorator base class.  If
the base class behaviour ever changed then the return an address case
would only be tested by the new test case.

gdb/ChangeLog:

* python/py-framefilter.c (py_print_frame): Use PyInt_Check as
well as PyLong_Check for Python 2.

gdb/testsuite/ChangeLog:

* gdb.python/py-framefilter-addr.c: New file.
* gdb.python/py-framefilter-addr.exp: New file.
* gdb.python/py-framefilter-addr.py: New file.

3 years agogdb/testsuite: squash duplicate test names in gdb.threads/*.exp
Andrew Burgess [Mon, 15 Mar 2021 10:44:07 +0000 (10:44 +0000)]
gdb/testsuite: squash duplicate test names in gdb.threads/*.exp

Resolve all of the duplicate test names in the gdb.threads/*.exp set
of tests (that I see).  Nothing very exciting here, mostly either
giving tests explicit testnames, or adding with_test_prefix.

The only interesting one is gdb.threads/execl.exp, I believe the
duplicate test name was caused by an actual duplicate test.  I've
remove the simpler form of the test.  I don't believe we've lost any
test coverage with this change.

gdb/testsuite/ChangeLog:

* gdb.threads/execl.exp: Remove duplicate 'info threads' test.
Make use of $gdb_test_name instead of creating a separate $test
variable.
* gdb.threads/print-threads.exp: Add a with_test_prefix instead of
adding a '($name)' at the end of each test.  This also catches the
one place where '($name)' was missing, and so caused a duplicate
test name.
* gdb.threads/queue-signal.exp: Give tests unique names to avoid
duplicate test names based on the command being tested.
* gdb.threads/signal-command-multiple-signals-pending.exp:
Likewise.
* lib/gdb.exp (gdb_compile_shlib_pthreads): Tweak test name to
avoid duplicate testnames when a test script uses this proc and
also gdb_compile_pthreads.
* lib/prelink-support.exp (build_executable_own_libs): Use
with_test_prefix to avoid duplicate test names when we call
build_executable twice.

3 years agoRISC-V : Support bitmanip-0.93 ZBA/ZBB/ZBC instructions
Kuan-Lin Chen [Wed, 24 Feb 2021 05:26:29 +0000 (13:26 +0800)]
RISC-V : Support bitmanip-0.93 ZBA/ZBB/ZBC instructions

bfd/
* elfxx-riscv.c (riscv_std_z_ext_strtab): Add zba, zbb and zbc.

gas/
* config/tc-riscv.c (ext_version_table): Add b, zba, zbb and zbc.
(riscv_multi_subset_supports): Add INSN_CLASS_ZB*.
* testsuite/gas/riscv/b-ext-64.s: Bitmanip test case.
* testsuite/gas/riscv/b-ext-64.d: Likewise.
* testsuite/gas/riscv/b-ext.s: Likewise.
* testsuite/gas/riscv/b-ext.d: Likewise.

include/
* opcode/riscv-opc.h: Support zba, zbb and zbc extensions.
* opcode/riscv.h (riscv_insn_class): Add INSN_CLASS_ZB*.

opcodes/
* riscv-opc.c (riscv_opcodes): Add zba, zbb and zbc instructions.

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

3 years agoFix GDB build with GCC 4.8.2
Tom Tromey [Mon, 15 Mar 2021 14:59:17 +0000 (08:59 -0600)]
Fix GDB build with GCC 4.8.2

PR build/27579 points out that the expression rewrite series
introduced a build failure with GCC 4.8.2.  The bug is that there's no
std::hash specialization for enum exp_opcode.  This patch fixes the
problem by using gdb::hash_enum.

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

PR build/27579:
* rust-exp.y (maker_map): Use gdb::hash_enum.
* stap-probe.c (stap_maker_map): Use gdb::hash_enum.

3 years agogdb: remove spurious colon in create_debug_type_hash_table debug print
Simon Marchi [Mon, 15 Mar 2021 17:27:03 +0000 (13:27 -0400)]
gdb: remove spurious colon in create_debug_type_hash_table debug print

This printout in create_debug_type_hash_table has an unexpected colon at
the end, remove it:

    [dwarf-read] create_debug_type_hash_table: Reading .debug_info for /home/simark/build/binutils-gdb/gdb/a.out:

gdb/ChangeLog:

* dwarf2/read.c (create_debug_type_hash_table): Remove colon at
end of debug print.

Change-Id: I2d707248249daf4d8b6fa8e7064acdc56c90f2dd

3 years agogdb: add logging to dwarf2_initialize_objfile
Simon Marchi [Thu, 11 Mar 2021 03:20:39 +0000 (22:20 -0500)]
gdb: add logging to dwarf2_initialize_objfile

I added these printouts while working on 27541.  I won't have a fix for
that right now, but I thought that it would be useful to merge them
upstream, as they help understand what happens in that function.

gdb/ChangeLog:

* dwarf2/read.c (dwarf2_initialize_objfile): Add debug prints.

Change-Id: I790c0d53383327038cb5dd705f74c8c978e0a7ec

3 years agogdb: remove dw2_get_file_names_reader's info_ptr parameter
Simon Marchi [Mon, 15 Mar 2021 17:22:27 +0000 (13:22 -0400)]
gdb: remove dw2_get_file_names_reader's info_ptr parameter

I noticed that this parameter was unused, remove it.

gdb/ChangeLog:

* dwarf2/read.c (dw2_get_file_names_reader): Remove info_ptr
parameter, adjust caller.

Change-Id: I2a741766a0c658c22c512590aeffdd07391c869c

3 years agoFix unary + in Ada
Tom Tromey [Mon, 15 Mar 2021 14:20:24 +0000 (08:20 -0600)]
Fix unary + in Ada

My previous Ada patches introduced a bug that I found after checkin.
I had incorrectly implemented unary +.  There was a test for the
overloaded case, but no test for the ordinary case.

This patch adds the tests and fixes the bug.
Tested on x86-64 Fedora 32.

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

* ada-exp.y (simple_exp): Always push a result for unary '+'.

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

* gdb.ada/fixed_points.exp: Add tests of unary + and -.

3 years agoCall ada_ensure_varsize_limit in indirection
Tom Tromey [Mon, 15 Mar 2021 12:23:12 +0000 (06:23 -0600)]
Call ada_ensure_varsize_limit in indirection

Internal testing revealed yet another Ada regression from the
expression rewrite.  In this case, indirection did not use the Ada
varsize limit.  The old code relied on the expression resolution
process to evaluate this subexpression with EVAL_AVOID_SIDE_EFFECTS in
order to get this error.  However, this isn't always done in the new
approach; so this patch introduces another call to
ada_ensure_varsize_limit in the appropriate spot.

As with the earlier patches, this path was not tested in-tree, so this
patch also updates a test.

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

* ada-lang.c (ada_unop_ind_operation::evaluate): Call
ada_ensure_varsize_limit.

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

* gdb.ada/varsize_limit.exp: Add new test.
* gdb.ada/varsize_limit/vsizelim.adb: Update.

3 years agoImplement Ada operator overloading
Tom Tromey [Mon, 15 Mar 2021 12:23:12 +0000 (06:23 -0600)]
Implement Ada operator overloading

In the expression rewrite, I neglected to carry over support for Ada
operator overloading.  It turns out that there were no tests for this
in-tree.

This patch adds support for operator overloading, and adds the missing
test.

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

* ada-lang.c (numeric_type_p, integer_type_p): Return true for
fixed-point.
* ada-exp.y (maybe_overload): New function.
(ada_wrap_overload): New function.
(ada_un_wrap2, ada_wrap2, ada_wrap_op): Use maybe_overload.
(exp1, simple_exp, relation, and_exp, and_then_exp, or_exp)
(or_else_exp, xor_exp, primary): Update.

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

* gdb.ada/operator_call/twovecs.ads: New file.
* gdb.ada/operator_call/twovecs.adb: New file.
* gdb.ada/operator_call/opcall.adb: New file.
* gdb.ada/operator_call.exp: New file.

3 years agoFix regression in Ada ptype
Tom Tromey [Mon, 15 Mar 2021 12:23:12 +0000 (06:23 -0600)]
Fix regression in Ada ptype

This fixes PR ada/27545, which points out that a test in
gdb.ada/tagged.exp started failing due to the expression rewrite.  I
didn't notice this failure because my system gcc-gnat debuginfo was
out of date, and so the test was already failing in the baseline.

Previously, the OP_VAR_VALUE case in ada_evaluate_subexp ended up
doing a recursive call:

    arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL);

However, during the rewrite I missed this fact and had the new code
call the superclass implementation.

This patch fixes the bug by changing this code to use a recursive call
instead.

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

PR ada/27545:
* ada-lang.c (ada_var_value_operation::evaluate): Use recursive
call for tagged type.

3 years agoFix Ada assignment resolution
Tom Tromey [Mon, 15 Mar 2021 12:23:12 +0000 (06:23 -0600)]
Fix Ada assignment resolution

The expression rewrite missed an Ada resolution case.  GDB previously
knew how to disambiguate the right hand side of an assignment, but now
it does not.

This patch fixes the problem and adds the missing test case.

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

* ada-exp.y (exp1): Handle resolution of the right hand side of an
assignment.

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

* gdb.ada/enums_overload/enums_overload_main.adb: New file.
* gdb.ada/enums_overload/enums_overload.ads: New file.
* gdb.ada/enums_overload/enums_overload.adb: New file.
* gdb.ada/enums_overload.exp: New file.

3 years agoFix bug in Ada aggregate assignment
Tom Tromey [Mon, 15 Mar 2021 12:23:12 +0000 (06:23 -0600)]
Fix bug in Ada aggregate assignment

The expression rewrite caused a regression in the internal AdaCore
test suite.  The bug was that I had dropped a bit of code from
aggregate assignment -- assign_aggregate used to return the container,
which I thought was redundant, but which can actually change during
the call.  There was no test for this case in the tree, so I've added
one.

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

* ada-lang.c (ada_aggregate_operation::assign_aggregate): Return
container.
(ada_assign_operation::evaluate): Update.
* ada-exp.h (class ada_aggregate_operation) <assign_aggregate>:
Change return type.

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

* gdb.ada/assign_arr/target_wrapper.ads (IArray, Put, Do_Nothing):
Declare.
* gdb.ada/assign_arr/target_wrapper.adb: New file.
* gdb.ada/assign_arr/main_p324_051.adb (IValue): New variable.
Call Put.
* gdb.ada/assign_arr.exp: Update.

3 years agoAdd a symbols-only mode to nm.
Nick Clifton [Mon, 15 Mar 2021 10:55:49 +0000 (10:55 +0000)]
Add a symbols-only mode to nm.

PR 27487
* nm.c (FORMAT_JUST_SYMBOLS): Define.
(struct optput_fns): Add entry for FORMAT_JUST_SYMBOLS.
(long_options): Add just-symbols.
(set_output_format): Add support for just-symbols.
(get_print_format): Likewise.
(do_not_print_object_filename): New function.
(do_not_print_archive_filename): New function.
(do_not_print_archive_member): New function.
(do_not_print_symbol_filename): New function.
(just_print_symbol_name): New function.
(main): Handle --just-symbols.
* NEWS: Mention the new feature.
* doc/binutils.texi: Document the new feature.

3 years agogdb/fortran: Fix quad floating-point type for Intel compilers.
Felix Willgerodt [Mon, 15 Mar 2021 10:00:28 +0000 (11:00 +0100)]
gdb/fortran: Fix quad floating-point type for Intel compilers.

Intel Fortran compilers emit the following DWARF for gdb.fortran/complex.f90:

0x00000071:   DW_TAG_base_type
                DW_AT_name ("COMPLEX*32")
                DW_AT_encoding (DW_ATE_complex_float)
                DW_AT_byte_size (0x20)

0x00000078:   DW_TAG_base_type
                DW_AT_name ("REAL*16")
                DW_AT_encoding (DW_ATE_float)
                DW_AT_byte_size (0x10)

This results in GDB not reading the right values, as it wrongly assumes the
default floatformat "floatformat_i387_ext" instead of
"floatformat_ia64_quad_little".

gdb/ChangeLog:
2021-03-15  Felix Willgerodt  <felix.willgerodt@intel.com>

* i386-tdep.c (i386_floatformat_for_type): Add COMPLEX*32 and REAL*16.

3 years agold: don't chance overrunning PE .reloc section content
Jan Beulich [Mon, 15 Mar 2021 10:00:44 +0000 (11:00 +0100)]
ld: don't chance overrunning PE .reloc section content

The allocation of reloc_d doesn't take reloc_s->size into account. There
is already padding being emitted up to the allocated size. While
reloc_s->size ought to still be zero at this point anyway (and hence the
code being deleted would have been just dead), don't risk writing past
the actual allocation.

3 years agogdb: use make_scoped_restore to restore gdbpy_current_objfile
Andrew Burgess [Fri, 12 Mar 2021 11:07:19 +0000 (11:07 +0000)]
gdb: use make_scoped_restore to restore gdbpy_current_objfile

The current mechanism by which the Python gdb.current_objfile is
maintained does not allow for nested auto-load events.  It is assumed
that once an auto-load script has finished loading then the current
objfile should be set back to NULL.  In a nested situation, we should
be restoring the previous value.

We already have an RAII class to handle save/restore type behaviour,
so lets just switch to use that.

The test is a little contrived, but is simple enough, and triggers the
bug.  The real use case might involve the auto-load script calling
functions (either in the just-loaded object file, or in the main
executable), which in turn trigger further auto-loads to occur.

gdb/ChangeLog:

* python/python.c (gdbpy_source_objfile_script): Use
make_scoped_restore to restore gdbpy_current_objfile.
(gdbpy_execute_objfile_script): Likewise.

gdb/testsuite/ChangeLog:

* gdb.python/py-auto-load-chaining-f1.c: New file.
* gdb.python/py-auto-load-chaining-f1.o-gdb.py: New file.
* gdb.python/py-auto-load-chaining-f2.c: New file.
* gdb.python/py-auto-load-chaining-f2.o-gdb.py: New file.
* gdb.python/py-auto-load-chaining.c: New file.
* gdb.python/py-auto-load-chaining.exp: New file.

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

3 years agoUse cu_header consistently in read_attribute_value
Tom Tromey [Sun, 14 Mar 2021 17:59:37 +0000 (11:59 -0600)]
Use cu_header consistently in read_attribute_value

read_attribute_value has a local cu_header variable, but then some
spots in the function use cu->header instead.  It seems better to me
to prefer the local everywhere, so this patch makes this change.

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

* dwarf2/read.c (read_attribute_value): Use cu_header
consistently.

3 years agoMinor tweak to use die_reader_specs::abfd
Tom Tromey [Sun, 14 Mar 2021 17:42:05 +0000 (11:42 -0600)]
Minor tweak to use die_reader_specs::abfd

For an experiment I'm working on, it would be convenient if
die_reader_specs::cu could be NULL.  This is fairly involved to
implement, but I did notice one spot that could conveniently be
updated.  While making this trivial change, I also noticed a small,
related formatting error.

2021-03-14  Tom Tromey  <tom@tromey.com>

* dwarf2/read.c (struct die_reader_specs) <abfd>: Fix formatting.
(peek_die_abbrev): Use reader.abfd.

3 years agoSet dwarf2_per_cu_data::m_header_read_in
Tom Tromey [Sun, 14 Mar 2021 17:41:46 +0000 (11:41 -0600)]
Set dwarf2_per_cu_data::m_header_read_in

I noticed that nothing in dwarf2/read.c sets
dwarf2_per_cu_data::m_header_read_in.  This patch adds the appropriate
assignment.

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

* dwarf2/read.c (dwarf2_per_cu_data::get_header): Set
m_header_read_in.

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

3 years agoConstify abbrev_table::lookup_abbrev
Tom Tromey [Sat, 13 Mar 2021 16:41:04 +0000 (09:41 -0700)]
Constify abbrev_table::lookup_abbrev

This changes abbrev_table::lookup_abbrev to return a pointer to const,
then fixes up the affected code.

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

* dwarf2/read.c (struct partial_die_info): Update.
(peek_die_abbrev, skip_children, skip_one_die, read_full_die_1)
(load_partial_dies, partial_die_info::partial_die_info): Update.
* dwarf2/abbrev.h (lookup_abbrev): Constify.

3 years agoRemove Irix 6 workaround from DWARF abbrev reader
Tom Tromey [Sat, 13 Mar 2021 16:41:04 +0000 (09:41 -0700)]
Remove Irix 6 workaround from DWARF abbrev reader

abbrev_table::read has a workaround for Irix 6.  The last release of
Irix was in 2006, and (according to Wikipedia) hardware produced after
2007 cannot run Irix.  I think this workaround can safely be retired.

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

* dwarf2/abbrev.c (abbrev_table::read): Remove Irix 6 workaround.

3 years agosim: rename BUILD_LDFLAGS to LDFLAGS_FOR_BUILD
Mike Frysinger [Mon, 8 Mar 2021 05:35:03 +0000 (00:35 -0500)]
sim: rename BUILD_LDFLAGS to LDFLAGS_FOR_BUILD

The rest of the binutils tree renamed this variable many years ago.

3 years agosim: introduce {COMPILE,LINK}_FOR_BUILD
Mike Frysinger [Mon, 8 Mar 2021 06:41:35 +0000 (01:41 -0500)]
sim: introduce {COMPILE,LINK}_FOR_BUILD

These use the same pattern as seen in the opcodes/ dir and in automake
in general (ish).  This helps simplify the boilerplate for building and
linking build-time code, and fixes some inconsistency in flag usage.

For rules that were compiling+linking in a single step, split them into
separate steps so we can apply the correct set of options.  This matches
automake behavior too.

3 years agosim: drop dep on configure-gdb
Mike Frysinger [Sun, 28 Feb 2021 06:43:21 +0000 (01:43 -0500)]
sim: drop dep on configure-gdb

I'm not entirely sure why this is here since the sim doesn't use
anything from the gdb/ dir directly, and the commit that added it
included a bunch more changes and doesn't seem to call out this
dep specifically.

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

3 years agoUse RAII to set the per-thread SIGSEGV handler
Christian Biesinger [Tue, 9 Mar 2021 14:16:23 +0000 (08:16 -0600)]
Use RAII to set the per-thread SIGSEGV handler

This avoids using a thread-local extern variable, which causes link errors
on some platforms, notably Cygwin.  But I think this is a better pattern
even outside of working around linker bugs because it encapsulates direct
access to the variable inside the class, instead of having a global extern
variable.

The cygwin link error is:
cp-support.o: in function `gdb_demangle(char const*, int)':
/home/Christian/binutils-gdb/obj/gdb/../../gdb/cp-support.c:1619:(.text+0x6472): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `TLS init function for thread_local_segv_handler'
/home/Christian/binutils-gdb/obj/gdb/../../gdb/cp-support.c:1619:(.text+0x648b): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `TLS init function for thread_local_segv_handler'
collect2: error: ld returned 1 exit status

2021-03-12  Christian Biesinger  <cbiesinger@google.com>

PR threads/27239
* cp-support.c: Use scoped_segv_handler_restore.
* event-top.c (thread_local_segv_handler): Made static.
(scoped_segv_handler_restore::scoped_segv_handler_restore):
New function.
(scoped_segv_handler_restore::~scoped_segv_handler_restore): New
function.
* event-top.h (class scoped_segv_handler_restore): New class.
(thread_local_segv_handler): Removed.

3 years agoAdd values for NetBSD .note.netbsd.ident notes (PaX).
Frederic Cambus [Fri, 12 Mar 2021 14:37:51 +0000 (14:37 +0000)]
Add values for NetBSD .note.netbsd.ident notes (PaX).

 * elf/common.h (NT_NETBSD_PAX, NT_NETBSD_PAX_MPROTECT)
 (NT_NETBSD_PAX_NOMPROTECT, NT_NETBSD_PAX_GUARD, NT_NETBSD_PAX_NOGUARD)
 (NT_NETBSD_PAX_ASLR, NT_NETBSD_PAX_NOASLR): Define.

3 years agoaarch64: Add few missing system registers
Przemyslaw Wirkus [Fri, 12 Mar 2021 14:18:59 +0000 (14:18 +0000)]
aarch64: Add few missing system registers

This patch adds few missing system registers to GAS: LORC_EL1,
LOREA_EL1, LORN_EL1, LORSA_EL1, ICC_CTLR_EL3, ICC_SRE_ELX, ICH_VTR_EL2.

gas/ChangeLog:

2021-03-02  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>

* testsuite/gas/aarch64/illegal-sysreg-7.d: New test.
* testsuite/gas/aarch64/illegal-sysreg-7.l: New test.
* testsuite/gas/aarch64/illegal-sysreg-7.s: New test.
* testsuite/gas/aarch64/sysreg-7.d: New test.
* testsuite/gas/aarch64/sysreg-7.s: New test.

opcodes/ChangeLog:

2021-03-02  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>

* aarch64-opc.c: Add lorc_el1, lorea_el1, lorn_el1, lorsa_el1,
icc_ctlr_el3, icc_sre_elx, ich_vtr_el2 system registers.

3 years agoriscv --enable-targets=all on 32-bit host
Alan Modra [Fri, 12 Mar 2021 11:47:39 +0000 (22:17 +1030)]
riscv --enable-targets=all on 32-bit host

Attempting to build --enable-targets=all on a 32-bit host results in a
number of errors like the following.

eelf32lriscv.o: in function `gldelf32lriscv_after_allocation':
eelf32lriscv.c:98: undefined reference to `bfd_elf32_riscv_restart_relax_sections'

That's due to needing --enable-64-bit-bfd to get the riscv BFD support
built.

* Makefile.am (ALL_EMULATION_SOURCES): Move riscv files to..
(ALL_64_EMULATION_SOURCES): ..here.
* Makefile.in: Regenerate.

3 years agogdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp
Andrew Burgess [Mon, 8 Mar 2021 18:34:08 +0000 (18:34 +0000)]
gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp

This commit resolves the remaining duplicate test names in the
gdb.python/ directory, there's 1 duplicate per test script.  In each
case I have just extended some test names to make them more
descriptive.

gdb/testsuite/ChangeLog:

* gdb.python/py-bad-printers.exp: Extend test names to make them
unique.
* gdb.python/py-events.exp: Likewise.
* gdb.python/py-finish-breakpoint2.exp: Likewise.
* gdb.python/py-frame-inline.exp: Likewise.
* gdb.python/py-frame.exp: Likewise.
* gdb.python/py-infthread.exp: Likewise.

3 years agogdb/testsuite: remove duplicate test from gdb.python/py-value-cc.exp
Andrew Burgess [Mon, 8 Mar 2021 18:31:06 +0000 (18:31 +0000)]
gdb/testsuite: remove duplicate test from gdb.python/py-value-cc.exp

While squashing duplicate test names I spotted an actual duplicate
test, I suspect a copy & paste error in an earlier patch.  I can see
no reason why we should need to duplicate this test, so I'm removing
one copy of it.

gdb/testsuite/ChangeLog:

* gdb.python/py-value-cc.exp: Remove a duplicate test.

3 years agogdb/testsuite: check the correct Python variable in test
Andrew Burgess [Mon, 8 Mar 2021 18:11:10 +0000 (18:11 +0000)]
gdb/testsuite: check the correct Python variable in test

While squashing duplicate test names I spotted what looked like a copy
& paste error.  During this test a Python variable is created, and
then we call the type method on that variable.  In one case we create
a variable and then call the type method on a variable created for a
previous test.  I can see no reason why this should be what we want,
it doesn't line up with the comments in the test script, so I've
updated the test.  Note, the expected result doesn't change, just the
command issued (the test relates to stripping typedefs).

gdb/testsuite/ChangeLog:

* gdb.python/lib-types.exp: Update the test to check the correct
python variable.

3 years agogdb/testsuite: make test names unique in gdb.python/py-explore-cc.exp
Andrew Burgess [Mon, 8 Mar 2021 18:08:36 +0000 (18:08 +0000)]
gdb/testsuite: make test names unique in gdb.python/py-explore-cc.exp

Add additional text to some test names to make them unique.  In one
case, correct the test name (copy & paste error) to make it correctly
reflect what the test is doing.

gdb/testsuite/ChangeLog:

* gdb.python/py-explore-cc.exp: Extend test names to make them
unique.

3 years agogdb/testsuite: remove a duplicate test
Andrew Burgess [Mon, 8 Mar 2021 18:04:41 +0000 (18:04 +0000)]
gdb/testsuite: remove a duplicate test

I spotted a duplicate test name in this test script.  Turns out it's
an actual duplicate test.  Delete one copy of this test.

gdb/testsuite/ChangeLog:

* gdb.python/py-lookup-type.exp: Remove duplicate test.

3 years agogdb/testsuite: make test names unique in gdb.python/py-symtab.exp
Andrew Burgess [Mon, 8 Mar 2021 18:03:13 +0000 (18:03 +0000)]
gdb/testsuite: make test names unique in gdb.python/py-symtab.exp

Extend the names of some tests to make them unique.

gdb/testsuite/ChangeLog:

* gdb.python/py-symtab.exp: Extend test names to make them
unique.

3 years agogdb/testsuite: make test names unique in gdb.python/py-prompt.exp
Andrew Burgess [Mon, 8 Mar 2021 18:01:21 +0000 (18:01 +0000)]
gdb/testsuite: make test names unique in gdb.python/py-prompt.exp

Use with_test_prefix to make test names unique.

gdb/testsuite/ChangeLog:

* gdb.python/py-prompt.exp: Add with_test_prefix to make test
names unique.

3 years agogdb/testsuite: make test names unique in gdb.python/py-block.exp
Andrew Burgess [Mon, 8 Mar 2021 17:53:41 +0000 (17:53 +0000)]
gdb/testsuite: make test names unique in gdb.python/py-block.exp

Extend some test names to make them unique.

gdb/testsuite/ChangeLog:

* gdb.python/py-block.exp: Give tests unique names.

3 years agogdb/testsuite: make test names unique in gdb.python/py-pp-maint.exp
Andrew Burgess [Mon, 8 Mar 2021 17:51:42 +0000 (17:51 +0000)]
gdb/testsuite: make test names unique in gdb.python/py-pp-maint.exp

Extend the test names with additional text to make them unique.

gdb/testsuite/ChangeLog:

* gdb.python/py-pp-maint.exp: Extend test names to make them
unique.

3 years agogdb/testsuite: make test names unique in gdb.python/py-explore.exp
Andrew Burgess [Mon, 8 Mar 2021 17:14:36 +0000 (17:14 +0000)]
gdb/testsuite: make test names unique in gdb.python/py-explore.exp

Add a with_test_prefix to make test names unique.

gdb/testsuite/ChangeLog:

* gdb.python/py-explore.exp: Add with_test_prefix to make test
names unique.

3 years agogdb/testsuite: make test names unique in gdb.python/py-finish-breakpoint.exp
Andrew Burgess [Mon, 8 Mar 2021 17:02:16 +0000 (17:02 +0000)]
gdb/testsuite: make test names unique in gdb.python/py-finish-breakpoint.exp

Make test names unique by just adding additional text to the test
names.  As this is a Python test that repeatedly imports the Python
script I've just numbered the test names in this case rather than
trying to come up with anything better, hence we have:

  import python scripts, 1
  import python scripts, 2
  ...
  import python scripts, 6

Not great, but hopefully good enough.  Everything else has a slightly
more descriptive test name.

gdb/testsuite/ChangeLog:

* gdb.python/py-finish-breakpoint.exp: Make test names unique.

3 years agogdb/testsuite: make test names unique in gdb.python/py-strfns.exp
Andrew Burgess [Mon, 8 Mar 2021 16:55:28 +0000 (16:55 +0000)]
gdb/testsuite: make test names unique in gdb.python/py-strfns.exp

Wrap some code in `with_test_prefix` to make test names unique.

gdb/testsuite/ChangeLog:

* gdb.python/py-strfns.exp: Use with_test_prefix to make test
names unique.

3 years agogdb/testsuite: make test names unique in gdb.python/py-format-string.exp
Andrew Burgess [Mon, 8 Mar 2021 16:50:45 +0000 (16:50 +0000)]
gdb/testsuite: make test names unique in gdb.python/py-format-string.exp

Make use of `proc_with_prefix` for every test_* proc in order to make
the test names unique within this test file.

gdb/testsuite/ChangeLog:

* gdb.python/py-format-string.exp: Use proc_with_prefix to make
test names unique.

3 years agogdb/testsuite: make test names unique in gdb.python/py-mi.exp
Andrew Burgess [Wed, 3 Mar 2021 13:43:39 +0000 (13:43 +0000)]
gdb/testsuite: make test names unique in gdb.python/py-mi.exp

Use with_test_prefix to make the test names unique.

gdb/testsuite/ChangeLog:

* gdb.python/py-mi.exp: Use with_test_prefix to make test names
unique.

3 years agoaix: implement TLS relocation for gas and ld
Clément Chigot [Thu, 11 Mar 2021 10:08:19 +0000 (11:08 +0100)]
aix: implement TLS relocation for gas and ld

Add support for TLS in XCOFF. Amongst the things done by this commit:
 - Update XCOFF auxialiary header to match new version and allow TLS
   sections.
 - Add TLS sections (.tdata and .tbss) support in gas and ld.
 - Add support for the TLS relocations in gas and ld.
   Two different types BFD_RELOC are created for PPC and PPC64 as
   the size is a pointer, thus distinct in 32 or 64bit.

The addresses given by ld to .tdata and .tbss is a bit special. In
XCOFF, these addresses are actually offsets from the TLS pointer
computed at runtime. AIX assembly and linker does the same. In
top of that, the .tdata must be before .data (this is mandatory for AIX
loader). Thus, the aix ld script is recomputing "." before .data to restore
its original value. There might be a simpler way, but this one is working.

Optimisation linked to TLS relocations aren't yet implemented.

bfd/
* reloc.c (BFD_RELOC_PPC_TLS_LE, BFD_RELOC_PPC_TLS_IE,
BFD_RELOC_PPC_TLS_M, BFD_RELOC_PPC_TLS_ML, BFD_RELOC_PPC64_TLS_GD,
BFD_RELOC_PPC64_TLS_LD, BFD_RELOC_PPC64_TLS_LE,
BFD_RELOC_PPC64_TLS_IE, BFD_RELOC_PPC64_TLS_M,
BFD_RELOC_PPC64_TLS_ML): New relocations.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
* coff-rs6000.c (xcoff_calculate_relocation): Call
xcoff_reloc_type_tls for TLS relocations.
(xcoff_howto_table): Implement TLS relocations.
(_bfd_xcoff_reloc_type_lookup): Add cases TLS relocations.
(xcoff_reloc_type_tls): New function.
* coff64-rs6000.c (xcoff_calculate_relocation): Likewise.
(xcoff_howto_table): Likewise.
(_bfd_xcoff_reloc_type_lookup): Likewise.
* coffcode.h (sec_to_styp_flags): Handle TLS sections.
(styp_to_sec_flags): Likewise.
(coff_compute_section_file_positions): Avoid file offset
optimisation for .data when the previous section is .tdata.
(coff_write_object_contents): Handle TLS sections.
* coffswap.h (coff_swap_aouthdr_out): Add support for
new fields in aouthdr.
* libxcoff.h (xcoff_reloc_type_tls): Add prototype.
* xcofflink.c (xcoff_link_add_symbols): Handle XMC_UL.
(xcoff_need_ldrel_p): Add cases for TLS relocations.
(xcoff_create_ldrel): Add l_symndx for TLS sections.
gas/
* config/tc-ppc.c (ppc_xcoff_text_section, ppc_xcoff_data_section,
(ppc_xcoff_bss_section, ppc_xcoff_tdata_section,
(ppc_xcoff_tbss_section): New variables.
(ppc_text_subsegment, ppc_text_csects, ppc_data_subgments,
(ppc_data_csects): Removed.
(ppc_xcoff_section_is_initialized, ppc_init_xcoff_section,
ppc_xcoff_parse_cons): New functions.
(md_being): Initialize XCOFF sections.
(ppc_xcoff_suffix): Add support for TLS relocations
(fixup_size, md_apply_fix): Add support for new BFD_RELOC.
(ppc_change_csect): Handle XMC_TL, XMC_UL.  Correctly, add XMC_BS
to .bss section.  Handle new XCOFF section variables.
(ppc_comm): Likewise.
(ppc_toc): Likewise.
(ppc_symbol_new_hook): Likewise.
(ppc_frob_symbol): Likewise.
(ppc_fix_adjustable): Add tbss support.
* config/tc-ppc.h (TC_PARSE_CONS_EXPRESSION): New define.
(ppc_xcoff_parse_cons): Add prototype.
(struct ppc_xcoff_section): New structure.
ld/
* emultempl/aix.em: Ensure .tdata section is removed
if empty, even with -r flag.
* scripttempl/aix.sc: Handle TLS sections.
* testsuite/ld-powerpc/aix52.exp: Add new tests.
* testsuite/ld-powerpc/aix-tls-reloc-32.d: New test.
* testsuite/ld-powerpc/aix-tls-reloc-64.d: New test.
* testsuite/ld-powerpc/aix-tls-reloc.ex: New test.
* testsuite/ld-powerpc/aix-tls-reloc.s: New test.
* testsuite/ld-powerpc/aix-tls-section-32.d: New test.
* testsuite/ld-powerpc/aix-tls-section-64.d: New test.
* testsuite/ld-powerpc/aix-tls-section.ex: New test.
* testsuite/ld-powerpc/aix-tls-section.s: New test.
include/
* coff/internal.h (struct internal_aouthdr): Add new fields.
* coff/rs6000.h (AOUTHDRÃ): Add new fields.
* coff/rs6k64.h (struct external_filehdr): Likewise.
* coff/xcoff.h (_TDATA), _TBSS): New defines
(RS6K_AOUTHDR_TLS_LE, RS6K_AOUTHDR_RAS, RS6K_AOUTHDR_ALGNTDATA,
RS6K_AOUTHDR_SHR_SYMTAB, RS6K_AOUTHDR_FORK_POLICY,
RS6K_AOUTHDR_FORK_COR): New defines.
(XMC_TU): Removed.
(XMC_UL): New define.

3 years agoaix: implement R_TOCU and R_TOCL relocations
Clément Chigot [Thu, 11 Mar 2021 10:08:19 +0000 (11:08 +0100)]
aix: implement R_TOCU and R_TOCL relocations

Implement support for largetoc on XCOFF.
R_TOCU and R_TOCL are referenced by the new BFD defines:
BFD_RELOC_PPC_TOC16_HI and BFD_RELOC_PPC_TOC16_LO.
A new toc storage class is added XMC_TE.

In order to correctly handle R_TOCU, the logic behind
xcoff_reloc_type_toc is changed to compute the whole TOC offset
instead of just the difference between the "link" offset and the
"assembly" offset.

In gas, add a function to transform addis format used by AIX
"addis RT, D(RA)" into the ELF format "addis RT, RA, SI".

bfd/
* reloc.c (BFD_RELOC_PPC_TOC16_HI, BFD_RELOC_PPC_TOC16_LO):
New relocations.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
* coff-rs6000.c (xcoff_calculate_relocation): Call
xcoff_reloc_type_toc for R_TOCU and R_TOCL.
(xcoff_howto_table): Remove src_mask for TOC relocations.
Add R_TOCU and R_TOCL howtos.
(_bfd_xcoff_reloc_type_lookup): Add cases for
BFD_RELOC_PPC_TOC16_HI and BFD_RELOC_PPC_TOC16_LO.
(xcoff_reloc_type_toc): Compute the whole offset.
Implement R_TOCU and R_TOCL.
* coff64-rs6000.c (xcoff64_calculate_relocation):
Likewise.
(xcoff64_howto_table): Likewise.
(xcoff64_reloc_type_lookup): Likewise.
gas/
* config/tc-ppc.c (ppc_xcoff_suffix): New function.
(MAP, MAP32, MAP64): New macros for XCOFF.
(ppc_xcoff_fixup_addis): New function.
(ppc_is_toc_sym): Handle XMC_TE.
(fixup_size): Add cases for BFD_RELOC_PPC_TOC16_HI and
BFD_RELOC_PPC_TOC16_LO.
(md_assemble): Call ppc_xcoff_fixup_addis for XCOFF.
(ppc_change_csect): Handle XMC_TE.
(ppc_tc): Enable .tc symbols to have only a XMC_TC or XMC_TE
storage class.
(ppc_symbol_new_hook): Handle XMC_TE.
(ppc_frob_symbol): Likewise.
(ppc_fix_adjustable): Likewise.
(md_apply_fix): Handle BFD_RELOC_PPC_TOC16_HI and
BFD_RELOC_PPC_TOC16_LO.
ld/
* scripttempl/aix.sc: Add .te to .data section.
* testsuite/ld-powerpc/aix52.exp: Add test structure for AIX7+.
Add aix-largetoc-1 test.
* testsuite/ld-powerpc/aix-largetoc-1-32.d: New test.
* testsuite/ld-powerpc/aix-largetoc-1-64.d: New test.
* testsuite/ld-powerpc/aix-largetoc-1.ex: New test.
* testsuite/ld-powerpc/aix-largetoc-1.s: New test.

3 years agoaix: correct HOWTO table and add missing relocations
Clément Chigot [Thu, 11 Mar 2021 10:08:18 +0000 (11:08 +0100)]
aix: correct HOWTO table and add missing relocations

Since the last time AIX HOWTO table was modified, IBM has now
released an official documentation about XCOFF relocations.
This commit corrects the wrong ones and add some missing.
For now, the "custom" relocations made for xcoff_rtype2howto have
been kept.
The new relocations are still set as EMPTY_HOWTO because they will
be implemented in later commits.

In xcoff[64]_ppc_relocate_section, instead of recreating howto
from scratch, it's better to use the existing howto from the
table and fixing it according to r_size field.

bfd/
* coff-rs6000.c (xcoff_calculate_relocation): Correct and
add new relocations.
(xcoff_howto_table): Likewise.
(xcoff_rtype2howto): Increase r_type maximum value.
(xcoff_ppc_relocate_section): Reuse predefined HOWTOs instead
of create a new one from scratch.  Enable only some relocations
to have a changing r_size.
* coff64-rs6000.c (xcoff64_calculate_relocation): Likewise.
(xcoff64_howto_table): Likewise.
(xcoff64_rtype2howto): Likewise.
(xcoff64_ppc_relocate_section): Likewise.
* libxcoff.h (XCOFF_MAX_CALCULATE_RELOCATION): Fix value.
binutils/
* od-xcoff.c: Replace RTB by TRL entry.
include/
* coff/xcoff.h (R_RTB): Remove.
(R_TRL): Fix value.

3 years agobfd: move xcoff64_ppc_relocate_section after the HOWTO table
Clément Chigot [Thu, 11 Mar 2021 10:08:18 +0000 (11:08 +0100)]
bfd: move xcoff64_ppc_relocate_section after the HOWTO table

This will be needed for later commits, as xcoff64_ppc_relocate_section
will use the HOWTO table unlike now.

* coff64-rs6000.c (xcoff64_ppc_relocate_section): Move.

3 years agobfd: use default coff_write_object_contents for XCOFF64
Clément Chigot [Thu, 11 Mar 2021 10:08:18 +0000 (11:08 +0100)]
bfd: use default coff_write_object_contents for XCOFF64

There is no need for XCOFF64 to have is own write_object_contents.

* coff64-rs6000.c (xcoff64_write_object_contents): Remove.
* coffcode.h (coff_write_object_contents): Add bfd_mach_ppc_620
support for o_cputype field.  Avoid creating an empty a.out header
for XCOFF64.

3 years agobfd: add missing smclass when creating csect for xcoff64
Clément Chigot [Thu, 11 Mar 2021 10:08:18 +0000 (11:08 +0100)]
bfd: add missing smclass when creating csect for xcoff64

* coff64-rs6000.c (xcoff64_create_csect_from_smclas): Add
missing smclass.

3 years agoRe: x86: correct decoding of nop/reserved space (0f18 ... 0x1f)
Alan Modra [Fri, 12 Mar 2021 00:06:49 +0000 (10:36 +1030)]
Re: x86: correct decoding of nop/reserved space (0f18 ... 0x1f)

* i386-dis.c (print_insn <PREFIX_IGNORED>): Correct typo.

3 years agoPE image base fallout
Alan Modra [Thu, 11 Mar 2021 11:10:02 +0000 (21:40 +1030)]
PE image base fallout

Fixes x86_64-w64-mingw32 tests that failed with the recent diagnosis
for out of range RVA, and a couple of other gc-sections tests that failed
for other reasons.

* testsuite/ld-gc/gc.exp: Pass "-image-base 0" to ld for PE, and
arrange to define __main for some run_dump_test tests.
* testsuite/ld-gc/pr13683.d: Accept more symbols.
* testsuite/ld-gc/pr14265.d: Likewise, and ordering.
* testsuite/ld-scripts/crossref.exp: Pass "-image-base 0" to ld for PE.
* testsuite/ld-srec/srec.exp: Likewise.
* testsuite/lib/ld-lib.exp (ld_link_defsyms): Use is_pecoff_format.

3 years agoAutomatic date update in version.in
GDB Administrator [Fri, 12 Mar 2021 00:00:19 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agox86: re-order logic in OP_XMM()
Jan Beulich [Thu, 11 Mar 2021 15:21:48 +0000 (16:21 +0100)]
x86: re-order logic in OP_XMM()

Instead of excluding an increasing number of modes in the initial if(),
check the special modes first.

3 years agox86: drop a few redundant EVEX-related checks
Jan Beulich [Thu, 11 Mar 2021 15:21:19 +0000 (16:21 +0100)]
x86: drop a few redundant EVEX-related checks

vex.b can only be set when vex.evex is also set. Similarly vex.evex can
only be set when need_vex is also set.

3 years agox86: remove stray uses of xmmq_mode
Jan Beulich [Thu, 11 Mar 2021 15:20:37 +0000 (16:20 +0100)]
x86: remove stray uses of xmmq_mode

xmmq_mode is documented to not allow for broadcast - don't include it in
respective checks in OP_E_memory().

3 years agoRISC-V: Improve multiple relax passes problem.
Nelson Chu [Fri, 18 Dec 2020 02:59:41 +0000 (10:59 +0800)]
RISC-V: Improve multiple relax passes problem.

According to the commit abd20cb637008da9d32018b4b03973e119388a0a, an
intersting thing is that - the more relax passes, the more chances of
relaxations are reduced [1].  Originally, we set the boolean `again`
to TRUE once the code is actually deleted, and then we run the relaxations
repeatedly if `again` is still TRUE.  But `again` only works for the
relax pass itself, and won't affect others.  That is - we can not use
`again` to re-run the relax pass when we already enter into the following
passes (can not run the relax passes backwards).  Besides, we must seperate
the PCREL relaxations into two relax passes for some reasons [2], it make
us lose some relax opportunities.

This patch try to fix the problem, and the basic idea was come from Jim
Wilson - we use a new boolean, restart_relax, to determine if we need to
run the whole relax passes again from 0 to 2.  Once we have deleted the
code between relax pass 0 to 2, the restart_relax will be set to TRUE,
we should run the whole relaxations again to give them more chances to
shorten the code.  We will only enter into the relax pass 3 when the
restart_relax is FALSE, since we can't relax anything else once we start
to handle the alignments.

I have passed the gcc/binutils regressions by riscv-gnu-toolchain, and
looks fine for now.

[1] https://sourceware.org/pipermail/binutils/2020-November/114223.html
[2] https://sourceware.org/pipermail/binutils/2020-November/114235.html

bfd/
    * elfnn-riscv.c (riscv_elf_link_hash_table): New boolean restart_relax,
    used to check if we need to run the whole relaxations from relax pass 0
    to 2 again.
    (riscv_elf_link_hash_table_create): Init restart_relax to FALSE.
    (_bfd_riscv_relax_align): Remove obsolete sec_flg0 set.
    (_bfd_riscv_relax_delete): Set again to TRUE if we do delete the code.
    (bfd_elfNN_riscv_restart_relax_sections): New function.  Called by
    after_allocation to check if we need to run the whole relaxations again.
    (_bfd_riscv_relax_section): We will only enter into the relax pass 3 when
    the restart_relax is FALSE; At last set restart_relax to TRUE if again is
    TRUE, too.
    * elfxx-riscv.h (bfd_elf32_riscv_restart_relax_sections): Declaration.
    (bfd_elf64_riscv_restart_relax_sections): Likewise.
ld/
    * emultempl/riscvelf.em (after_allocation): Run ldelf_map_segments many
    times if riscv_restart_relax_sections returns TRUE.
    * testsuite/ld-riscv-elf/restart-relax.d: New testcase.  Before applying
    this patch, the call won't be relaxed to jal; But now we have more chances
    to do relaxations.
    * testsuite/ld-riscv-elf/restart-relax.s: Likewise.
    * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated.

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

3 years agoUse bool for "parse_completion"
Tom Tromey [Wed, 10 Mar 2021 18:50:09 +0000 (11:50 -0700)]
Use bool for "parse_completion"

Some spots in GDB already use bool for "parse_completion", but a few
were still using int.  This patch updates these to bool.

I'm checking this in.

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

* parser-defs.h (parser_state): Change completion to bool.
<parse_completion>: Likewise.
* ada-lang.h (ada_find_operator_symbol, ada_resolve_funcall)
(ada_resolve_variable, ada_resolve_function): Update.
* ada-lang.c (ada_find_operator_symbol): Change
parse_completion to bool.
(ada_resolve_funcall, ada_resolve_variable)
(ada_resolve_function): Likewise.

3 years agox86/Intel: correct AVX512 S/G disassembly
Jan Beulich [Wed, 10 Mar 2021 07:20:29 +0000 (08:20 +0100)]
x86/Intel: correct AVX512 S/G disassembly

Commit 6ff00b5e12e7 ("x86/Intel: correct permitted operand sizes for
AVX512 scatter/gather") brought the assembler side of AVX512 S/G insn
handling in line with AVX2's, but the disassembler side was forgotten.
This has the benefit of
- allowing to fold a number of table entries,
- rendering a few #define-s and enumerators unused.

3 years agox86: re-arrange enumerator and table entry order
Jan Beulich [Wed, 10 Mar 2021 07:19:43 +0000 (08:19 +0100)]
x86: re-arrange enumerator and table entry order

Some of the enumerators have ended up misplaced under the general
current ordering scheme. Move them (and their table entries) around
accordingly. Add a couple of blank lines as separators when close to
code being touched anyway. Also drop the odd 0F from 0FXOP (there's no
"0f" involved there anywhere) infixes where the respective enum gets
played with anyway.

3 years agox86: reuse further VEX entries for EVEX
Jan Beulich [Wed, 10 Mar 2021 07:19:11 +0000 (08:19 +0100)]
x86: reuse further VEX entries for EVEX

When the VEX.L=1 decode matches that of both EVEX.L'L=1 and EVEX.L'L=2
(typically when all three are invalid) the (smaller) VEX table entry can
be reused by EVEX, instead of duplicating data. (Note that XM and XMM as
well as EXxmm_md and EXd are equivalent at least for the purposes here.)

3 years agox86: reuse VEX entries for EVEX vperm{q,pd}
Jan Beulich [Wed, 10 Mar 2021 07:18:24 +0000 (08:18 +0100)]
x86: reuse VEX entries for EVEX vperm{q,pd}

By matching VEX decode order (L before W), some EVEX entries can refer
back to VEX ones instead of carrying duplicates.

3 years agox86: re-arrange order of decode for various EVEX opcodes
Jan Beulich [Wed, 10 Mar 2021 07:16:54 +0000 (08:16 +0100)]
x86: re-arrange order of decode for various EVEX opcodes

The order of decodes influences the overall number of table entries.
Reduce table size quite a bit by first decoding few-alternatives
attributes common to all valid leaves.

This also adds a PREFIX_DATA 7531c61332db ("x86: simplify decode of
opcodes valid with (embedded) 66 prefix only") missed to apply to
vbroadcastf64x4.

3 years agox86: re-arrange order of decode for various mask reg opcodes
Jan Beulich [Wed, 10 Mar 2021 07:16:24 +0000 (08:16 +0100)]
x86: re-arrange order of decode for various mask reg opcodes

The order of decodes influences the overall number of table entries.
Reduce table size quite a bit by first decoding few-alternatives
attributes common to all valid leaves.

3 years agox86: re-arrange order of decode for various VEX opcodes
Jan Beulich [Wed, 10 Mar 2021 07:15:46 +0000 (08:15 +0100)]
x86: re-arrange order of decode for various VEX opcodes

The order of decodes influences the overall number of table entries.
Reduce table size quite a bit by first decoding few-alternatives
attributes common to all valid leaves.

3 years agox86: re-arrange order of decode for various legacy opcodes
Jan Beulich [Wed, 10 Mar 2021 07:15:10 +0000 (08:15 +0100)]
x86: re-arrange order of decode for various legacy opcodes

The order of decodes influences the overall number of table entries.
Reduce table size quite a bit by first decoding few-alternatives
attributes common to all valid leaves.

3 years agox86: correct decoding of nop/reserved space (0f18 ... 0x1f)
Jan Beulich [Wed, 10 Mar 2021 07:14:11 +0000 (08:14 +0100)]
x86: correct decoding of nop/reserved space (0f18 ... 0x1f)

All encodings not used in this range are (reserved) NOPs. Hence their
decoding should be fully consistent. For this to work the PREFIX_IGNORED
logic needs slightly extending, such that the attribute will also
- have an effect when used inside prefix_table[], yet without always
  falling back to using slot 0,
- cause prefixes marked as ignored while decoding through prefix_table[]
  to no longer be considered decoded, when encountered in a subsequent
  decoding step.

In adjacent code also drop meaningless PREFIX_OPCODE.

3 years agobfd: strip symbols not representable in COFF/PE symbol table
Jan Beulich [Wed, 10 Mar 2021 07:12:37 +0000 (08:12 +0100)]
bfd: strip symbols not representable in COFF/PE symbol table

The offset-within-section field in the symbol table entry is only 32
bits wide, so rather than emitting bogus entries omit them, and issue
a diagnostic identifying the issue.

This requires adjusting the PR/22267 test to no longer produce symbols
with out of range values on 64-bit BFD. This also depends on
adjustments to testsuite/ld-scripts/map-address.* made by an earlier
patch. The purpose of the test can very well be achieved nevertheless.

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