platform/upstream/binutils.git
12 days agoExport ASAN_OPTIONS for the whole build 68/319268/3 accepted/tizen_base_x tizen_base_dev accepted/tizen/base/x/20241024.112428
Yaroslav Yamshchikov [Fri, 18 Oct 2024 16:40:11 +0000 (19:40 +0300)]
Export ASAN_OPTIONS for the whole build

Export ASAN_OPTIONS environment variable from the
binutils.spec affects all of subordinate configure scripts
where ASAN_OPTIONS environment variable is expected to be set.
Set it to content read from /ASAN_OPTIONS file if exists, empty
content otherwise.

        * packaging/binutils.spec: export ASAN_OPTIONS
        * packaging/binutils-aarch64.spec: export ASAN_OPTIONS
        * packaging/binutils-armv7hl.spec: export ASAN_OPTIONS
        * packaging/binutils-armv7l.spec: export ASAN_OPTIONS
        * packaging/binutils-riscv64.spec: export ASAN_OPTIONS

Change-Id: I1398ec6407ccdae570198406be13a28aba385496
Signed-off-by: Yaroslav Yamshchikov <y.yamshchiko@samsung.com>
2 months agopackaging: bump version to 2.43 accepted/tizen_base_toolchain sandbox/dkson95/2.43 accepted/tizen/base/toolchain/20240819.225024 accepted/tizen/base/x/20240826.005758 accepted/tizen/base/x/asan/20241010.014106
Dongkyun Son [Mon, 19 Aug 2024 07:28:19 +0000 (16:28 +0900)]
packaging: bump version to 2.43

Change-Id: I2cdb1b9fe6c6758ae46c0123630ddf942b2d38f1
Signed-off-by: Dongkyun Son <dongkyun.s@samsung.com>
2 months agopackaging: squash and merge for the spec updates
Dongkyun Son [Mon, 19 Aug 2024 07:10:57 +0000 (16:10 +0900)]
packaging: squash and merge for the spec updates

* packaging: bump version to 2.42
* packaging: Add riscv64 platform
* packaging: add binutils-libs dependency in build
* packaging: add libs package with GPL-2.0+ licensed
* packaging: Remove libsframe.la with docs
* packaging: Bump version to 2.40
* packaging: fix build error
* packaging: Fix build breaks and packaging after upgrade to 2.39
* packaging: fix error
* packaging: keep shared libraries for libbfd & libopcodes
* packaging: disable binutils_run_tests of cross binutils
* packaging: Turn off separate-code for i586
* packaging: Add support for configure-dumper
* packaging: Enable testing infrastructrure
* configure: diabled relro by default
* packaging: version bump
* packaging: fix testsuite build.
* Add armv7hl support.
* 2.27 version

Change-Id: Ibea1900a099cc954842dd509dd0fc074e2aa14e7
Signed-off-by: Ɓukasz Stelmach <l.stelmach@samsung.com>
Signed-off-by: Dongkyun Son <dongkyun.s@samsung.com>
Signed-off-by: Andrey Drobyshev <a.drobyshev@partner.samsung.com>
Signed-off-by: Mikhail Kashkarov <m.kashkarov@partner.samsung.com>
Signed-off-by: Slava Barinov <v.barinov@samsung.com>
2 months agoWorkaround for riscv64 gold
Slava Barinov [Thu, 8 Jun 2023 09:03:46 +0000 (12:03 +0300)]
Workaround for riscv64 gold

This change is required to build a cross-binutils and enable acceleration

Change-Id: Ifb3547e6889b6844d0e726bac8175faf1a9ac7b8

2 months agoreadline: fix path in configure.in
Slava Barinov [Tue, 4 Apr 2023 12:13:32 +0000 (15:13 +0300)]
readline: fix path in configure.in

The path fix allows configure dumper to collect the information.

Change-Id: I347977a90df5fcaed59e37f1701ef32ae96d85ee
Signed-off-by: Slava Barinov <v.barinov@samsung.com>
2 months agoFix error while linking Tizen Apps
Dongkyun Son [Thu, 24 Sep 2020 06:13:49 +0000 (15:13 +0900)]
Fix error while linking Tizen Apps

cherry-picked from RS-TizenStudio/gcc-9.2/pull/10

Change-Id: I30e8222f838680785c22527ab9295bb9c2f9e902
Signed-off-by: Karthik Bhat <kv.bhat@samsung.com>
Signed-off-by: Dongkyun Son <dongkyun.s@samsung.com>
2 months agold/testing: clear compiler & linker flags when running testsuite.
Andrey Drobyshev [Mon, 8 Oct 2018 12:41:37 +0000 (15:41 +0300)]
ld/testing: clear compiler & linker flags when running testsuite.

Passing CLFAGS, CXXFLAGS, LDFLAGS used previously on build stage cause failures
when running "make check". It's safer to clear them.

Change-Id: If2bba2baca0f99c3931af2a55739ff6a087f2b0f
Signed-off-by: Andrey Drobyshev <a.drobyshev@partner.samsung.com>
2 months agoIntroduce --enable-new-dtags configure option.
Slava Barinov [Thu, 25 May 2017 08:10:06 +0000 (11:10 +0300)]
Introduce --enable-new-dtags configure option.

ld/configure --enable-new-dtags sets ld.bfd --enable-new-dtags option by
default.

The ld option switches on generation of DT_RUNPATH tag instead of DT_RPATH tag
which is deprecated and breaks LD_LIBRARY_PATH usage.

Debian binutils bug: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=835859

        * ld/configure.ac: Add --enable-new-dtags option.
        * ld/ldmain.c: Set link_info.new_dtags to 1 if when --enable-new-dtags is
          switched on.
        * ld/configure: Regenerate.
        * ld/config.in: Regenerate.
        * packaging/binutils.spec: Switch on --enable-new-dtags.
        * packaging/binutils-armv7l.spec: Regenerate.
        * packaging/binutils-aarch64.spec: Regenerate.

Change-Id: I0ec86f61a8b97d55c29bb441a9ae4db94060ea22
Signed-off-by: Slava Barinov <v.barinov@samsung.com>
2 months agoPackaging added.
Slava Barinov [Mon, 27 Feb 2017 09:57:34 +0000 (12:57 +0300)]
Packaging added.

Signed-off-by: Slava Barinov <v.barinov@samsung.com>
2 months agothis-is-the-2.43-release upstream/2.43
Nick Clifton [Sun, 4 Aug 2024 13:23:51 +0000 (14:23 +0100)]
this-is-the-2.43-release

3 months agoAutomatic date update in version.in
GDB Administrator [Sun, 4 Aug 2024 00:01:36 +0000 (00:01 +0000)]
Automatic date update in version.in

3 months agoAutomatic date update in version.in
GDB Administrator [Sat, 3 Aug 2024 00:00:53 +0000 (00:00 +0000)]
Automatic date update in version.in

3 months agoUpdated Bulgarian translation for the binutils/ directory
Nick Clifton [Fri, 2 Aug 2024 14:40:42 +0000 (15:40 +0100)]
Updated Bulgarian translation for the binutils/ directory

3 months agoAutomatic date update in version.in
GDB Administrator [Fri, 2 Aug 2024 00:01:18 +0000 (00:01 +0000)]
Automatic date update in version.in

3 months agogprofng: 32018 Compilation of binutils 2.43 failed on CentOS 6
Vladimir Mezentsev [Mon, 29 Jul 2024 21:15:01 +0000 (14:15 -0700)]
gprofng: 32018 Compilation of binutils 2.43 failed on CentOS 6

strchr is redefined as a macro in /usr/include/bits/string.h on CentOS 6/7.
In this case, we may not use our CALL_UTIL macro for strchr.
Use __collector_strchr instead of "CALL_UTIL (strchr)".

gprofng/ChangeLog
2024-07-28  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

PR 32018
* libcollector/hwprofile.c (open_experiment): Use __collector_strchr.

3 months agolibctf: fix ctf_archive_count return value on big-endian
Nick Alcock [Tue, 30 Jul 2024 11:28:04 +0000 (12:28 +0100)]
libctf: fix ctf_archive_count return value on big-endian

This failed to properly byteswap its return value.

The ctf_archive format predates the idea of "just write natively and
flip on open", and byteswaps all over the place.  It's too easy to
forget one.  The next revision of the archive format (not versioned,
so we just tweak the magic number instead) should be native-endianned
like the dicts inside it are.

libctf/
* ctf-archive.c (ctf_archive_count): Byteswap return value.

3 months agolibctf: dump: fix small leak
Nick Alcock [Mon, 29 Jul 2024 17:02:03 +0000 (18:02 +0100)]
libctf: dump: fix small leak

If you asprintf something and then use it only as input to another asprintf,
it helps to free it afterwards.

libctf/
* ctf-dump.c (ctf_dump_header): Free the flagstr after use.
(ctf_dump): Make a NULL return slightly clearer.

3 months agolibctf: fix ref leak of names of newly-inserted non-root-visible types
Nick Alcock [Mon, 29 Jul 2024 11:45:09 +0000 (12:45 +0100)]
libctf: fix ref leak of names of newly-inserted non-root-visible types

