elf_aarch64_tdata (output_bfd)->no_enum_size_warning = no_enum_warn;
elf_aarch64_tdata (output_bfd)->no_wchar_size_warning = no_wchar_warn;
- /* Note: gnu_property_aarch64_feature_1_and was initialized to 0 by
- bfd_zalloc(). */
+ uint32_t gnu_property_aarch64_feature_1_and = 0;
+ aarch64_feature_marking_report gcs_report;
+ aarch64_feature_marking_report gcs_report_dynamic;
+
if (sw_protections->plt_type & PLT_BTI)
- elf_aarch64_tdata (output_bfd)->gnu_property_aarch64_feature_1_and
- |= GNU_PROPERTY_AARCH64_FEATURE_1_BTI;
+ gnu_property_aarch64_feature_1_and |= GNU_PROPERTY_AARCH64_FEATURE_1_BTI;
switch (sw_protections->gcs_type)
{
case GCS_ALWAYS:
- elf_aarch64_tdata (output_bfd)->gnu_property_aarch64_feature_1_and
- |= GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
+ gnu_property_aarch64_feature_1_and |= GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
+
+ /* The default diagnostic level with '-z gcs=always' is 'warning'. */
+ if (sw_protections->gcs_report == MARKING_UNSET)
+ gcs_report = MARKING_WARN;
+ else
+ gcs_report = sw_protections->gcs_report;
+
+ /* The default diagnostic level with '-z gcs=always' is 'warning'. */
+ if (sw_protections->gcs_report_dynamic == MARKING_UNSET)
+ gcs_report_dynamic = MARKING_WARN;
+ else
+ gcs_report_dynamic = sw_protections->gcs_report_dynamic;
break;
+
case GCS_NEVER:
- elf_aarch64_tdata (output_bfd)->gnu_property_aarch64_feature_1_and
- &= ~GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
+ gnu_property_aarch64_feature_1_and &= ~GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
+
+ /* Markings are ignored, so no diagnostic messages can be emitted. */
+ gcs_report = MARKING_NONE;
+ gcs_report_dynamic = MARKING_NONE;
break;
+
case GCS_IMPLICIT:
/* GCS feature on the output bfd will be deduced from input objects. */
+
+ /* No warnings should be emitted on input static objects with
+ '-z gcs=implicit'. */
+ gcs_report = MARKING_NONE;
+
+ /* Binary Linux distributions do not rebuild all packages from scratch
+ when rolling out a new feature or creating a new release; only modified
+ packages get rebuilt. In the context of GCS deployment, this meant
+ that some packages were rebuilt with GCS enabled while their
+ dependencies were not yet GCS-compatible, resulting in warnings because
+ originally the report level for dynamic objects was set to warning.
+ These warnings caused build failures for packages that treat linker
+ warnings as errors. Those errors slowed down the GCS deployment, and
+ Linux distribution maintainers requested that no GCS option provided
+ should be equivalent to '-z gcs=implicit -z gcs-report-dynamic=none'.
+ */
+ if (sw_protections->gcs_report_dynamic == MARKING_UNSET)
+ gcs_report_dynamic = MARKING_NONE;
+ else
+ gcs_report_dynamic = sw_protections->gcs_report_dynamic;
break;
}
+ elf_aarch64_tdata (output_bfd)->gnu_property_aarch64_feature_1_and
+ = gnu_property_aarch64_feature_1_and;
+
elf_aarch64_tdata (output_bfd)->sw_protections = *sw_protections;
- /* Inherit the value from '-z gcs-report' if the option '-z gcs-report-dynamic'
- was not set on the command line. However, the inheritance mechanism is
- capped to avoid inheriting the error level from -g gcs-report as the user
- might want to continue to build a module without rebuilding all the shared
- libraries. If a user also wants to error GCS issues in the shared
- libraries, '-z gcs-report-dynamic=error' will have to be specified
- explicitly. */
- if (sw_protections->gcs_report_dynamic == MARKING_UNSET)
- elf_aarch64_tdata (output_bfd)->sw_protections.gcs_report_dynamic
- = (sw_protections->gcs_report == MARKING_ERROR)
- ? MARKING_WARN
- : sw_protections->gcs_report;
+ /* Adjusting GCS diagnostic levels. */
+ elf_aarch64_tdata (output_bfd)->sw_protections.gcs_report
+ = gcs_report;
+ elf_aarch64_tdata (output_bfd)->sw_protections.gcs_report_dynamic
+ = gcs_report_dynamic;
elf_aarch64_tdata (output_bfd)->n_bti_issues = 0;
elf_aarch64_tdata (output_bfd)->n_gcs_issues = 0;
.plt_type = PLT_NORMAL,
.bti_report = MARKING_WARN,
.gcs_type = GCS_IMPLICIT,
- .gcs_report = MARKING_WARN,
+ .gcs_report = MARKING_UNSET,
.gcs_report_dynamic = MARKING_UNSET,
};
#define GCS_REPORT_DYNAMIC_LEN COMPILE_TIME_STRLEN (GCS_REPORT_DYNAMIC)
return aarch64_parse_feature_report_option (_optarg, GCS_REPORT_DYNAMIC,
- GCS_REPORT_DYNAMIC_LEN, false, &sw_protections.gcs_report_dynamic);
+ GCS_REPORT_DYNAMIC_LEN, true, &sw_protections.gcs_report_dynamic);
#undef GCS_REPORT_DYNAMIC
#undef GCS_REPORT_DYNAMIC_LEN
validated.
@itemize
@item @samp{implicit} (default if @samp{-z gcs} is omitted) enables GCS marking
-on the output if, and only if, all input objects composing the link unit are
-marked with GCS.
+on the output if, and only if, all input static objects are marked with GCS.
@item @samp{always} forces the marking of the output with GCS.
@item @samp{never} ignores any GCS marking on the input objects, and does not
mark the output with GCS.
@end itemize
@kindex -z gcs-report[=none|warning|error]
-@cindex Control warnings for missing GCS markings.
-The @samp{-z gcs-report[=none|warning|error]} option specifies how to report the
-missing GCS markings on inputs, i.e. the GNU_PROPERTY_AARCH64_FEATURE_1_GCS
-property. By default, if the option is omitted and @samp{-z gcs} is provided,
-warnings are emitted.
+@cindex Control diagnostics for missing GCS markings on static input objects.
+When @samp{-z gcs=always} is specified, then the @samp{-z gcs-report[=none|warning|error]}
+option can be used to specify how to report missing GCS markings (i.e.
+the GNU_PROPERTY_AARCH64_FEATURE_1_GCS property) on static inputs.
@itemize
-@item @samp{none} disables any warning messages.
-@item @samp{warning} (the default value) emits warning messages when input objects
-composing the link unit are missing GCS markings.
-@item @samp{error} turns the warning messages into errors.
+@item @samp{none} disables the diagnostic messages.
+@item @samp{warning} (the default value) emits diagnostic messages as warnings.
+@item @samp{error} emits diagnostic messages as errors.
@end itemize
If issues are found, a maximum of 20 messages will be emitted, and then a summary
with the total number of issues will be displayed at the end.
-@kindex -z gcs-report-dynamic=none|warning|error
-@cindex Control warnings for missing GCS markings on dynamic input objects.
-The @samp{-z gcs-report-dynamic=none|warning|error} option specifies how to
-report the missing GCS markings on dynamic input objects, i.e. the
-GNU_PROPERTY_AARCH64_FEATURE_1_GCS property. By default, if the option is
-omitted, it inherits the value of @samp{-z gcs-report}. However, the inherited
-value is capped to @samp{warning} as some user might want to only report errors
-in the currently built module, and not the shared dependencies. It is therefore
-necessary to use an explicit @samp{-z gcs-report-dynamic=error} option if you
-want the linker to error on GCS issues in the shared libraries.
+@kindex -z gcs-report-dynamic[=none|warning|error]
+@cindex Control diagnostics for missing GCS markings on dynamic input objects.
+If @samp{-z gcs} is not specified on the command line, or if it has the value
+@samp{implicit} or @samp{always}, then the @samp{-z gcs-report-dynamic[=none|warning|error]}
+option specifies how to report the missing GCS markings (i.e. the GNU_PROPERTY_AARCH64_FEATURE_1_GCS
+property) on dynamic input objects.
@itemize
-@item @samp{none} disables any warning messages.
-@item @samp{warning} emits warning messages when dynamic objects are missing
-GCS markings.
-@item @samp{error} turns the warning messages into errors.
+@item @samp{none} (default value when @samp{-z gcs=implicit}) disables the diagnostic messages.
+@item @samp{warning} (default value when @samp{-z gcs=always}) emits diagnostic messages as warnings.
+@item @samp{error} emits diagnostic messages as errors.
@end itemize
If issues are found, a maximum of 20 messages will be emitted, and then a summary
with the total number of issues will be displayed at the end.
-#name: Specifying '-z gcs' without value raise an error
+#name: No GCS option (equivalent to -z gcs=implicit) and mixed inputs emits no GCS feature and no warnings [shared]
#source: gcs.s
#source: gcs2.s
+#source: nogcs.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -shared -z gcs
-#error: .*: error: unrecognized value '-z gcs'
+#ld: -shared
+#readelf: -n
-#name: Specifying invalid value for '-z gcs' raise an error
+#name: '-z gcs' without value raises an error
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
-#as: -march=armv9.4-a+gcs
-#ld: -shared -z gcs=foo
-#error: .*: error: unrecognized value '-z gcs=foo'
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -shared -z gcs
+#error: .*: error: unrecognized value '-z gcs'
--- /dev/null
+#name: Invalid value for '-z gcs' raises an error
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs
+#ld: -shared -z gcs=foo
+#error: .*: error: unrecognized value '-z gcs=foo'
-#name: Specifying only '-z gcs=always' with GCS marked inputs emits GCS feature without warnings for inputs with GCS feature [shared]
+#name: '-z gcs=always' with GCS-marked inputs emits GCS feature and no warnings [shared]
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
-#name: Specifying only '-z gcs=always' emits GCS feature with warnings for missing GCS feature on inputs [shared]
+#name: '-z gcs=always' with GCS-unmarked inputs emits GCS feature with warnings [shared]
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
-#name: Specifying only '-z gcs=implicit' and GCS-marked inputs emits GCS feature [shared]
+#name: '-z gcs=implicit' with GCS-marked inputs emits GCS feature [shared]
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
-#name: Specifying only '-z gcs=implicit' and GCS-unmarked inputs emits no GCS feature without warnings [shared]
+#name: '-z gcs=implicit' with GCS-unmarked inputs emits no GCS feature and no warnings [shared]
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
-#name: Specifying only '-z gcs=implicit -z gcs-report=warning' and GCS-marked inputs emits GCS feature [shared]
+#name: '-z gcs=implicit -z gcs-report=warning' with GCS-unmarked inputs emits no warnings [shared]
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
-#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#as: -march=armv9.4-a+gcs
#ld: -shared -z gcs=implicit -z gcs-report=warning
#readelf: -n
-
-Displaying notes found in: .note.gnu.property
-[ ]+Owner[ ]+Data size[ ]+Description
- GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
- Properties: AArch64 feature: GCS
-#name: Specifying only '-z gcs=implicit -z gcs-report=warning' and GCS-unmarked inputs emits no GCS feature without warnings [shared]
+#name: '-z gcs=implicit' with mixed inputs emits no GCS feature and no warnings [shared]
#source: gcs.s
#source: gcs2.s
+#source: nogcs.s
#alltargets: [check_shared_lib_support] *linux*
-#as: -march=armv9.4-a+gcs
-#ld: -shared -z gcs=implicit -z gcs-report=warning
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -shared -z gcs=implicit
#readelf: -n
-#name: Specifying only '-z gcs=implicit -z gcs-report=warning' with mixed inputs emits no warning, and no GCS feature [shared]
+#name: '-z gcs=implicit -z gcs-report=warning' with mixed inputs emits no GCS feature and no warnings [shared]
#source: gcs.s
#source: gcs2.s
#source: nogcs.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
#ld: -shared -z gcs=implicit -z gcs-report=warning
-#readelf: -n
\ No newline at end of file
+#readelf: -n
-#name: Specifying only '-z gcs=never' and GCS-marked inputs emits no GCS feature [shared]
+#name: '-z gcs=never' with GCS-marked inputs emits no GCS feature [shared]
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
-#name: Specifying only '-z gcs=never' and GCS-unmarked inputs emits no GCS feature [shared]
+#name: '-z gcs=never' with GCS-unmarked inputs emits no GCS feature [shared]
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
-#name: Specifying only '-z gcs=never -z gcs-report=warning' with mixed inputs emits no error/warning, and no GCS feature [shared]
+#name: '-z gcs=never -z gcs-report=warning' with mixed inputs emits no warnings [shared]
#source: gcs.s
#source: gcs2.s
#source: nogcs.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
#ld: -shared -z gcs=never -z gcs-report=warning
-#readelf: -n
\ No newline at end of file
+#readelf: -n
-#name: Specifying only '-z gcs=always -z gcs-report=error' with mixed inputs emits errors [shared]
+#name: '-z gcs=always -z gcs-report=error' with mixed inputs emits errors [shared]
#source: gcs.s
#source: gcs2.s
#source: nogcs.s
-#name: Specifying only '-z gcs=always -z gcs-report=warning' with mixed inputs emits GCS feature and warnings [shared]
+#name: '-z gcs=always -z gcs-report=warning' with mixed inputs emits GCS feature and warnings [shared]
#source: gcs.s
#source: gcs2.s
#source: nogcs.s
-#name: Specifying only '-z gcs=always -z gcs-report=none' with mixed inputs emits GCS feature and no error/warning [shared]
+#name: '-z gcs=always -z gcs-report=none' with mixed inputs emits GCS feature and no diagnostics [shared]
#source: gcs.s
#source: gcs2.s
#source: nogcs.s
-#name: Specifying only '-z gcs=always -z gcs-report' with mixed inputs emits GCS feature and warnings [shared]
+#name: '-z gcs=always -z gcs-report' with mixed inputs emits GCS feature and warnings [shared]
#source: gcs.s
#source: gcs2.s
#source: nogcs.s
+++ /dev/null
-#name: Specifying only '-z gcs=implicit -z gcs-report=error' with mixed inputs emits no error/warning, and no GCS feature [shared]
-#source: gcs.s
-#source: gcs2.s
-#source: nogcs.s
-#alltargets: [check_shared_lib_support] *linux*
-#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -shared -z gcs=implicit -z gcs-report=error
-#readelf: -n
\ No newline at end of file
+++ /dev/null
-#name: Specifying only '-z gcs=implicit -z gcs-report=none' with mixed inputs emits no warning, and no GCS feature [shared]
-#source: gcs.s
-#source: gcs2.s
-#source: nogcs.s
-#alltargets: [check_shared_lib_support] *linux*
-#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -shared -z gcs=implicit -z gcs-report=none
-#readelf: -n
\ No newline at end of file
+++ /dev/null
-#name: Specifying only '-z gcs=never -z gcs-report=error' with mixed inputs emits no error/warning, and no GCS feature [shared]
-#source: gcs.s
-#source: gcs2.s
-#source: nogcs.s
-#alltargets: [check_shared_lib_support] *linux*
-#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -shared -z gcs=never -z gcs-report=error
-#readelf: -n
\ No newline at end of file
+++ /dev/null
-#name: Specifying only '-z gcs=never -z gcs-report=none' with mixed inputs emits no error/warning, and no GCS feature [shared]
-#source: gcs.s
-#source: gcs2.s
-#source: nogcs.s
-#alltargets: [check_shared_lib_support] *linux*
-#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -shared -z gcs=never -z gcs-report=none
-#readelf: -n
\ No newline at end of file
-#name: '-z gcs=always -z gcs-report=error' and shared library with GCS feature reports no error.
+#name: '-z gcs=always' with GCS-marked shared library reports nothing.
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=always -z gcs-report=error -L./tmpdir -lgcs-so
+#ld: -z gcs=always -L./tmpdir -lgcs-so
#readelf: -n
Displaying notes found in: .note.gnu.property
-#name: '-z gcs=always -z gcs-report=error -z gcs-report-dynamic=error' and shared library with GCS feature reports no error.
+#name: '-z gcs=always -z gcs-report=error -z gcs-report-dynamic=error' with GCS-marked shared library reports nothing.
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
+++ /dev/null
-#name: '-z gcs=always -z gcs-report=error -z gcs-report-dynamic=error' and shared libraries without GCS feature reports errors.
-#source: gcs.s
-#source: gcs2.s
-#alltargets: [check_shared_lib_support] *linux*
-#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=always -z gcs-report=error -z gcs-report-dynamic=error -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
-#error: \A[^\n]*libnogcs-so\.so: error: GCS is required by -z gcs[^\n]*\n
-#error: [^\n]*libbti-plt-so\.so: error: GCS is required by -z gcs[^\n]*
\ No newline at end of file
-#name: '-z gcs=always -z gcs-report=error' and shared libraries without GCS feature reports warnings.
+#name: '-z gcs=always' with GCS-unmarked shared libraries reports warnings.
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
-#name: '-z gcs=always -z gcs-report=warning' and shared libraries without GCS feature reports warnings.
+#name: '-z gcs=always -z gcs-report=error -z gcs-report-dynamic=error' with GCS-unmarked shared libraries reports errors.
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=always -z gcs-report=warning -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
-#warning: \A[^\n]*libnogcs-so\.so: warning: GCS is required by -z gcs[^\n]*\n
-#warning: [^\n]*libbti-plt-so\.so: warning: GCS is required by -z gcs[^\n]*
-#readelf: -n
-
-Displaying notes found in: .note.gnu.property
-[ ]+Owner[ ]+Data size[ ]+Description
- GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
- Properties: AArch64 feature: GCS
+#ld: -z gcs=always -z gcs-report=error -z gcs-report-dynamic=error -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#error: \A[^\n]*libnogcs-so\.so: error: GCS is required by -z gcs[^\n]*\n
+#error: [^\n]*libbti-plt-so\.so: error: GCS is required by -z gcs[^\n]*
-#name: '-z gcs=always -z gcs-report=none' and shared libraries without GCS feature reports nothing.
+#name: '-z gcs=always -z gcs-report=error -z gcs-report-dynamic=warning' with GCS-unmarked shared libraries reports warnings.
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=always -z gcs-report=none -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#ld: -z gcs=always -z gcs-report=error -z gcs-report-dynamic=warning -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#warning: \A[^\n]*libnogcs-so\.so: warning: GCS is required by -z gcs[^\n]*\n
+#warning: [^\n]*libbti-plt-so\.so: warning: GCS is required by -z gcs[^\n]*
+
#readelf: -n
Displaying notes found in: .note.gnu.property
-#name: '-z gcs=always -z gcs-report' and shared libraries without GCS feature reports warnings.
+#name: '-z gcs=always -z gcs-report=error -z gcs-report-dynamic=none' with GCS-unmarked shared libraries reports nothing.
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=always -z gcs-report -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
-#warning: \A[^\n]*libnogcs-so\.so: warning: GCS is required by -z gcs[^\n]*\n
-#warning: [^\n]*libbti-plt-so\.so: warning: GCS is required by -z gcs[^\n]*
+#ld: -z gcs=always -z gcs-report=error -z gcs-report-dynamic=none -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
#readelf: -n
Displaying notes found in: .note.gnu.property
-#name: '-z gcs=implicit -z gcs-report=error' and shared libraries without GCS feature reports warnings.
+#name: '-z gcs=implicit -z gcs-report-dynamic=error' with GCS-unmarked shared libraries reports errors.
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=implicit -z gcs-report=error -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
-#warning: \A[^\n]*libnogcs-so\.so: warning: GCS is required by -z gcs[^\n]*\n
-#warning: [^\n]*libbti-plt-so\.so: warning: GCS is required by -z gcs[^\n]*
-
-#readelf: -n
-
-Displaying notes found in: .note.gnu.property
-[ ]+Owner[ ]+Data size[ ]+Description
- GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
- Properties: AArch64 feature: GCS
+#ld: -z gcs=implicit -z gcs-report-dynamic=error -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#error: \A[^\n]*libnogcs-so\.so: error: GCS is required by -z gcs[^\n]*\n
+#error: [^\n]*libbti-plt-so\.so: error: GCS is required by -z gcs[^\n]*
-#name: '-z gcs=implicit -z gcs-report=warning' and shared libraries without GCS feature reports warnings.
+#name: '-z gcs=implicit -z gcs-report-dynamic=warning' with GCS-unmarked shared libraries reports warnings.
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=implicit -z gcs-report=warning -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#ld: -z gcs=implicit -z gcs-report-dynamic=warning -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
#warning: \A[^\n]*libnogcs-so\.so: warning: GCS is required by -z gcs[^\n]*\n
#warning: [^\n]*libbti-plt-so\.so: warning: GCS is required by -z gcs[^\n]*
#readelf: -n
Displaying notes found in: .note.gnu.property
[ ]+Owner[ ]+Data size[ ]+Description
GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
- Properties: AArch64 feature: GCS
\ No newline at end of file
+ Properties: AArch64 feature: GCS
-#name: '-z gcs=implicit -z gcs-report=none' and shared libraries without GCS feature reports no warning.
+#name: '-z gcs=implicit -z gcs-report-dynamic=none' with GCS-unmarked shared libraries reports nothing.
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=implicit -z gcs-report=none -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#ld: -z gcs=implicit -z gcs-report-dynamic=none -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
#readelf: -n
Displaying notes found in: .note.gnu.property
[ ]+Owner[ ]+Data size[ ]+Description
GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
- Properties: AArch64 feature: GCS
\ No newline at end of file
+ Properties: AArch64 feature: GCS
-#name: '-z gcs=always -z gcs-report=error -z gcs-report-dynamic=none' and shared libraries without GCS feature reports nothing.
+#name: '-z gcs=implicit' and GCS-unmarked shared libraries reports nothing.
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=always -z gcs-report=error -z gcs-report-dynamic=none -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#ld: -z gcs=implicit -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
#readelf: -n
Displaying notes found in: .note.gnu.property
[ ]+Owner[ ]+Data size[ ]+Description
GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
- Properties: AArch64 feature: GCS
\ No newline at end of file
+ Properties: AArch64 feature: GCS
--- /dev/null
+#name: Linux distributions's main use case: no GCS options and GCS-unmarked shared libraries report nothing.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
-#name: '-z gcs=always -z gcs-report=error -z gcs-report-dynamic=warning' and shared libraries without GCS feature reports warnings.
+#name: '-z gcs-report-dynamic' with GCS-unmarked shared libraries reports warnings.
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=always -z gcs-report=error -z gcs-report-dynamic=warning -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#ld: -z gcs-report-dynamic -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
#warning: \A[^\n]*libnogcs-so\.so: warning: GCS is required by -z gcs[^\n]*\n
#warning: [^\n]*libbti-plt-so\.so: warning: GCS is required by -z gcs[^\n]*
-
#readelf: -n
Displaying notes found in: .note.gnu.property
[ ]+Owner[ ]+Data size[ ]+Description
GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
- Properties: AArch64 feature: GCS
\ No newline at end of file
+ Properties: AArch64 feature: GCS
-#name: '-z gcs=never -z gcs-report=error' and shared libraries without GCS feature reports no warning/error.
+#name: '-z gcs=never -z gcs-report-dynamic=error' with GCS-unmarked shared libraries reports nothing.
#source: gcs.s
#source: gcs2.s
#alltargets: [check_shared_lib_support] *linux*
#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=never -z gcs-report=error -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#ld: -z gcs=never -z gcs-report-dynamic=error -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
#readelf: -n
+++ /dev/null
-#name: '-z gcs=never -z gcs-report=warning' and shared libraries without GCS feature reports no warning/error.
-#source: gcs.s
-#source: gcs2.s
-#alltargets: [check_shared_lib_support] *linux*
-#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=never -z gcs-report=warning -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
-#readelf: -n
+++ /dev/null
-#name: '-z gcs=never -z gcs-report=none' and shared libraries without GCS feature reports no warning/error.
-#source: gcs.s
-#source: gcs2.s
-#alltargets: [check_shared_lib_support] *linux*
-#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
-#ld: -z gcs=never -z gcs-report=none -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
-#readelf: -n