[PATCH v5 14/20] ld tests for generic merge coverage of Object Attributes v2

Richard Earnshaw (lists) Richard.Earnshaw@arm.com
Wed Jul 9 14:31:01 GMT 2025


On 07/07/2025 17:49, Matthieu Longo wrote:
> Test cases:
> - only one input object is copied to the output object
> - merge two inputs with optional subsections of both types
>   ULEB128 and NTBS, which contains same, additional, and
>   missing attributes.
> - mismatch subsection properties.
> - combine matching required subsections.
> - combine non-matching required subsections.
> - prune unknown attributes in known subsections.
> - prune unknown subsections.
> ---
>  .../aarch64-build-attributes.exp              | 47 +++++++++++++++++
>  .../build-attributes/ba-1-all-optional-1.s    | 15 ++++++
>  .../build-attributes/ba-1-all-optional-2.s    | 15 ++++++
>  ...ismatch-subsec-props-with-all-optional-1.d |  7 +++
>  ...ismatch-subsec-props-with-all-optional-1.s |  2 +
>  .../build-attributes/ba-1-one-file.d          | 42 +++++++++++++++
>  ...-1-two-files-all-optional-1more-1missing.d | 52 +++++++++++++++++++
>  ...nknown-and-known-attr-known-subsection-1.s | 11 ++++
>  ...nknown-and-known-attr-known-subsection-2.s | 11 ++++
>  ...-unknown-and-known-attr-known-subsection.d | 25 +++++++++
>  ...ba-2-mix-unknown-and-known-subsections-1.s | 19 +++++++
>  ...ba-2-mix-unknown-and-known-subsections-2.s | 19 +++++++
>  .../ba-2-mix-unknown-and-known-subsections.d  | 25 +++++++++
>  .../ba-2-required-subsec-A-1.s                |  3 ++
>  .../ba-2-required-subsec-A-2.s                |  3 ++
>  .../build-attributes/ba-2-required-subsec-B.s |  3 ++
>  .../ba-2-required-subsec-nok.d                |  7 +++
>  .../ba-2-required-subsec-ok.d                 | 16 ++++++
>  .../ld-aarch64/lib/aarch64-elf-lib.exp        |  2 +-
>  19 files changed, 323 insertions(+), 1 deletion(-)
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/aarch64-build-attributes.exp
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-1-all-optional-1.s
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-1-all-optional-2.s
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-1-mismatch-subsec-props-with-all-optional-1.d
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-1-mismatch-subsec-props-with-all-optional-1.s
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-1-one-file.d
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-1-two-files-all-optional-1more-1missing.d
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-attr-known-subsection-1.s
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-attr-known-subsection-2.s
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-attr-known-subsection.d
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-subsections-1.s
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-subsections-2.s
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-subsections.d
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-A-1.s
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-A-2.s
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-B.s
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-nok.d
>  create mode 100644 ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-ok.d
> 
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/aarch64-build-attributes.exp b/ld/testsuite/ld-aarch64/build-attributes/aarch64-build-attributes.exp
> new file mode 100644
> index 00000000000..655a6797145
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/aarch64-build-attributes.exp
> @@ -0,0 +1,47 @@
> +# Expect script for AARCH64 ELF tests related to GNU properties.
> +# Copyright (C) 2025 Free Software Foundation, Inc.
> +#
> +# This file is part of the GNU Binutils.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
> +# MA 02110-1301, USA.
> +
> +# Exclude non-aarch64-ELF targets.
> +if { ![is_elf_format] || ![istarget "aarch64*-*-*"] } {
> +  return
> +}
> +
> +load_file $srcdir/$subdir/../lib/aarch64-elf-lib.exp
> +
> +set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
> +
> +# See definition of run_ld_link_tests in testsuite/lib/ld-lib.exp for more
> +# details.
> +# set aarch64elflinktests {
> +#   {"Build bti-plt-so for PLT tests"
> +#    "-shared" ""
> +#    "-I$srcdir/$subdir -defsym __property_bti__=1"
> +#    {bti-plt-so.s} {} "libbti-plt-so.so"}
> +# }
> +
> +# if [check_shared_lib_support] {
> +#   run_ld_link_tests $aarch64elflinktests
> +# }
> +
> +foreach t $test_list {
> +  # We need to strip the ".d", but can leave the dirname.
> +  run_dump_test [file rootname $t] \
> +    [list [list as "-I\$srcdir/\$subdir"]]
> +}
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-1-all-optional-1.s b/ld/testsuite/ld-aarch64/build-attributes/ba-1-all-optional-1.s
> new file mode 100644
> index 00000000000..48662096d2b
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-1-all-optional-1.s
> @@ -0,0 +1,15 @@
> +.aeabi_subsection gnu-testing-ba-1-MERGE-AND, optional, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 0
> +
> +.aeabi_subsection gnu-testing-ba-2-MERGE-AND, optional, uleb128
> +.aeabi_attribute  0, 0
> +.aeabi_attribute  1, 1
> +
> +.aeabi_subsection gnu-testing-ba-3-MERGE-ADD, optional, ntbs
> +.aeabi_attribute  0, "hello"
> +.aeabi_attribute  1, "world"
> +
> +.aeabi_subsection gnu-testing-ba-5-MERGE-ADD, optional, ntbs
> +.aeabi_attribute  0, "hello"
> +.aeabi_attribute  1, "world"
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-1-all-optional-2.s b/ld/testsuite/ld-aarch64/build-attributes/ba-1-all-optional-2.s
> new file mode 100644
> index 00000000000..669fc769a2b
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-1-all-optional-2.s
> @@ -0,0 +1,15 @@
> +.aeabi_subsection gnu-testing-ba-1-MERGE-AND, optional, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 1
> +
> +.aeabi_subsection gnu-testing-ba-2-MERGE-AND, optional, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 1
> +
> +.aeabi_subsection gnu-testing-ba-4-MERGE-ADD, optional, ntbs
> +.aeabi_attribute  0, "foo"
> +.aeabi_attribute  1, "bar"
> +
> +.aeabi_subsection gnu-testing-ba-5-MERGE-ADD, optional, ntbs
> +.aeabi_attribute  0, "foo"
> +.aeabi_attribute  1, "bar"
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-1-mismatch-subsec-props-with-all-optional-1.d b/ld/testsuite/ld-aarch64/build-attributes/ba-1-mismatch-subsec-props-with-all-optional-1.d
> new file mode 100644
> index 00000000000..684da464345
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-1-mismatch-subsec-props-with-all-optional-1.d
> @@ -0,0 +1,7 @@
> +# name: Build attributes: mismatch subsection properties with ba-1-all-optional-1
> +# source: ba-1-all-optional-1.s
> +# source: ba-1-mismatch-subsec-props-with-all-optional-1.s
> +# as:
> +# ld: -shared
> +#error: \A[^\n]*ba-1-all-optional-1\.o, [^:]*ba-1-mismatch-subsec-props-with-all-optional-1\.o: error: parameters of subsection 'gnu-testing-ba-1-MERGE-AND' are mismatching. \(optional, uleb128\) VS \(required, uleb128\)\n
> +#error:   [^\n]*ba-1-all-optional-1\.o, [^:]*ba-1-mismatch-subsec-props-with-all-optional-1\.o: error: parameters of subsection 'gnu-testing-ba-2-MERGE-AND' are mismatching. \(optional, uleb128\) VS \(optional, ntbs\)
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-1-mismatch-subsec-props-with-all-optional-1.s b/ld/testsuite/ld-aarch64/build-attributes/ba-1-mismatch-subsec-props-with-all-optional-1.s
> new file mode 100644
> index 00000000000..4e7d7d29060
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-1-mismatch-subsec-props-with-all-optional-1.s
> @@ -0,0 +1,2 @@
> +.aeabi_subsection gnu-testing-ba-1-MERGE-AND, required, uleb128
> +.aeabi_subsection gnu-testing-ba-2-MERGE-AND, optional, ntbs
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-1-one-file.d b/ld/testsuite/ld-aarch64/build-attributes/ba-1-one-file.d
> new file mode 100644
> index 00000000000..f48c364c0c5
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-1-one-file.d
> @@ -0,0 +1,42 @@
> +# name: Build attributes: only one input object is copied to the output object
> +# source: ba-1-all-optional-1.s
> +# as:
> +# ld: -shared
> +# readelf: --arch-specific
> +
> +Subsections:
> + - Name:	  gnu-testing-ba-1-MERGE-AND
> +   Scope:	  private
> +   Length:	  37
> +   Comprehension: optional
> +   Encoding:	  ULEB128
> +   Values:
> +    Tag_unknown_0:	1 \(0x1\)
> +    Tag_unknown_1:	0 \(0x0\)
> +
> + - Name:	  gnu-testing-ba-2-MERGE-AND
> +   Scope:	  private
> +   Length:	  37
> +   Comprehension: optional
> +   Encoding:	  ULEB128
> +   Values:
> +    Tag_unknown_0:	0 \(0x0\)
> +    Tag_unknown_1:	1 \(0x1\)
> +
> + - Name:	  gnu-testing-ba-3-MERGE-ADD
> +   Scope:	  private
> +   Length:	  47
> +   Comprehension: optional
> +   Encoding:	  NTBS
> +   Values:
> +    Tag_unknown_0:	"hello"
> +    Tag_unknown_1:	"world"
> +
> + - Name:	  gnu-testing-ba-5-MERGE-ADD
> +   Scope:	  private
> +   Length:	  47
> +   Comprehension: optional
> +   Encoding:	  NTBS
> +   Values:
> +    Tag_unknown_0:	"hello"
> +    Tag_unknown_1:	"world"
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-1-two-files-all-optional-1more-1missing.d b/ld/testsuite/ld-aarch64/build-attributes/ba-1-two-files-all-optional-1more-1missing.d
> new file mode 100644
> index 00000000000..7e1133d384c
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-1-two-files-all-optional-1more-1missing.d
> @@ -0,0 +1,52 @@
> +# name: Build attributes: 2 files, all optional, 1 more, 1 missing
> +# source: ba-1-all-optional-1.s
> +# source: ba-1-all-optional-2.s
> +# as:
> +# ld: -shared
> +# readelf: --arch-specific
> +
> +Subsections:
> + - Name:	  gnu-testing-ba-1-MERGE-AND
> +   Scope:	  private
> +   Length:	  37
> +   Comprehension: optional
> +   Encoding:	  ULEB128
> +   Values:
> +    Tag_unknown_0:	1 \(0x1\)
> +    Tag_unknown_1:	0 \(0x0\)
> +
> + - Name:	  gnu-testing-ba-2-MERGE-AND
> +   Scope:	  private
> +   Length:	  37
> +   Comprehension: optional
> +   Encoding:	  ULEB128
> +   Values:
> +    Tag_unknown_0:	0 \(0x0\)
> +    Tag_unknown_1:	1 \(0x1\)
> +
> + - Name:	  gnu-testing-ba-3-MERGE-ADD
> +   Scope:	  private
> +   Length:	  47
> +   Comprehension: optional
> +   Encoding:	  NTBS
> +   Values:
> +    Tag_unknown_0:	"hello"
> +    Tag_unknown_1:	"world"
> +
> + - Name:	  gnu-testing-ba-4-MERGE-ADD
> +   Scope:	  private
> +   Length:	  43
> +   Comprehension: optional
> +   Encoding:	  NTBS
> +   Values:
> +    Tag_unknown_0:	"foo"
> +    Tag_unknown_1:	"bar"
> +
> + - Name:	  gnu-testing-ba-5-MERGE-ADD
> +   Scope:	  private
> +   Length:	  55
> +   Comprehension: optional
> +   Encoding:	  NTBS
> +   Values:
> +    Tag_unknown_0:	"hello\+foo"
> +    Tag_unknown_1:	"world\+bar"
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-attr-known-subsection-1.s b/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-attr-known-subsection-1.s
> new file mode 100644
> index 00000000000..0076d693231
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-attr-known-subsection-1.s
> @@ -0,0 +1,11 @@
> +.aeabi_subsection gnu-testing-ba-1-MERGE-AND, optional, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 1
> +.aeabi_attribute  2, 1 // Unknown tag
> +.aeabi_attribute  3, 1 // Unknown tag
> +
> +.aeabi_subsection gnu-testing-ba-2-MERGE-ADD, optional, ntbs
> +.aeabi_attribute  0, "foo"
> +.aeabi_attribute  1, "bar"
> +.aeabi_attribute  2, "foo2" // Unknown tag
> +.aeabi_attribute  3, "foo3" // Unknown tag
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-attr-known-subsection-2.s b/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-attr-known-subsection-2.s
> new file mode 100644
> index 00000000000..db468d5ae62
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-attr-known-subsection-2.s
> @@ -0,0 +1,11 @@
> +.aeabi_subsection gnu-testing-ba-1-MERGE-AND, optional, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 1
> +.aeabi_attribute  2, 1 // Unknown tag
> +.aeabi_attribute  4, 1 // Unknown tag
> +
> +.aeabi_subsection gnu-testing-ba-2-MERGE-ADD, optional, ntbs
> +.aeabi_attribute  0, "foo"
> +.aeabi_attribute  1, "bar"
> +.aeabi_attribute  2, "foo2" // Unknown tag
> +.aeabi_attribute  4, "foo4" // Unknown tag
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-attr-known-subsection.d b/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-attr-known-subsection.d
> new file mode 100644
> index 00000000000..be50da566da
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-attr-known-subsection.d
> @@ -0,0 +1,25 @@
> +# name: Build attributes: unknown attribute inside known subsection should be removed from the output.
> +# source: ba-2-mix-unknown-and-known-attr-known-subsection-1.s
> +# source: ba-2-mix-unknown-and-known-attr-known-subsection-2.s
> +# as:
> +# ld: -shared
> +# readelf: --arch-specific
> +
> +Subsections:
> + - Name:	  gnu-testing-ba-1-MERGE-AND
> +   Scope:	  private
> +   Length:	  37
> +   Comprehension: optional
> +   Encoding:	  ULEB128
> +   Values:
> +    Tag_unknown_0:	1 \(0x1\)
> +    Tag_unknown_1:	1 \(0x1\)
> +
> + - Name:	  gnu-testing-ba-2-MERGE-ADD
> +   Scope:	  private
> +   Length:	  51
> +   Comprehension: optional
> +   Encoding:	  NTBS
> +   Values:
> +    Tag_unknown_0:	"foo\+foo"
> +    Tag_unknown_1:	"bar\+bar"
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-subsections-1.s b/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-subsections-1.s
> new file mode 100644
> index 00000000000..07c328ac5f2
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-subsections-1.s
> @@ -0,0 +1,19 @@
> +.aeabi_subsection gnu-testing-ba-1-MERGE-AND, optional, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 0
> +
> +.aeabi_subsection private-1, optional, uleb128
> +.aeabi_attribute  0, 0
> +.aeabi_attribute  1, 1
> +
> +.aeabi_subsection private-2, optional, ntbs
> +.aeabi_attribute  0, "hello"
> +.aeabi_attribute  1, "world"
> +
> +.aeabi_subsection private-4, optional, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 1
> +
> +.aeabi_subsection gnu-testing-ba-2-MERGE-ADD, optional, ntbs
> +.aeabi_attribute  0, "hello"
> +.aeabi_attribute  1, "world"
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-subsections-2.s b/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-subsections-2.s
> new file mode 100644
> index 00000000000..1ba63da6fe9
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-subsections-2.s
> @@ -0,0 +1,19 @@
> +.aeabi_subsection gnu-testing-ba-1-MERGE-AND, optional, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 1
> +
> +.aeabi_subsection private-1, optional, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 1
> +
> +.aeabi_subsection private-2, optional, ntbs
> +.aeabi_attribute  0, "foo"
> +.aeabi_attribute  1, "bar"
> +
> +.aeabi_subsection private-3, optional, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 1
> +
> +.aeabi_subsection gnu-testing-ba-2-MERGE-ADD, optional, ntbs
> +.aeabi_attribute  0, "foo"
> +.aeabi_attribute  1, "bar"
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-subsections.d b/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-subsections.d
> new file mode 100644
> index 00000000000..8892d5d0f91
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-2-mix-unknown-and-known-subsections.d
> @@ -0,0 +1,25 @@
> +# name: Build attributes: unknown subsections are removed from the output.
> +# source: ba-2-mix-unknown-and-known-subsections-1.s
> +# source: ba-2-mix-unknown-and-known-subsections-2.s
> +# as:
> +# ld: -shared
> +# readelf: --arch-specific
> +
> +Subsections:
> + - Name:	  gnu-testing-ba-1-MERGE-AND
> +   Scope:	  private
> +   Length:	  37
> +   Comprehension: optional
> +   Encoding:	  ULEB128
> +   Values:
> +    Tag_unknown_0:	1 \(0x1\)
> +    Tag_unknown_1:	0 \(0x0\)
> +
> + - Name:	  gnu-testing-ba-2-MERGE-ADD
> +   Scope:	  private
> +   Length:	  55
> +   Comprehension: optional
> +   Encoding:	  NTBS
> +   Values:
> +    Tag_unknown_0:	"hello\+foo"
> +    Tag_unknown_1:	"world\+bar"
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-A-1.s b/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-A-1.s
> new file mode 100644
> index 00000000000..1d4ef909820
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-A-1.s
> @@ -0,0 +1,3 @@
> +.aeabi_subsection gnu-testing-ba-1-MERGE-AND, required, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 0
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-A-2.s b/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-A-2.s
> new file mode 100644
> index 00000000000..1d4ef909820
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-A-2.s
> @@ -0,0 +1,3 @@
> +.aeabi_subsection gnu-testing-ba-1-MERGE-AND, required, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 0
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-B.s b/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-B.s
> new file mode 100644
> index 00000000000..4b33b0bcc85
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-B.s
> @@ -0,0 +1,3 @@
> +.aeabi_subsection gnu-testing-ba-1-MERGE-AND, required, uleb128
> +.aeabi_attribute  0, 1
> +.aeabi_attribute  1, 1
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-nok.d b/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-nok.d
> new file mode 100644
> index 00000000000..118543f7af3
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-nok.d
> @@ -0,0 +1,7 @@
> +# name: Build attributes: combine non-matching required subsections
> +# source: ba-2-required-subsec-A-1.s
> +# source: ba-2-required-subsec-B.s
> +# source: ba-2-required-subsec-A-2.s
> +# as:
> +# ld: -shared
> +#error: \A[^\n]*ba-2-required-subsec-A-1\.o, [^:]*ba-2-required-subsec-B\.o: error: mismatching values 0x0 and 0x1 for required object attribute 'GNUTestTag_1' in subsection 'gnu-testing-ba-1-MERGE-AND'
> diff --git a/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-ok.d b/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-ok.d
> new file mode 100644
> index 00000000000..45740ed65a2
> --- /dev/null
> +++ b/ld/testsuite/ld-aarch64/build-attributes/ba-2-required-subsec-ok.d
> @@ -0,0 +1,16 @@
> +# name: Build attributes: combine matching required subsections
> +# source: ba-2-required-subsec-A-1.s
> +# source: ba-2-required-subsec-A-2.s
> +# as:
> +# ld: -shared
> +# readelf: --arch-specific
> +
> +Subsections:
> + - Name:	  gnu-testing-ba-1-MERGE-AND
> +   Scope:	  private
> +   Length:	  37
> +   Comprehension: required
> +   Encoding:	  ULEB128
> +   Values:
> +    Tag_unknown_0:	1 \(0x1\)
> +    Tag_unknown_1:	0 \(0x0\)
> diff --git a/ld/testsuite/ld-aarch64/lib/aarch64-elf-lib.exp b/ld/testsuite/ld-aarch64/lib/aarch64-elf-lib.exp
> index fece3de0bce..cf434b92e2c 100644
> --- a/ld/testsuite/ld-aarch64/lib/aarch64-elf-lib.exp
> +++ b/ld/testsuite/ld-aarch64/lib/aarch64-elf-lib.exp
> @@ -56,4 +56,4 @@ proc run_dump_test_lp64 { testname } {
>    run_dump_test $testname \
>      [list [list as "-mabi=lp64 -I\$srcdir/\$subdir"] \
>  	  [list ld [concat "-m " [aarch64_choose_lp64_emul]]]]
> -}
> \ No newline at end of file
> +}

OK

R.


More information about the Binutils mailing list