A bug in ctf_dtd_delete led to refs in the string table to the
names of non-root-visible types not being removed when the DTD
was.  This seems harmless, but actually it would lead to a write
down a pointer into freed memory if such a type was ctf_rollback()ed
over and then the dict was serialized (updating all the refs as the
strtab was serialized in turn).

Bug introduced in commit fe4c2d55634c700ba527ac4183e05c66e9f93c62
("libctf: create: non-root-visible types should not appear in name tables")
which is included in binutils 2.35.

libctf/
* ctf-create.c (ctf_dtd_delete): Remove refs for all types
with names, not just root-visible ones.

3 months agolibctf: clean up hashtab error handling mess
Nick Alcock [Fri, 26 Jul 2024 20:58:03 +0000 (21:58 +0100)]
libctf: clean up hashtab error handling mess

The dict and archive opening code in libctf is somewhat unusual, because
unlike everything else, it cannot report errors by setting an error on the
dict, because in case of error there isn't one.  They get passed an error
integer pointer that is set on error instead.

Inside ctf_bufopen this is implemented by calling ctf_set_open_errno and
passing it a positive error value.  In turn this means that most things it
calls (including init_static_types) return zero on success and a *positive*
ECTF_* or errno value on error.

This trickles down to ctf_dynhash_insert_type, which is used by
init_static_types to add newly-detected types to the name tables.  This was
returning the error value it received from a variety of functions without
alteration.  ctf_dynhash_insert conformed to this contract by returning a
positive value on error (usually OOM), which is unfortunate for multiple
reasons:

- ctf_dynset_insert returns a *negative* value
- ctf_dynhash_insert and ctf_dynset_insert don't take an fp, so the value
  they return is turned into the errno, so it had better be right, callers
  don't just check for != 0 here
- more or less every single caller of ctf_dyn*_insert in libctf other than
  ctf_dynhash_insert_type (and there are a *lot*, mostly in the
  deduplicator) assumes that ctf_dynhash_insert returns a negative value
  on error, even though it doesn't.  In practice the only possible error is
  OOM, but if OOM does happen we end up with a nonsense error value.

The simplest fix for this seems to be to make ctf_dynhash_insert and
ctf_dynset_insert conform to the usual interface contract: negative
values are errors.  This in turn means that ctf_dynhash_insert_type
needs to change: let's make it consistent too, returning a negative
value on error, putting the error on the fp in non-negated form.

init_static_types_internal adapts to this by negating the error return from
ctf_dynhash_insert_type, so the value handed back to ctf_bufopen is still
positive: the new call site in ctf_track_enumerator does not need to change.

(The existing tests for this reliably detect when I get it wrong.
I know, because they did.)

libctf/
* ctf-hash.c (ctf_dynhash_insert): Negate return value.
(ctf_dynhash_insert_type): Set de-negated error on the dict:
        return negated error.
* ctf-open.c (init_static_types_internal): Adapt to this change.

3 months agolibctf, include: add ctf_dict_set_flag: less enum dup checking by default
Nick Alcock [Fri, 26 Jul 2024 20:38:24 +0000 (21:38 +0100)]
libctf, include: add ctf_dict_set_flag: less enum dup checking by default

The recent change to detect duplicate enum values and return ECTF_DUPLICATE
when found turns out to perturb a great many callers.  In particular, the
pahole-created kernel BTF has the same problem we historically did, and
gleefully emits duplicated enum constants in profusion.  Handling the
resulting duplicate errors from BTF -> CTF converters reasonably is
unreasonably difficult (it amounts to forcing them to skip some types or
reimplement the deduplicator).

So let's step back a bit.  What we care about mostly is that the
deduplicator treat enums with conflicting enumeration constants as
conflicting types: programs that want to look up enumeration constant ->
value mappings using the new APIs to do so might well want the same checks
to apply to any ctf_add_* operations they carry out (and since they're
*using* the new APIs, added at the same time as this restriction was
imposed, there is likely to be no negative consequence of this).

So we want some way to allow processes that know about duplicate detection
to opt into it, while allowing everyone else to stay clear of it: but we
want ctf_link to get this behaviour even if its caller has opted out.

So add a new concept to the API: dict-wide CTF flags, set via
ctf_dict_set_flag, obtained via ctf_dict_get_flag.  They are not bitflags
but simple arbitrary integers and an on/off value, stored in an unspecified
manner (the one current flag, we translate into an LCTF_* flag value in the
internal ctf_dict ctf_flags word). If you pass in an invalid flag or value
you get a new ECTF_BADFLAG error, so the caller can easily tell whether
flags added in future are valid with a particular libctf or not.

We check this flag in ctf_add_enumerator, and set it around the link
(including on child per-CU dicts).  The newish enumerator-iteration test is
souped up to check the semantics of the flag as well.

The fact that the flag can be set and unset at any time has curious
consequences. You can unset the flag, insert a pile of duplicates, then set
it and expect the new duplicates to be detected, not only by
ctf_add_enumerator but also by ctf_lookup_enumerator.  This means we now
have to maintain the ctf_names and conflicting_enums enum-duplication
tracking as new enums are added, not purely as the dict is opened.
Move that code out of init_static_types_internal and into a new
ctf_track_enumerator function that addition can also call.

(None of this affects the file format or serialization machinery, which has
to be able to handle duplicate enumeration constants no matter what.)

include/
* ctf-api.h (CTF_ERRORS) [ECTF_BADFLAG]: New.
(ECTF_NERR): Update.
(CTF_STRICT_NO_DUP_ENUMERATORS): New flag.
(ctf_dict_set_flag): New function.
(ctf_dict_get_flag): Likewise.

libctf/
* ctf-impl.h (LCTF_STRICT_NO_DUP_ENUMERATORS): New flag.
(ctf_track_enumerator): Declare.
* ctf-dedup.c (ctf_dedup_emit_type): Set it.
* ctf-link.c (ctf_create_per_cu): Likewise.
(ctf_link_deduplicating_per_cu): Likewise.
(ctf_link): Likewise.
(ctf_link_write): Likewise.
* ctf-subr.c (ctf_dict_set_flag): New function.
(ctf_dict_get_flag): New function.
* ctf-open.c (init_static_types_internal): Move enum tracking to...
* ctf-create.c (ctf_track_enumerator): ... this new function.
(ctf_add_enumerator): Call it.
* libctf.ver: Add the new functions.
* testsuite/libctf-lookup/enumerator-iteration.c: Test them.

3 months agoinclude, libctf: improve ECTF_DUPLICATE error message
Nick Alcock [Fri, 26 Jul 2024 20:20:50 +0000 (21:20 +0100)]
include, libctf: improve ECTF_DUPLICATE error message

It applies to enums now, so it should mention them.

include/
* ctf-api.h (_CTF_ERRORS) ECTF_DUPLICATE]: Mention enums.

3 months agolibctf: link: remember to turn off the LCTF_LINKING flag after ctf_link_write
Nick Alcock [Mon, 15 Jul 2024 22:25:25 +0000 (23:25 +0100)]
libctf: link: remember to turn off the LCTF_LINKING flag after ctf_link_write

We set this flag at the top of ctf_link_write (to tell ctf_serialize, way
down under the archive file writing functions, to do the various link- time
serialization things like symbol filtering and the like), but we never
remember to clear it except on error.  This is probably bad if you want to
serialize the dict yourself directly in the future after linking it (which
is...  definitely a *possible* use of the API, if rather strange).

libctf/
* ctf-link.c (ctf_link_write): Clear LCTF_LINKING before exit.

3 months agolibctf: link: fix error handling
Nick Alcock [Mon, 15 Jul 2024 21:05:57 +0000 (22:05 +0100)]
libctf: link: fix error handling

We were calling the wrong error function if opening failed, causing leaks.

libctf/
* ctf-link.c (ctf_link_deduplicating_per_cu): Fix error handling.

3 months agolibctf, open: Fix enum error handling path
Nick Alcock [Mon, 15 Jul 2024 20:05:43 +0000 (21:05 +0100)]
libctf, open: Fix enum error handling path

This new error-handling path was not properly initializing the
fp's errno.

libctf/
* ctf-open.c (init_static_types_internal): Set errno properly.

3 months agolibctf, subr: don't mix up errors and warnings
Nick Alcock [Mon, 15 Jul 2024 20:04:24 +0000 (21:04 +0100)]
libctf, subr: don't mix up errors and warnings

ctf_err_warn() was debug-logging warnings as if they were errors and vice
versa.

libctf/
* ctf-subr.c (ctf_err_warn): Fix debugging thinko.

3 months agolibctf: fix dynset insertion
Nick Alcock [Mon, 15 Jul 2024 19:50:25 +0000 (20:50 +0100)]
libctf: fix dynset insertion

libctf's dynsets are a straight wrapper around libiberty hashtab, storing
the key directly in the hashtab slot.  However, we'd often like to be able
to store 0 and 1 (HTAB_EMPTY_ENTRY and HTAB_DELETED_ENTRY) in there, so we
move them out of the way and replace them with huge unlikely values
instead.  Unfortunately we failed to do this replacement in one place, so
insertion of 0 or 1 ended up misinforming the hashtab machinery that an
entry was empty or deleted when it wasn't.

libctf/
* ctf-hash.c (ctf_dynset_insert): Call key_to_internal properly.

3 months agolibctf: dedup: tiny tweaks
Nick Alcock [Mon, 15 Jul 2024 19:00:59 +0000 (20:00 +0100)]
libctf: dedup: tiny tweaks

Drop an unnecessary variable, and fix a buggy comment.

No effect on generated code.

libctf/
* ctf-dedup.c (ctf_dedup_detect_name_ambiguity): Drop unnecessary
        variable.
(ctf_dedup_rwalk_output_mapping): Fix comment.

3 months agolibctf: improve ECTF_NOPARENT error message
Nick Alcock [Mon, 15 Jul 2024 18:59:13 +0000 (19:59 +0100)]
libctf: improve ECTF_NOPARENT error message

This erorr doesn't just indicate that there is no parent dictionary
(that's routine, and true of all dicts that are parents themselves)
but that a parent is *needed* but wasn't found.

include/
* ctf-api.h (_CTF_ERRORS) [ECTF_NOPARENT]: Improve error message.

ld/
* testsuite/ld-ctf/diag-parname.d: Adjust.

3 months agolibctf: fix CTF dict compression
Nick Alcock [Mon, 15 Jul 2024 18:55:40 +0000 (19:55 +0100)]
libctf: fix CTF dict compression

Commit 483546ce4f3 ("libctf: make ctf_serialize() actually serialize")
accidentally broke dict compression.  There were two bugs:

 - ctf_arc_write_one_ctf was still making its own decision about
   whether to compress the dict via direct ctf_size comparison, which is
   unfortunate because now that it no longer calls ctf_serialize itself,
   ctf_size is always zero when it does this: it should let the writing
   functions decide on the threshold, which they contain code to do which is
   simply not used for lack of one trivial wrapper to write to an fd and
   also provide a compression threshold

 - ctf_write_mem, the function underlying all writing as of the commit
   above, was calling zlib's compressBound and avoiding compression if this
   returned a value larger than the input.  Unfortunately compressBound does
   not do a trial compression and determine whether the result is
   compressible: it just adds zlib header sizes to the value passed in, so
   our test would *always* have concluded that the value was incompressible!
   Avoid by simply always compressing if the raw size is larger than the
   threshold: zlib is quite clever enough to avoid actually compressing
   if the data is incompressible.

Add a testcase for this.

libctf/
* ctf-impl.h (ctf_write_thresholded): New...
* ctf-serialize.c (ctf_write_thresholded): ... defined here,
        a wrapper around...
        (ctf_write_mem): ... this.  Don't check compressibility.
(ctf_compress_write): Reimplement as a ctf_write_thresholded
        wrapper.
(ctf_write): Likewise.
* ctf-archive.c (arc_write_one_ctf): Just call
        ctf_write_thresholded rather than trying to work out whether
        to compress.
* testsuite/libctf-writable/ctf-compressed.*: New test.

3 months agolibctf: fix linking of non-root-visible types
Nick Alcock [Mon, 15 Jul 2024 18:42:10 +0000 (19:42 +0100)]
libctf: fix linking of non-root-visible types

If you deduplicate non-root-visible types, the resulting type should still
be non-root-visible! We were promoting all such types to root-visible, and
re-demoting them only if their names collided (which might happen on
cu-mapped links if multiple compilation units with conflicting types are
fused into one child dict).

This "worked" before now, in that linking at least didn't fail (if you don't
mind having your non-root flag value destroyed if you're adding
non-root-visible types), but now that conflicting enumerators cause their
containing enums to become conflicted (enums which might have *different
names*), this caused the linker to crash when it hit two enumerators with
conflicting values.

Not testable in ld because cu-mapped links are not exposed to ld, but can be
tested via direct creation of libraries and calls to ctf_link directly.
(This also tests the ctf_dump non-root type printout, which before now
was untested.)

libctf/
* ctf-dedup.c (ctf_dedup_emit_type): Non-root-visible input types
should be emitted as non-root-visible output types.
* testsuite/libctf-writable/ctf-nonroot-linking.c: New test.
* testsuite/libctf-writable/ctf-nonroot-linking.lk: New test.

3 months agolibctf, dump: correctly dump non-root-visible types
Nick Alcock [Mon, 15 Jul 2024 18:39:48 +0000 (19:39 +0100)]
libctf, dump: correctly dump non-root-visible types

The flag test when dumping non-root-visible tyeps was doubly wrong: the
flags word is a *bitfield* containing CTF_ADD_ROOT as one possible
value, so needs | and & testing, not just ==, and CTF_ADD_NONROOT is 0,
so cannot be tested for this way: one must check for the non-presence of
CTF_ADD_ROOT.

libctf/
* ctf-dump.c (ctf_dump_format_type): Fix non-root flag test.

3 months agolibctf, string: split the movable refs out of the ref list
Nick Alcock [Fri, 12 Jul 2024 11:44:02 +0000 (12:44 +0100)]
libctf, string: split the movable refs out of the ref list

In commit 149ce5c263616e65 we introduced the concept of "movable" refs,
which are refs that can be moved in batches, to let us maintain valid ref
lists even when adding refs to blocks of memory that can be realloced (which
is any type containing a vlen which can expand, like names contained within
enum or struct members).  Movable refs need a backpointer to the movable
refs dynhash for this dict; since non-movable refs are very common, we tried
to save memory by having a slightly bigger struct for moveable refs with a
backpointer in it, and casting appropriately, indicating which sort of ref
we were dealing with via a flag on the atom.

Unfortunately this doesn't work reliably, because you can perfectly well
have a string ("foo", say) which has both non-movable refs (say, an external
symbol and a variable name) and movable refs (say, a structure member name)
to the same atom.  Indicate which struct we're dealing with with an atom
flag and suddenly you're casting a ctf_str_atom_ref to a
ctf_str_atom_ref_movable (which is bigger) and dereferencing random memory
off the end of it and interpreting it as a backpointer to the movable refs
dynhash.  This is unlikely to work well.

So bite the bullet and split refs into two separate lists, one for movable
refs, one for immovable refs. It means some annoying code duplication, but
there's not very much of it, and it means we can keep the movable refs
hashtab (which in turn means we don't have to do linear searches to find all
relevant refs when moving refs, which in turn means that
structure/union/enum member additions remain amortized O(n) time, not
O(n^2).

Callers can now purge movable and non-movable refs independently of each
other.  We don't use this yet, but a use is coming.

libctf/
* ctf-impl.h (CTF_STR_ATOM_MOVABLE): Delete.
        (struct ctf_str_atom) [csa_movable_refs]: New.
(struct ctf_dict): Adjust comment.
(ctf_str_purge_refs): Add MOVABLE arg.
* ctf-string.c (ctf_str_purge_movable_atom_refs): Split out of...
        (ctf_str_purge_atom_refs): ... this.
(ctf_str_free_atom): Call it.
(ctf_str_purge_one_atom_refs): Likewise.
(aref_create): Adjust accordingly.
(ctf_str_move_refs): Likewise.
(ctf_str_remove_ref): Remove movable refs too, including
deleting the ref from ctf_str_movable_refs.
(ctf_str_purge_refs): Add MOVABLE arg.
(ctf_str_update_refs): Update movable refs.
(ctf_str_write_strtab): Check, and purge, movable refs.

3 months agolibctf, dedup: drop unnecessary arg from ctf_dedup()
Nick Alcock [Tue, 9 Jul 2024 14:30:39 +0000 (15:30 +0100)]
libctf, dedup: drop unnecessary arg from ctf_dedup()

The PARENTS arg is carefully passed down through all the layers of hash
functions and then never used for anything.  (In the distant past it was
used for cycle detection, but the algorithm eventually committed doesn't
need to do cycle detection...)

The PARENTS arg is still used by ctf_dedup_emit(), but even there we can
loosen the requirements and state that you can just leave entries
corresponding to dicts with no parents at zero (which will be useful
in an upcoming commit).

libctf/
* ctf-dedup.c (ctf_dedup_hash_type): Drop PARENTS arg.
(ctf_dedup_rhash_type): Likewise.
(ctf_dedup): Likewise.
(ctf_dedup_emit_struct_members): Mention what you can do to
        PARENTS entries for parent dicts.
* ctf-impl.h (ctf_dedup): Adjust accordingly.
* ctf-link.c (ctf_link_deduplicating_per_cu): Likewise.
(ctf_link_deduplicating): Likewise.

3 months agolibctf: we do in fact support foreign-endian old versions
Nick Alcock [Fri, 5 Jul 2024 14:53:14 +0000 (15:53 +0100)]
libctf: we do in fact support foreign-endian old versions

The worry that caused this to not be supported was because we don't
bother endian-flipping version-related fields before checking them.
But they're all unsigned chars anyway, and don't need any flipping at
all.

This should be supported and should already work.  Enable it.

libctf/
* ctf-open.c (ctf_bufopen): Don't prohibit foreign-endian
        upgrades.

3 months agoAutomatic date update in version.in
GDB Administrator [Thu, 1 Aug 2024 00:02:42 +0000 (00:02 +0000)]
Automatic date update in version.in

3 months agoAutomatic date update in version.in
GDB Administrator [Wed, 31 Jul 2024 00:01:09 +0000 (00:01 +0000)]
Automatic date update in version.in

3 months agogas/NEWS, ld/NEWS: Announce LoongArch changes in 2.43
Lulu Cai [Fri, 26 Jul 2024 08:34:38 +0000 (16:34 +0800)]
gas/NEWS, ld/NEWS: Announce LoongArch changes in 2.43

(cherry picked from commit f722345809f9881ae99f981308ec5b5815c4a6f5)

3 months agoAutomatic date update in version.in
GDB Administrator [Tue, 30 Jul 2024 00:02:16 +0000 (00:02 +0000)]
Automatic date update in version.in

3 months agoUpdated translations for the bfd, binutils, gas, ld and opcodes directories
Nick Clifton [Mon, 29 Jul 2024 10:57:49 +0000 (11:57 +0100)]
Updated translations for the bfd, binutils, gas, ld and opcodes directories

3 months agoAutomatic date update in version.in
GDB Administrator [Mon, 29 Jul 2024 00:01:42 +0000 (00:01 +0000)]
Automatic date update in version.in

3 months agoAutomatic date update in version.in
GDB Administrator [Sun, 28 Jul 2024 00:01:35 +0000 (00:01 +0000)]
Automatic date update in version.in

3 months agoAutomatic date update in version.in
GDB Administrator [Sat, 27 Jul 2024 00:01:38 +0000 (00:01 +0000)]
Automatic date update in version.in

3 months agomicroMIPS: Add MT ASE instruction set support
YunQiang Su [Fri, 26 Jul 2024 17:01:09 +0000 (18:01 +0100)]
microMIPS: Add MT ASE instruction set support

Add the MT ASE instruction operand types and encodings to the microMIPS
opcode table and enable the assembly of these instructions in GAS from
MIPSr2 onwards.  Update the binutils and GAS testsuites accordingly.

References:

"MIPS Architecture for Programmers, Volume IV-f: The MIPS MT Module for
the microMIPS32 Architecture", MIPS Technologies, Inc., Document Number:
MD00768, Revision 1.12, July 16, 2013

Co-Authored-By: Maciej W. Rozycki <macro@redhat.com>
(cherry picked from commit 08e6af1bac935c0820c51a9e6a52294b4ae4d832)

3 months agoAutomatic date update in version.in
GDB Administrator [Fri, 26 Jul 2024 00:01:17 +0000 (00:01 +0000)]
Automatic date update in version.in

3 months agox86: Add missing newlines in TLS transition error messages
H.J. Lu [Thu, 25 Jul 2024 20:03:19 +0000 (13:03 -0700)]
x86: Add missing newlines in TLS transition error messages

Change TLS transition error messages from

a-argp-help.o(.text+0x12f): relocation R_X86_64_GOTTPOFF against `a' must be used in ADD or MOV onlyld: final link failed: bad value

to

a-argp-help.o(.text+0x12f): relocation R_X86_64_GOTTPOFF against `a' must be used in ADD or MOV only
ld: final link failed: bad value

PR ld/32017
* elfxx-x86.c (_bfd_x86_elf_link_report_tls_transition_error):
Add missing newlines.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
(cherry picked from commit f73f5173faa73fc13c2c61390ec26e43f9d30861)

3 months agox86: Improve TLS transition error check
H.J. Lu [Wed, 24 Jul 2024 06:39:50 +0000 (23:39 -0700)]
x86: Improve TLS transition error check

Provide detailed TLS transition errors when unsupported instructions are
used.  Treat R_X86_64_CODE_4_GOTTPOFF and R_X86_64_CODE_6_GOTTPOFF as
R_X86_64_GOTTPOFF when performing TLS transition.

bfd/

PR ld/32017
* elf32-i386.c (elf_i386_check_tls_transition): Return different
enums for different errors.
(elf_i386_tls_transition): Change argument from r_symndx to sym.
Call _bfd_x86_elf_link_report_tls_transition_error to report TLS
transition errors.
(elf_i386_scan_relocs): Pass isym instead of r_symndx to
elf_i386_tls_transition.
(elf_i386_relocate_section): Pass sym instead of r_symndx to
elf_i386_tls_transition.
* elf64-x86-64.c (elf_x86_64_check_tls_transition): Return
different enums for different errors.
(elf_x86_64_tls_transition): Change argument from r_symndx to sym.
Treat R_X86_64_CODE_4_GOTTPOFF and R_X86_64_CODE_6_GOTTPOFF as
R_X86_64_GOTTPOFF.  Call
_bfd_x86_elf_link_report_tls_transition_error to report TLS
transition errors.
(elf_x86_64_scan_relocs): Pass isym instead of r_symndx to
elf_x86_64_tls_transition.
(elf_x86_64_relocate_section): Pass sym instead of r_symndx to
elf_x86_64_tls_transition.
* elfxx-x86.c (_bfd_x86_elf_link_report_tls_transition_error): New.
* elfxx-x86.h (elf_x86_tls_error_type): Likewise.
(_bfd_x86_elf_link_report_tls_transition_error): Likewise.

ld/

PR ld/32017
* testsuite/ld-i386/i386.exp: Run tlsgdesc1 and tlsgdesc2.
* testsuite/ld-i386/tlsie2.d: Updated.
* testsuite/ld-i386/tlsie3.d: Likewise.
* testsuite/ld-i386/tlsie4.d: Likewise.
* testsuite/ld-i386/tlsie5.d: Likewise.
* testsuite/ld-x86-64/tlsie2.d: Likewise.
* testsuite/ld-x86-64/tlsie3.d: Likewise.
* testsuite/ld-i386/tlsgdesc1.d: New file.
* testsuite/ld-i386/tlsgdesc1.s: Likewise.
* testsuite/ld-i386/tlsgdesc2.d: Likewise.
* testsuite/ld-i386/tlsgdesc2.s: Likewise.
* testsuite/ld-x86-64/tlsdesc3.d: Likewise.
* testsuite/ld-x86-64/tlsdesc3.s: Likewise.
* testsuite/ld-x86-64/tlsdesc4.d: Likewise.
* testsuite/ld-x86-64/tlsdesc4.s: Likewise.
* testsuite/ld-x86-64/tlsie5.d: Likewise.
* testsuite/ld-x86-64/tlsie5.s: Likewise.
* testsuite/ld-x86-64/x86-64.exp: Run tlsie5, tlsdesc3 and
tlsdesc4.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
(cherry picked from commit 1d68a49ac5d71b648304f69af978fce0f4413800)

3 months agoAutomatic date update in version.in
GDB Administrator [Thu, 25 Jul 2024 00:01:17 +0000 (00:01 +0000)]
Automatic date update in version.in

3 months agoAutomatic date update in version.in
GDB Administrator [Wed, 24 Jul 2024 00:02:25 +0000 (00:02 +0000)]
Automatic date update in version.in

3 months agoCorrect version for binutils 2.43 NEWS entries.
H.J. Lu [Sat, 20 Jul 2024 20:52:50 +0000 (13:52 -0700)]
Correct version for binutils 2.43 NEWS entries.

Change 2.42 to 2.43 for binutils 2.43 NEWS entries.

binutils/

* NEWS: Change 2.42 to 2.43 for 2.43 NEWS entries.

ld/

* NEWS: Change 2.42 to 2.43 for 2.43 NEWS entries.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
(cherry picked from commit e1b9d58e85ec5e3f73d1d48e67411386f1ac275c)

3 months agoUpdate version number to 2.42.90
Nick Clifton [Sat, 20 Jul 2024 12:06:51 +0000 (13:06 +0100)]
Update version number to 2.42.90

3 months agoAdd markers for 2.43 branch/release
Nick Clifton [Sat, 20 Jul 2024 11:43:19 +0000 (12:43 +0100)]
Add markers for 2.43 branch/release

3 months agoRe: binutils: Add a test for strip with build notes
Alan Modra [Sat, 20 Jul 2024 02:53:59 +0000 (12:23 +0930)]
Re: binutils: Add a test for strip with build notes

The new test wasn't being run, and failed due to relocations against
.gnu.build.attributes being stripped by default strip behaviour.
We probably should be keeping these relocations, but I haven't made
that change here.
BTW, the new test fails on ia64-hpux but that's just a repeat of the
existing note-5 fail.

PR 31999
* testsuite/binutils-all/strip-16.d: strip with --strip-unneeded
and --merge-notes.
* testsuite/binutils-all/objcopy.exp: Run the new test.  Sort
other strip tests.

3 months agobinutils: Add a test for strip with build notes
H.J. Lu [Sat, 20 Jul 2024 01:59:53 +0000 (18:59 -0700)]
binutils: Add a test for strip with build notes

Add a test for strip with build notes.

PR binutils/31999
* testsuite/binutils-all/strip-16.d: New.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
3 months agoPR31999 strip [.gnu.build.attributes]: failed
Alan Modra [Sat, 20 Jul 2024 00:38:32 +0000 (10:08 +0930)]
PR31999 strip [.gnu.build.attributes]: failed

PR 31999
* objcopy.c (merge_gnu_build_notes): Always set *new_size.

3 months agoAutomatic date update in version.in
GDB Administrator [Sat, 20 Jul 2024 00:00:17 +0000 (00:00 +0000)]
Automatic date update in version.in

3 months agogdb-gdb.py: strip typedefs in intrusive_list printer assertion
Simon Marchi [Wed, 17 Jul 2024 16:10:57 +0000 (12:10 -0400)]
gdb-gdb.py: strip typedefs in intrusive_list printer assertion

When debugging gdb itself and trying to print a intrusive_list that has
more than one element, I get:

    File "/home/simark/build/binutils-gdb-all-targets/gdb/gdb-gdb.py", line 365, in _children_generator
      node_ptr = self._as_node_ptr(elem_ptr)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/home/simark/build/binutils-gdb-all-targets/gdb/gdb-gdb.py", line 345, in _as_node_ptr
      assert elem_ptr.type.code == gdb.TYPE_CODE_PTR
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    AssertionError

This is because node_ptr is a typedef
(intrusive_list_base_iterator::pointer).  Add a call to strip_typedefs
to get to the real type.

Enhance gdb.gdb/python-helper.exp with a test that would have caught
this bug.

Change-Id: I3eaca8de5ed06d05756ed979332b6a431e15b700
Approved-By: Andrew Burgess <aburgess@redhat.com>
3 months agoMIPS/opcodes: Replace "y" microMIPS operand code with "x"
Maciej W. Rozycki [Fri, 19 Jul 2024 18:01:53 +0000 (19:01 +0100)]
MIPS/opcodes: Replace "y" microMIPS operand code with "x"

Replace the "y" microMIPS operand code, used with ALNV.PS only, with "x"
so as to make "y" available for microMIPS MT use.

3 months agoMIPS/opcodes: Mark MT thread context move assembly idioms as aliases
Maciej W. Rozycki [Fri, 19 Jul 2024 18:01:53 +0000 (19:01 +0100)]
MIPS/opcodes: Mark MT thread context move assembly idioms as aliases

A number of instructions in the regular MIPS opcode table are assembly
idioms for the MT thread context move MFTR and MTTR instructions, so
mark them as aliases accordingly.  Add suitable test cases, which also
cover the PAUSE assembly idiom.

3 months agoMIPS/opcodes: Mark PAUSE as an alias
Maciej W. Rozycki [Fri, 19 Jul 2024 18:01:53 +0000 (19:01 +0100)]
MIPS/opcodes: Mark PAUSE as an alias

PAUSE is an assembly idiom for 'sll $0,$0,5', so mark it as an alias in
the regular MIPS opcode table, matching the microMIPS opcode table.  A
test case will be supplied separately.

3 months agoMIPS/GAS/testsuite: Run the MT ASE test across architectures
Maciej W. Rozycki [Fri, 19 Jul 2024 18:01:53 +0000 (19:01 +0100)]
MIPS/GAS/testsuite: Run the MT ASE test across architectures

Verify that MT ASE instructions assemble and disassemble correctly
across the compatible architectures.

3 months agoMIPS/opcodes: Reorder coprocessor moves alphabetically
Maciej W. Rozycki [Fri, 19 Jul 2024 18:01:53 +0000 (19:01 +0100)]
MIPS/opcodes: Reorder coprocessor moves alphabetically

A number of coprocessor move encodings have been randomly sprinkled over
the regular MIPS and microMIPS opcode tables rather than where they'd be
expected following the alphabetic order.  Fix the ordering, taking into
account precedence where it has to be observed for correct disassembly.
No functional change.

3 months agoMIPS/opcodes: Make AL a shorthand for INSN2_ALIAS
Maciej W. Rozycki [Fri, 19 Jul 2024 18:01:52 +0000 (19:01 +0100)]
MIPS/opcodes: Make AL a shorthand for INSN2_ALIAS

Make AL a shorthand for INSN2_ALIAS with the regular MIPS and microMIPS
opcode tables, just as with the MIPS16 opcode table, and use it
throughout.  No functional change.

3 months agoMIPS/opcodes: Rename the AL membership shorthand to ALX
Maciej W. Rozycki [Fri, 19 Jul 2024 18:01:52 +0000 (19:01 +0100)]
MIPS/opcodes: Rename the AL membership shorthand to ALX

Make room for AL as a shorthand for INSN2_ALIAS with the regular MIPS
opcode table, just as with the MIPS16 opcode table.  No functional
change.

3 months agoMIPS/opcodes: Remove the regular MIPS "+t" operand code
YunQiang Su [Fri, 19 Jul 2024 18:01:52 +0000 (19:01 +0100)]
MIPS/opcodes: Remove the regular MIPS "+t" operand code

The semantics of the regular MIPS "+t" operand code is exactly the same
as that of the "E" operand code, so replace the former with the latter
in the single MFTC0 instruction with implicit 'sel' == 0 encoding where
it's used, matching the encoding with explicit 'sel' as well as other
instructions.

3 months agoMIPS/opcodes: Output thread context registers numerically with MFTR/MTTR
Maciej W. Rozycki [Fri, 19 Jul 2024 18:01:52 +0000 (19:01 +0100)]
MIPS/opcodes: Output thread context registers numerically with MFTR/MTTR

We print MFTR and MTTR instructions' thread context register operand in
disassembly using the ABI name the register number would correspond to
should the targeted register be a general-purpose register.

However in most cases it is wrong, because general-purpose registers are
only referred when the 'u' and 'sel' operands are 1 and 0 respectively.
And even in these cases the MFGPR and MTGPR aliases take precedence over
the corresponding generic instruction encodings, so you won't see the
valid case to normally trigger.

Conversely decoding the thread context register operand numerically is
always valid, so switch to using it.  Adjust test coverage accordingly.

3 months agoMIPS/opcodes: Discard unused OP_SH, OP_MASK, and OP_OP macros
Maciej W. Rozycki [Fri, 19 Jul 2024 10:42:16 +0000 (11:42 +0100)]
MIPS/opcodes: Discard unused OP_SH, OP_MASK, and OP_OP macros

As from commit ab90248154ba ("Add structures to describe MIPS
operands"), <https://sourceware.org/ml/binutils/2013-07/msg00135.html>,
the use of numerous regular MIPS and microMIPS OP_SH and OP_MASK macros
has been removed.

Similarly as from commit c3c0747817f4 ("Use operand structures for
MIPS16"), <https://sourceware.org/ml/binutils/2013-07/msg00136.html>,
the use of numerous MIPS16 OP_SH and OP_MASK macros has been removed.

And as from commit 9e12b7a2b022 ("Rewrite main mips_ip parsing loop"),
<https://sourceware.org/ml/binutils/2013-07/msg00139.html>, none of the
OP_OP macros are used anymore.

Discard all the unused macros then and only keep the small subset that
is still referred.  This simplifies maintenance and removes the need to
keep the artificial arrangement where some regular MIPS and microMIPS
macros expand to 0 and are kept for compatibility with the opposite ISA
mode only, as it used to be required before the commit referred.

3 months agoMIPS/opcodes: Correct documentation for R6 operand types
Maciej W. Rozycki [Fri, 19 Jul 2024 10:42:16 +0000 (11:42 +0100)]
MIPS/opcodes: Correct documentation for R6 operand types

The "-t", "-u", "-v", and "-w" operand types refer 'rt' operand, which
is the target register rather than the source register.  Additionally
the "-x" and "-y" R6 operand types refer 'rs' rather than 'rt' operand
of the BOVC/BNVC and the BEQC/BNEC instructions respectively.  Also the
"-x" operand type does not permit 'rs' to be the same as 'rt'.

Correct inline documentation in opcode/mips.h accordingly.

3 months agoMIPS/opcodes: Exclude $0 from "-x" R6 operand type
Maciej W. Rozycki [Fri, 19 Jul 2024 10:42:16 +0000 (11:42 +0100)]
MIPS/opcodes: Exclude $0 from "-x" R6 operand type

The "-x" operand type is used for the reverse encoding of the BOVC and
BNVC instructions, where 'rs' and 'rt' have been supplied as the second
and the first operand respectively rather than the order the instruction
expects.

In this case we require the register associated with the "-x" operand to
have a higher number than the register associated with the preceding "t"
operand, which precludes the use of $0.  The case where 'rs' and 'rt'
both refer to the same register is handled by the straight encoding of
the BOVC and BNVC instructions, which come in the opcode table ahead of
the corresponding reverse encoding.

Therefore clear the ZERO_OK flag for the "-x" operand.  No need for an
extra test case as the encodings involved are already covered by "r6"
and its associated GAS tests.

3 months agoSparc: relax gas testsuite whitespace expectations
Jan Beulich [Fri, 19 Jul 2024 09:58:58 +0000 (11:58 +0200)]
Sparc: relax gas testsuite whitespace expectations

In a subsequent change the scrubber is going to be changed to retain
further whitespace. Test case expectations generally would better not
depend on the specific whitespace treatment by the scrubber, unless of
course a test is specifically about it. Adjust relevant test cases to
permit blanks where those will subsequently appear.

3 months agoTilePro: correct macro use in gas testsuite
Jan Beulich [Fri, 19 Jul 2024 09:58:26 +0000 (11:58 +0200)]
TilePro: correct macro use in gas testsuite

Whitespace in macro arguments either needs quoting / parenthesizing to
reliably not be mistaken for an argument separator, or respective macro
parameters need to be marked as covering all remaining arguments. The
latter appears more appropriate (and far less intrusive) here.

3 months agoMIPS: correct macro use in gas and ld testsuites
Jan Beulich [Fri, 19 Jul 2024 09:58:04 +0000 (11:58 +0200)]
MIPS: correct macro use in gas and ld testsuites

Whitespace in macro arguments either needs quoting / parenthesizing to
reliably not be mistaken for an argument separator, or respective macro
parameters need to be marked as covering all remaining arguments. The
former appears more appropriate here, as the macro parameters already
have ":req".

3 months agoia64: correct macro use in gas testsuite
Jan Beulich [Fri, 19 Jul 2024 09:57:12 +0000 (11:57 +0200)]
ia64: correct macro use in gas testsuite

Whitespace in macro arguments either needs quoting / parenthesizing to
reliably not be mistaken for an argument separator, or respective macro
parameters need to be marked as covering all remaining arguments. The
latter appears more appropriate here.

3 months agobfin: drop _ASSIGN_BANG
Jan Beulich [Fri, 19 Jul 2024 09:56:46 +0000 (11:56 +0200)]
bfin: drop _ASSIGN_BANG

A few testcases demonstrate that "=!" isn't supposed to be an
individual token, since "= !" is used in a number of places. So far
lexing that to a single token worked because of the scrubber being
overly aggressive in removing whitespace. As that's going to change,
replace uses by separate ASSIGN and BANG.

3 months agobfin: correct macro use in gas testsuite
Jan Beulich [Fri, 19 Jul 2024 09:56:20 +0000 (11:56 +0200)]
bfin: correct macro use in gas testsuite

Whitespace in macro arguments either needs quoting / parenthesizing to
reliably not be mistaken for an argument separator, or respective macro
parameters need to be marked as covering all remaining arguments. The
latter really isn't an option here.

3 months agoArm: correct macro use in gas testsuite
Jan Beulich [Fri, 19 Jul 2024 09:55:54 +0000 (11:55 +0200)]
Arm: correct macro use in gas testsuite

The way the inner macro invocations are written doesn't quite work as
expected (and would actually break subsequently): Due to overly
aggressive removal of whitespace by the scrubber, the incoming \sym and
\offset arguments actually get concatenated; an empty 3rd argument is
being passed to ldrtest2. That just so happened to work as intended; any
use of \offset alone would have exposed the problem. Quote the 3rd
argument, thus retaining enough whitespace to be independent of scrubber
internals.

3 months agogas: adjust impossible/bogus M68K/MRI special case when scrubbing
Jan Beulich [Fri, 19 Jul 2024 09:54:45 +0000 (11:54 +0200)]
gas: adjust impossible/bogus M68K/MRI special case when scrubbing

State 1 is uniformly handled further up. And it is highly questionable
that in state 10 (i.e. after having seen not only a possible label, but
also an opcode), which is about to go away anyway, a line comment char
could still be meant to take effect. With the state checking dropped,
the immediately preceding logic can then also be simplified.

3 months agogas: consistently drop trailing whitespace when scrubbing
Jan Beulich [Fri, 19 Jul 2024 09:54:09 +0000 (11:54 +0200)]
gas: consistently drop trailing whitespace when scrubbing

From especially the checks for the two separator forms it appears to
follow that the construct being touched is about trailing whitespace. In
such a case, considering that for many targets ordinary and line comment
chars overlap, take into account that line comment chars override
ordinary ones in lex[] (logic elsewhere in do_scrub_chars() actually
depends on that ordering, and also accounts for this overriding).

Plus of course IS_NEWLINE() would better also be consulted. Note also
that the DOUBLESLASH_LINE_COMMENTS change should generally have no
effect just yet; it's a prereq for a later change but better fits here.

Leave respective comments as well, and update documentation to correct
which comment form is actually replaced by a single blank (i.e. neither
the ones starting with what {,tc_}comment_chars[] has nor the ones
starting with what line_comment_chars[] has).

3 months agogas: drop tic6x scrubber special case
Jan Beulich [Fri, 19 Jul 2024 09:53:24 +0000 (11:53 +0200)]
gas: drop tic6x scrubber special case

Two successive PUT() without a state change in between can't be right:
The first PUT() may take the "goto tofull" path, leading to the
subsequent character being processed later in the previously set state
(1 in this case), rather than the state we were in upon entry to the
switch() (13 in this case).

However, the original purpose of that logic appears to be to not mistake
"|| ^" for "||^". This effect, sadly, looks to not have been achieved.
Therefore drop the special case altogether; something that actually
achieves the (presumably) intended effect may then be introduced down
the road.

3 months agogas: pre-init the scrubber's lex[]
Jan Beulich [Fri, 19 Jul 2024 09:52:50 +0000 (11:52 +0200)]
gas: pre-init the scrubber's lex[]

While we can't - unlike an old comment suggests - do this fully, we can
certainly do part of this at compile time.

Since it's adjacent, also drop the unnecessary forward declaration of
process_escape().

3 months agox86: accept whitespace inside curly braces
Jan Beulich [Fri, 19 Jul 2024 09:52:21 +0000 (11:52 +0200)]
x86: accept whitespace inside curly braces

Other than documented /**/ comments currently aren't really converted to
a single space, at least not for x86 in its most common configurations.
That'll be fixed subsequently, at which point blanks may appear where so
far none were expected. Furthermore not permitting blanks immediately
inside curly braces wasn't quite logical anyway - such constructs are
composite ones, and hence components ought to have been permitted to be
separated by whitespace from the very beginning.

With this we also don't care anymore whether the scrubber would remove
whitespace around curly braces, so move them from extra_symbol_chars[]
to operand_special_chars[].

Note: The new testcase doesn't actually exercise much (if any) of the
added code. It is being put in place to ensure that subsequently, when
that code actually comes into play, behavior remains the same.

3 months agox86: undo '{' being a symbol-start character
Jan Beulich [Fri, 19 Jul 2024 09:44:07 +0000 (11:44 +0200)]
x86: undo '{' being a symbol-start character

Having it that way has undue side effects, in permitting not only
pseudo-prefixes to be parsed correctly, but also permitting odd symbol
names which ought to be possible only when quoted.  Borrow what other
architectures do: Put in place an "unrecognized line" hook to parse off
any pseudo prefixes, while using the "start of line" hook to reject ones
not actually followed by an insn. For that parsing re-use parse_insn()
in yet a slightly different mode (dealing with only pseudo-prefixes).

With that, pp may no longer be cleared from init_globals(), but instead
needs clearing after a line was fully processed. Since md_assemble() has
pretty many return paths, convert that into a local helper, with a
trivial wrapper around it.

Similarly pp may no longer be updated (by check_register()) when
processing anything other than insn operands. To be able to (easily)
recognize the case, clear current_templates.start when done with an insn
(or with .insn).

3 months agox86: split pseudo-prefix state from i386_insn
Jan Beulich [Fri, 19 Jul 2024 09:43:37 +0000 (11:43 +0200)]
x86: split pseudo-prefix state from i386_insn

Subsequently we will want to update that ahead of md_assemble(), with
that function needing to take into account such earlier updating.
Therefore it'll want resetting separately from i.

3 months agox86/APX: add CMPcc/CTESTcc cases to noreg64 tests
Jan Beulich [Fri, 19 Jul 2024 08:54:22 +0000 (10:54 +0200)]
x86/APX: add CMPcc/CTESTcc cases to noreg64 tests

This was missed when support for the insns was added. Just like for
DATA16, in

rex64 neg (%rax)
rex64 neg (%r16)
rex64 {nf} neg (%rax)

it is not logical why the last one shouldn't be permitted. Bypassing
that check requires other adjustments, though, to actually properly
consume (and then squash) the prefix.

3 months agobfin: free the allocated memory
zhangxianting [Fri, 19 Jul 2024 08:53:12 +0000 (10:53 +0200)]
bfin: free the allocated memory

3 months agoMIPS/GAS/testsuite: Also verify trap expansions of multiplication macros
Maciej W. Rozycki [Fri, 19 Jul 2024 08:42:56 +0000 (09:42 +0100)]
MIPS/GAS/testsuite: Also verify trap expansions of multiplication macros

Provide 'mul' test variants for trap expansions as requested by the
'-trap' command-line option, and run them across all the compatible
architectures.

3 months agoMIPS/GAS/testsuite: Split mul test into 32-bit and 64-bit parts
Maciej W. Rozycki [Fri, 19 Jul 2024 08:42:56 +0000 (09:42 +0100)]
MIPS/GAS/testsuite: Split mul test into 32-bit and 64-bit parts

Enable full 32-bit and 64-bit multiplication macro verification, by
splitting the 'mul' test into two parts respectively, and run them
across all the compatible architectures.

3 months agoMIPS/GAS/testsuite: Run the mul macro test across architectures
Maciej W. Rozycki [Fri, 19 Jul 2024 08:42:56 +0000 (09:42 +0100)]
MIPS/GAS/testsuite: Run the mul macro test across architectures

The multiplication macros expand differently based on the ISA chosen, so
run the 'mul' macro test across compatible architectures, adopting the
'mul-ilocks' test orphaned by commit 23fce1e31156 ("MIPS16 intermix test
failure"), <https://sourceware.org/ml/binutils/2009-01/msg00335.html>,
and providing coverage for the expansion variants.

Only run from MIPS III up for now and remove the ISA override from the
source, so that the 64-bit instructions are covered for individual
64-bit architectures.

3 months agoMIPS/GAS/testsuite: Also verify trap expansions of division macros
Maciej W. Rozycki [Fri, 19 Jul 2024 08:42:56 +0000 (09:42 +0100)]
MIPS/GAS/testsuite: Also verify trap expansions of division macros

Provide 'div' test variants for trap expansions as requested by the
'-trap' command-line option, and run them across all the compatible
architectures.

3 months agoMIPS/GAS/testsuite: Split div test into 32-bit and 64-bit parts
Maciej W. Rozycki [Fri, 19 Jul 2024 08:42:56 +0000 (09:42 +0100)]
MIPS/GAS/testsuite: Split div test into 32-bit and 64-bit parts

Enable full 32-bit and 64-bit division macro verification, by splitting
the 'div' test into two parts respectively, and run them across all the
compatible architectures.

3 months agoMIPS/GAS/testsuite: Run the div macro test across architectures
Maciej W. Rozycki [Fri, 19 Jul 2024 08:42:56 +0000 (09:42 +0100)]
MIPS/GAS/testsuite: Run the div macro test across architectures

The division macros expand differently depending on the ISA selected, so
run the 'div' macro test across compatible architectures, adopting the
'div-ilocks' test orphaned by commit 23fce1e31156 ("MIPS16 intermix test
failure"), <https://sourceware.org/ml/binutils/2009-01/msg00335.html>,
and providing coverage for the expansion variants.

Only run from MIPS III up for now and remove the ISA override from the
source, so that the 64-bit instructions are covered for individual
64-bit architectures.

3 months agoMIPS/GAS: Handle --trap command-line option dynamically
Maciej W. Rozycki [Fri, 19 Jul 2024 08:42:56 +0000 (09:42 +0100)]
MIPS/GAS: Handle --trap command-line option dynamically

We have an ISA check for the '--trap' command-line option that reports
its incompatibility with the MIPS I architecture.  It doesn't prevent
trap instructions from being enabled though, so when attempt is made to
emit one in an expansion of one of the division or multiplication macros
an assertion failure triggers:

.../gas/testsuite/gas/mips/brtr-opt.s: Assembler messages:
.../gas/testsuite/gas/mips/brtr-opt.s:3: Error: trap exception not supported at ISA 1
.../gas/testsuite/gas/mips/brtr-opt.s:9: Warning: divide by zero
.../gas/testsuite/gas/mips/brtr-opt.s:9: Internal error in macro_build at .../gas/config/tc-mips.c:9064.
Please report this bug.

The same assertion failure triggers without an earlier error message
when the initial ISA is compatible with the '--trap', however at the
time an attempt is made to emit a trap instruction from a division or
multiplication macro the ISA has been changed by a '.set' pseudo-op to
an incompatible one.

With the way the situations are mishandled it seems unlikely that anyone
relies on the current semantics and a sane approach is to decide on the
fly according to the currently selected ISA as to whether to emit trap
or breakpoint instructions in the case where '--trap' has been used.

Change our code to do so then and clarify that in the manual, which is
not explicit about how '--trap' is handled with a changing ISA.  Mention
the change in NEWS too since it's a applies to a user option.

3 months agoMIPS/GAS/testsuite: Add R10000 CPU architecture
Maciej W. Rozycki [Fri, 19 Jul 2024 08:42:56 +0000 (09:42 +0100)]
MIPS/GAS/testsuite: Add R10000 CPU architecture

Add a fully interlocked MIPS IV CPU so that we can have coverage for
MIPS IV instruction sequences with and without instruction separation
required for a HI/LO data anti-dependency.

3 months agoMIPS/GAS/testsuite: Reorder R5900 CPU architecture definition
Maciej W. Rozycki [Fri, 19 Jul 2024 08:42:56 +0000 (09:42 +0100)]
MIPS/GAS/testsuite: Reorder R5900 CPU architecture definition

The R5900 CPU architecture is based on MIPS III, so move it ahead of
MIPS IV CPU architecture definitions.  No functional change.

3 months agogas: aarch64: testsuite: add new tests for SCFI
Indu Bhagat [Fri, 19 Jul 2024 03:24:44 +0000 (20:24 -0700)]
gas: aarch64: testsuite: add new tests for SCFI

Similar to the x86_64 testcases, some .s files contain the corresponding
CFI directives.  This helps in validating the synthesized CFI by running
those tests with and without the --scfi=experimental command line
option.

GAS issues some diagnostics, enabled by default, with
--scfi=experimental.  The diagnostics have been added with an intent to
help user correct inadvertent errors in their hand-written asm.  An
error is issued when GAS finds that input asm is not amenable to
accurate CFI synthesis.  The existing scfi-diag-*.s tests in the
gas/testsuite/gas/scfi/x86_64 directory test some SCFI diagnostics
already:

      - (#1) "Warning: SCFI: Asymetrical register restore"
      - (#2) "Error: SCFI: usage of REG_FP as scratch not supported"
      - (#3) "Error: SCFI: unsupported stack manipulation pattern"
      - (#4) "Error: untraceable control flow for func 'XXX'"

In the newly added aarch64 testsuite, further tests for additional
diagnostics have been added:
 - scfi-diag-1.s in this patch highlights an aarch64-specific diagnostic:
   (#5) "Warning: SCFI: ignored probable save/restore op with reg offset"

Additionally, some testcases are added to showcase the (currently)
unsupported patterns, e.g., scfi-unsupported-1.s
        mov     x16, 4384
        sub     sp, sp, x16

gas/testsuite/:
* gas/scfi/README: Update comment to include aarch64.
* gas/scfi/aarch64/scfi-aarch64.exp: New file.
* gas/scfi/aarch64/ginsn-arith-1.l: New test.
* gas/scfi/aarch64/ginsn-arith-1.s: New test.
* gas/scfi/aarch64/ginsn-cofi-1.l: New test.
* gas/scfi/aarch64/ginsn-cofi-1.s: New test.
* gas/scfi/aarch64/ginsn-ldst-1.l: New test.
* gas/scfi/aarch64/ginsn-ldst-1.s: New test.
* gas/scfi/aarch64/scfi-callee-saved-fp-1.d: New test.
* gas/scfi/aarch64/scfi-callee-saved-fp-1.l: New test.
* gas/scfi/aarch64/scfi-callee-saved-fp-1.s: New test.
* gas/scfi/aarch64/scfi-callee-saved-fp-2.d: New test.
* gas/scfi/aarch64/scfi-callee-saved-fp-2.l: New test.
* gas/scfi/aarch64/scfi-callee-saved-fp-2.s: New test.
* gas/scfi/aarch64/scfi-cb-1.d: New test.
* gas/scfi/aarch64/scfi-cb-1.l: New test.
* gas/scfi/aarch64/scfi-cb-1.s: New test.
* gas/scfi/aarch64/scfi-cfg-1.d: New test.
* gas/scfi/aarch64/scfi-cfg-1.l: New test.
* gas/scfi/aarch64/scfi-cfg-1.s: New test.
* gas/scfi/aarch64/scfi-cfg-2.d: New test.
* gas/scfi/aarch64/scfi-cfg-2.l: New test.
* gas/scfi/aarch64/scfi-cfg-2.s: New test.
* gas/scfi/aarch64/scfi-cfg-3.d: New test.
* gas/scfi/aarch64/scfi-cfg-3.l: New test.
* gas/scfi/aarch64/scfi-cfg-3.s: New test.
* gas/scfi/aarch64/scfi-cfg-4.l: New test.
* gas/scfi/aarch64/scfi-cfg-4.s: New test.
* gas/scfi/aarch64/scfi-cond-br-1.d: New test.
* gas/scfi/aarch64/scfi-cond-br-1.l: New test.
* gas/scfi/aarch64/scfi-cond-br-1.s: New test.
* gas/scfi/aarch64/scfi-diag-1.l: New test.
* gas/scfi/aarch64/scfi-diag-1.s: New test.
* gas/scfi/aarch64/scfi-diag-2.l: New test.
* gas/scfi/aarch64/scfi-diag-2.s: New test.
* gas/scfi/aarch64/scfi-diag-3.l: New test.
* gas/scfi/aarch64/scfi-diag-3.s: New test.
* gas/scfi/aarch64/scfi-ldrp-1.d: New test.
* gas/scfi/aarch64/scfi-ldrp-1.l: New test.
* gas/scfi/aarch64/scfi-ldrp-1.s: New test.
* gas/scfi/aarch64/scfi-ldrp-2.d: New test.
* gas/scfi/aarch64/scfi-ldrp-2.l: New test.
* gas/scfi/aarch64/scfi-ldrp-2.s: New test.
* gas/scfi/aarch64/scfi-ldstnap-1.d: New test.
* gas/scfi/aarch64/scfi-ldstnap-1.l: New test.
* gas/scfi/aarch64/scfi-ldstnap-1.s: New test.
* gas/scfi/aarch64/scfi-strp-1.d: New test.
* gas/scfi/aarch64/scfi-strp-1.l: New test.
* gas/scfi/aarch64/scfi-strp-1.s: New test.
* gas/scfi/aarch64/scfi-strp-2.d: New test.
* gas/scfi/aarch64/scfi-strp-2.l: New test.
* gas/scfi/aarch64/scfi-strp-2.s: New test.
* gas/scfi/aarch64/scfi-unsupported-1.l: New test.
* gas/scfi/aarch64/scfi-unsupported-1.s: New test.
* gas/scfi/aarch64/scfi-unsupported-2.l: New test.
* gas/scfi/aarch64/scfi-unsupported-2.s: New test.

3 months agogas: aarch64: add experimental support for SCFI
Indu Bhagat [Fri, 19 Jul 2024 03:24:38 +0000 (20:24 -0700)]
gas: aarch64: add experimental support for SCFI

For synthesizing CFI (SCFI) for hand-written asm, the SCFI machinery in
GAS works on the generic GAS insns (ginsns).  This patch adds support in
the aarch64 backend to create ginsns for a subset of the supported
machine instructions.  The subset includes the minimal necessary
instructions to ensure SCFI correctness:

- Any potential register saves and unsaves.  Hence, process instructions
  belonging to a variety of iclasses involving str, ldr, stp, ldp.
- Any change of flow instructions.  This includes all conditional and
  unconditional branches, call (bl, blr, etc.) and return.
- Most importantly, any instruction that could affect the two registers
  of interest: REG_SP, REG_FP.  This set includes all pre-indexed and
  post-indexed memory operations, with writeback, on the stack.  This
  set must also include other instructions (e.g., arithmetic insns)
  where the destination register is one of the afore-mentioned registers.

With respect to callee-saved registers in Aarch64, FP/Advanced SIMD
registers D8-D15 are included along with the relevant GPRs.  Calculating
offsets for loads and stores especially for Q registers needs special
attention here.

As an example,
   str q8, [sp, #16]
On big-endian:
   STR Qn stores as a 128-bit integer (MSB first), hence, should record
   D8 as being saved at sp+24 rather than sp+16.
On little-endian:
   should record D8 as being saved at sp+16

D8-D15 are the low 64 bits of Q8-Q15, and of Z8-Z15 if SVE is used;
hence, they remain "interesting" for SCFI purposes in such cases.  A CFI
save slot always represents the low 64 bits, regardless of whether a
save occurs on D, Q or Z registers.  Currently, the ginsn creation
machinery can handle D and Q registers on little-endian and big-endian.

Apart from creating ginsn, another key responsibility of the backend is
to make sure there are safeguards in place to detect and alert if an
instruction of interest may have been skipped.  This is done via
aarch64_ginsn_unhandled () (similar to the x86 backend).  This function
, hence, is also intended to alert when future ISA changes may otherwise
render SCFI results incorrect, because of missing ginsns for the newly
added machine instructions.

At this time, becuase of the complexities wrt endianness in handling Z
register usage, skip sve_misc opclass altogether for now.  The SCFI
machinery will error out (using the aarch64_ginsn_unhandled () code
path) though if Z register usage affects correctness.

The current SCFI machinery does not currently synthesize the
PAC-related, aarch64-specific CFI directives: .cfi_b_key_frame.  The
support for this is planned for near future.

SCFI is enabled for ELF targets only.

gas/
* config/tc-aarch64-ginsn.c: New file.
* config/tc-aarch64.c (md_assemble): Include tc-aarch64-ginsn.c
file.  Invoke aarch64_ginsn_new.
* config/tc-aarch64.h (TARGET_USE_GINSN): Define for SCFI
enablement.
(TARGET_USE_SCFI): Likewise.
(SCFI_MAX_REG_ID): New definition.
(REG_FP): Likewise.
(REG_LR): Likewise.
(REG_SP): Likewise.
(SCFI_INIT_CFA_OFFSET): Likewise.
(SCFI_CALLEE_SAVED_REG_P): Likewise.
(aarch64_scfi_callee_saved_p): New declaration.

3 months agoopcodes: aarch64: enforce checks on subclass flags in aarch64-gen.c
Indu Bhagat [Fri, 19 Jul 2024 03:24:35 +0000 (20:24 -0700)]
opcodes: aarch64: enforce checks on subclass flags in aarch64-gen.c

Enforce some checks on the newly added subclass flags:
  - If a subclass is set of one insn of an iclass, every insn of that
    iclass must have non-zero subclass field.
  - For all other iclasses, the subclass bits are zero for all insns.

include/
        * opcode/aarch64.h (enum aarch64_insn_class): Identify the
maximum iclass enum value.

opcodes/
        * aarch64-gen.c (iclass_has_subclasses_p): New array of bool.
        (read_table): Enforce checks on subclass flags.

3 months agoopcodes: aarch64: denote subclasses for insns of iclass dp_2src
Indu Bhagat [Fri, 19 Jul 2024 03:24:30 +0000 (20:24 -0700)]
opcodes: aarch64: denote subclasses for insns of iclass dp_2src

For detecting irg, add a subclass to identify it in the set of
instructions of iclass dp_2src.

opcodes/
* aarch64-tbl.h: Add subclass flag F_DP_TAG_ONLY for irg insn.

3 months agoopcodes: aarch64: add flags to denote subclasses of uncond branches
Indu Bhagat [Fri, 19 Jul 2024 03:24:26 +0000 (20:24 -0700)]
opcodes: aarch64: add flags to denote subclasses of uncond branches

Use the two new subclass flags: F_BRANCH_CALL, F_BRANCH_RET, to indicate
call to and return from subroutine respectively.

opcodes/
* aarch64-tbl.h: Use the new F_BRANCH_* flags.

3 months agoopcodes: aarch64: add flags to denote subclasses of arithmetic insns
Indu Bhagat [Fri, 19 Jul 2024 03:24:22 +0000 (20:24 -0700)]
opcodes: aarch64: add flags to denote subclasses of arithmetic insns

Use the three new subclass flags: F_ARITH_ADD, F_ARITH_SUB,
F_ARITH_MOV, to indicate add, sub and mov ops respectively.

These flags for subclasses will later be used for SCFI purposes to
create appropriate ginsns.  At this time, only those iclasses relevant
to SCFI have the new subclass flags specified.

For addg and subg insns, F_SUBCLASS_OTHER is more suitable because these
operations do more than just simple add or sub.

opcodes/
    * aarch64-tbl.h: Use the new F_ARITH_* flags.

3 months agoopcodes: aarch64: add flags to denote subclasses of ldst insns
Indu Bhagat [Fri, 19 Jul 2024 03:24:16 +0000 (20:24 -0700)]
opcodes: aarch64: add flags to denote subclasses of ldst insns

The existing iclass information tells us the general shape and purpose
of the instructions.  In some cases, however, we need to further disect
the iclass on the basis of other finer-grain information.  E.g., for the
purpose of SCFI, we need to know whether a given insn with iclass
of ldst_* is a load or a store.

At the moment, specify subclasses for only those iclasses relevant to
SCFI: ldst_imm9, ldst_pos, ldstpair_indexed, ldstpair_off and
ldstnapair_offs.

Some insns are best tagged with F_SUBCLASS_OTHER rather than F_LDST_LOAD
or F_LDST_STORE:
  - stg* ops (as they store tag only),
  - prfm,
  - ldpsw, ldrsw (32-bit loads with signed extended value.  Not useful
    for restore operations in context of SCFI.)
  - Use F_SUBCLASS_OTHER for all QL_LDST_R8 and QL_LDST_R16 operands.
    Also use F_SUBLASS_OTHER for strb/ldrb, strh/ldrh opcodes.
    These are not full loads and stores and cannot be allowed for
    register save / restore for the purpose of SCFI.

opcodes/
    * aarch64-tbl.h: Use the new F_LDST_* flags.