diff options
Diffstat (limited to 'ld')
28 files changed, 362 insertions, 7 deletions
diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em index aa2859d..ba536b0 100644 --- a/ld/emultempl/aarch64elf.em +++ b/ld/emultempl/aarch64elf.em @@ -36,6 +36,15 @@ static erratum_84319_opts fix_erratum_843419 = ERRAT_NONE; static int no_apply_dynamic_relocs = 0; static aarch64_plt_type plt_type = PLT_NORMAL; static aarch64_enable_bti_type bti_type = BTI_NONE; +static aarch64_gcs_type gcs_type = GCS_IMPLICIT; +static aarch64_gcs_report gcs_report = GCS_NONE; + +#define COMPILE_TIME_STRLEN(s) \ + (sizeof(s) - 1) +#define EGR "gcs-report" +#define EG "gcs" +#define EGR_LEN COMPILE_TIME_STRLEN (EGR) +#define EG_LEN COMPILE_TIME_STRLEN (EG) static void gld${EMULATION_NAME}_before_parse (void) @@ -321,9 +330,11 @@ aarch64_elf_create_output_section_statements (void) return; } - aarch64_bti_pac_info bp_info; - bp_info.plt_type = plt_type; - bp_info.bti_type = bti_type; + aarch64_gnu_prop_info gnu_prop_info; + gnu_prop_info.plt_type = plt_type; + gnu_prop_info.bti_type = bti_type; + gnu_prop_info.gcs_type = gcs_type; + gnu_prop_info.gcs_report = gcs_report; bfd_elf${ELFSIZE}_aarch64_set_options (link_info.output_bfd, &link_info, no_enum_size_warning, @@ -331,7 +342,7 @@ aarch64_elf_create_output_section_statements (void) pic_veneer, fix_erratum_835769, fix_erratum_843419, no_apply_dynamic_relocs, - bp_info); + gnu_prop_info); stub_file = lang_add_input_file ("linker stubs", lang_input_file_is_fake_enum, @@ -398,16 +409,51 @@ PARSE_AND_LIST_OPTIONS=' fprintf (file, _(" --no-apply-dynamic-relocs Do not apply link-time values for dynamic relocations\n")); fprintf (file, _(" -z force-bti Turn on Branch Target Identification mechanism and generate PLTs with BTI. Generate warnings for missing BTI on inputs\n")); fprintf (file, _(" -z pac-plt Protect PLTs with Pointer Authentication.\n")); + fprintf (file, _("\ + -z gcs[=always|never|implicit] Turn on Guarded Control Stack(gcs) mechanism on the output.\n\ + implicit(default): deduce gcs from input objects.\n\ + always: always marks the output with gcs.\n\ + never: never marks the output with gcs.\n")); + fprintf (file, _("\ + -z gcs-report[=none|warning|error] Emit warning/error on mismatch of gcs marking between input objects and ouput.\n\ + none (default): Does not emit any warning/error messages.\n\ + warning: Emit warning when the input objects are missing gcs markings\n\ + and output have gcs marking.\n\ + error: Emit error when the input objects are missing gcs markings\n\ + and output have gcs marking.\n")); + ' PARSE_AND_LIST_ARGS_CASE_Z_AARCH64=' - else if (strcmp (optarg, "force-bti") == 0) + else if (strcmp (optarg, "force-bti") == 0) { plt_type |= PLT_BTI; bti_type = BTI_WARN; } - else if (strcmp (optarg, "pac-plt") == 0) + else if (strcmp (optarg, "pac-plt") == 0) plt_type |= PLT_PAC; + else if (strncmp (optarg, EGR, EGR_LEN) == 0) + { + if (strlen (optarg) == EGR_LEN || strcmp (optarg + EGR_LEN, "=none") == 0) + gcs_report = GCS_NONE; + else if (strcmp (optarg + EGR_LEN, "=warning") == 0) + gcs_report = GCS_WARN; + else if (strcmp (optarg + EGR_LEN, "=error") == 0) + gcs_report = GCS_ERROR; + else + einfo (_("%P: error: unrecognized: `%s'\''\n"), optarg); + } + else if (strncmp (optarg, EG, EG_LEN) == 0) + { + if (strlen (optarg) == EG_LEN || strcmp (optarg + EG_LEN, "=always") == 0) + gcs_type = GCS_ALWAYS; + else if (strcmp (optarg + EG_LEN, "=never") == 0) + gcs_type = GCS_NEVER; + else if (strcmp (optarg + EG_LEN, "=implicit") == 0) + gcs_type = GCS_IMPLICIT; + else + einfo (_("%P: error: unrecognized: `%s'\''\n"), optarg); + } ' PARSE_AND_LIST_ARGS_CASE_Z="$PARSE_AND_LIST_ARGS_CASE_Z $PARSE_AND_LIST_ARGS_CASE_Z_AARCH64" diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index c7d97f3..d5a208f 100644 --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp @@ -487,3 +487,26 @@ if { [supports_dt_relr] } { if { ![skip_sframe_tests] } { run_dump_test "sframe-simple-1" } + +run_dump_test "property-gcs1" +run_dump_test "property-gcs2" +run_dump_test "property-gcs3" +run_dump_test "property-gcs4" +run_dump_test "property-gcs5" +run_dump_test "property-gcs6" +run_dump_test "property-gcs7" +run_dump_test "property-gcs8" +run_dump_test "property-gcs9" +run_dump_test "property-gcs10" +run_dump_test "property-gcs11" +run_dump_test "property-gcs12" +run_dump_test "property-gcs13" +run_dump_test "property-gcs14" +run_dump_test "property-gcs15" +run_dump_test "property-gcs16" +run_dump_test "property-gcs17" +run_dump_test "property-gcs18" +run_dump_test "property-gcs19" +run_dump_test "property-gcs20" +run_dump_test "property-gcs21" +run_dump_test "property-gcs22" diff --git a/ld/testsuite/ld-aarch64/property-bti-pac1.d b/ld/testsuite/ld-aarch64/property-bti-pac1.d index 59fa695..c28a0cb 100644 --- a/ld/testsuite/ld-aarch64/property-bti-pac1.d +++ b/ld/testsuite/ld-aarch64/property-bti-pac1.d @@ -8,4 +8,4 @@ Displaying notes found in: .note.gnu.property [ ]+Owner[ ]+Data size[ ]+Description GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 - Properties: AArch64 feature: BTI, PAC + Properties: AArch64 feature: BTI, PAC, GCS diff --git a/ld/testsuite/ld-aarch64/property-bti-pac1.s b/ld/testsuite/ld-aarch64/property-bti-pac1.s index 414c927..4215691 100644 --- a/ld/testsuite/ld-aarch64/property-bti-pac1.s +++ b/ld/testsuite/ld-aarch64/property-bti-pac1.s @@ -17,6 +17,20 @@ _start: 2: .long 0xc0000000 /* pr_type. */ .long 4f - 3f /* pr_datasz. */ 3: + .long 0x4 /* GCS. */ +4: + .p2align 3 +5: + .p2align 3 + .long 1f - 0f /* name length */ + .long 5f - 2f /* data length */ + .long 5 /* note type */ +0: .asciz "GNU" /* vendor name */ +1: + .p2align 3 +2: .long 0xc0000000 /* pr_type. */ + .long 4f - 3f /* pr_datasz. */ +3: .long 0x2 /* PAC. */ 4: .p2align 3 diff --git a/ld/testsuite/ld-aarch64/property-gcs.s b/ld/testsuite/ld-aarch64/property-gcs.s new file mode 100644 index 0000000..bc7e66e8 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs.s @@ -0,0 +1,25 @@ + .text + .globl _start + .type _start,@function +_start: + mov x1, #2 +.ifndef __mult__ + bl foo +.endif +.ifdef __property_gcs__ + .section ".note.gnu.property", "a" + .p2align 3 + .long 1f - 0f /* name length */ + .long 5f - 2f /* data length */ + .long 5 /* note type */ +0: .asciz "GNU" /* vendor name */ +1: + .p2align 3 +2: .long 0xc0000000 /* pr_type. */ + .long 4f - 3f /* pr_datasz. */ +3: + .long 0x4 /* GCS. */ +4: + .p2align 3 +5: +.endif diff --git a/ld/testsuite/ld-aarch64/property-gcs1.d b/ld/testsuite/ld-aarch64/property-gcs1.d new file mode 100644 index 0000000..c724ac5 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs1.d @@ -0,0 +1,6 @@ +#name: GNU Property (input without gcs) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 +#ld: -shared +#readelf: -n diff --git a/ld/testsuite/ld-aarch64/property-gcs10.d b/ld/testsuite/ld-aarch64/property-gcs10.d new file mode 100644 index 0000000..3a2c992 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs10.d @@ -0,0 +1,6 @@ +#name: GNU Property (input without gcs output forced with gcs=always gcs-report=error) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 +#ld: -z gcs=always -z gcs-report=error +#error: .*property-gcs.*: error: GCS turned on by -z gcs on the output when all inputs do not have GCS in NOTE section. diff --git a/ld/testsuite/ld-aarch64/property-gcs11.d b/ld/testsuite/ld-aarch64/property-gcs11.d new file mode 100644 index 0000000..094b9be --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs11.d @@ -0,0 +1,11 @@ +#name: GNU Property (input with gcs output forced with gcs) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1 +#ld: -z gcs +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs12.d b/ld/testsuite/ld-aarch64/property-gcs12.d new file mode 100644 index 0000000..3555447 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs12.d @@ -0,0 +1,11 @@ +#name: GNU Property (input with gcs output forced with gcs=always) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1 +#ld: -z gcs=always +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs13.d b/ld/testsuite/ld-aarch64/property-gcs13.d new file mode 100644 index 0000000..c6543ba --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs13.d @@ -0,0 +1,11 @@ +#name: GNU Property (input with gcs output forced with gcs gcs-report=none) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1 +#ld: -z gcs -z gcs-report=none +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs14.d b/ld/testsuite/ld-aarch64/property-gcs14.d new file mode 100644 index 0000000..1c612b5 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs14.d @@ -0,0 +1,11 @@ +#name: GNU Property (input with gcs output forced with gcs gcs-report=warning) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1 +#ld: -z gcs -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 diff --git a/ld/testsuite/ld-aarch64/property-gcs15.d b/ld/testsuite/ld-aarch64/property-gcs15.d new file mode 100644 index 0000000..7e46e8e --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs15.d @@ -0,0 +1,11 @@ +#name: GNU Property (input with gcs output forced with gcs gcs-report=error) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1 +#ld: -z gcs -z gcs-report=error +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs16.d b/ld/testsuite/ld-aarch64/property-gcs16.d new file mode 100644 index 0000000..c20cbe5 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs16.d @@ -0,0 +1,11 @@ +#name: GNU Property (input with gcs output forced with gcs=always gcs-report=none) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1 +#ld: -z gcs=always -z gcs-report=none +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs17.d b/ld/testsuite/ld-aarch64/property-gcs17.d new file mode 100644 index 0000000..2ee3f10 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs17.d @@ -0,0 +1,11 @@ +#name: GNU Property (input with gcs output forced with gcs=always gcs-report=warning) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1 +#ld: -z gcs=always -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 diff --git a/ld/testsuite/ld-aarch64/property-gcs18.d b/ld/testsuite/ld-aarch64/property-gcs18.d new file mode 100644 index 0000000..6c45d77 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs18.d @@ -0,0 +1,11 @@ +#name: GNU Property (input with gcs output forced with gcs=always gcs-report=error) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1 +#ld: -z gcs=always -z gcs-report=error +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs19.d b/ld/testsuite/ld-aarch64/property-gcs19.d new file mode 100644 index 0000000..588af48 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs19.d @@ -0,0 +1,6 @@ +#name: GNU Property (input without gcs output forced with gcs=never) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 +#ld: -z gcs=never +#readelf: -n diff --git a/ld/testsuite/ld-aarch64/property-gcs2.d b/ld/testsuite/ld-aarch64/property-gcs2.d new file mode 100644 index 0000000..ed545a1 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs2.d @@ -0,0 +1,11 @@ +#name: GNU Property (input with gcs) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1 +#ld: -shared +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs2.s b/ld/testsuite/ld-aarch64/property-gcs2.s new file mode 100644 index 0000000..6db7d83 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs2.s @@ -0,0 +1,33 @@ + .text + .global foo + .type foo, %function +foo: + sub sp, sp, #16 + mov w0, 9 + str w0, [sp, 12] + ldr w0, [sp, 12] + add w0, w0, 4 + str w0, [sp, 12] + nop + add sp, sp, 16 + ret + .size foo, .-foo + .global bar + .type bar, %function +.ifdef __property_gcs__ + .section ".note.gnu.property", "a" + .p2align 3 + .long 1f - 0f /* name length */ + .long 5f - 2f /* data length */ + .long 5 /* note type */ +0: .asciz "GNU" /* vendor name */ +1: + .p2align 3 +2: .long 0xc0000000 /* pr_type. */ + .long 4f - 3f /* pr_datasz. */ +3: + .long 0x4 /* GCS. */ +4: + .p2align 3 +5: +.endif diff --git a/ld/testsuite/ld-aarch64/property-gcs20.d b/ld/testsuite/ld-aarch64/property-gcs20.d new file mode 100644 index 0000000..779e845 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs20.d @@ -0,0 +1,6 @@ +#name: GNU Property (input without gcs output forced with gcs=implicit) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 +#ld: -z gcs=implicit +#readelf: -n diff --git a/ld/testsuite/ld-aarch64/property-gcs21.d b/ld/testsuite/ld-aarch64/property-gcs21.d new file mode 100644 index 0000000..dbfb5ec --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs21.d @@ -0,0 +1,6 @@ +#name: GNU Property (input with gcs output forced with gcs=never) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1 +#ld: -z gcs=never +#readelf: -n diff --git a/ld/testsuite/ld-aarch64/property-gcs22.d b/ld/testsuite/ld-aarch64/property-gcs22.d new file mode 100644 index 0000000..dd92399 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs22.d @@ -0,0 +1,11 @@ +#name: GNU Property (input with gcs output forced with gcs=implicit) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1 +#ld: -z gcs=implicit +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs3.d b/ld/testsuite/ld-aarch64/property-gcs3.d new file mode 100644 index 0000000..0ea2d7e --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs3.d @@ -0,0 +1,11 @@ +#name: GNU Property (input without gcs output forced with gcs) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 +#ld: -z gcs +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs4.d b/ld/testsuite/ld-aarch64/property-gcs4.d new file mode 100644 index 0000000..0669d64 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs4.d @@ -0,0 +1,11 @@ +#name: GNU Property (input without gcs output forced with gcs=always) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 +#ld: -z gcs=always +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs5.d b/ld/testsuite/ld-aarch64/property-gcs5.d new file mode 100644 index 0000000..df8643a --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs5.d @@ -0,0 +1,11 @@ +#name: GNU Property (input without gcs output forced with gcs gcs-report=none) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 +#ld: -z gcs -z gcs-report=none +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs6.d b/ld/testsuite/ld-aarch64/property-gcs6.d new file mode 100644 index 0000000..3646e8a --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs6.d @@ -0,0 +1,12 @@ +#name: GNU Property (input without gcs output forced with gcs gcs-report=warning) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 +#ld: -z gcs -z gcs-report=warning +#readelf: -n +#warning: .*property-gcs.*: warning: GCS turned on by -z gcs on the output when all inputs do not have GCS in NOTE section. + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs7.d b/ld/testsuite/ld-aarch64/property-gcs7.d new file mode 100644 index 0000000..ba58fe2 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs7.d @@ -0,0 +1,6 @@ +#name: GNU Property (input without gcs output forced with gcs gcs-report=error) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 +#ld: -z gcs -z gcs-report=error +#error: .*property-gcs.*: error: GCS turned on by -z gcs on the output when all inputs do not have GCS in NOTE section. diff --git a/ld/testsuite/ld-aarch64/property-gcs8.d b/ld/testsuite/ld-aarch64/property-gcs8.d new file mode 100644 index 0000000..f442b71 --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs8.d @@ -0,0 +1,11 @@ +#name: GNU Property (input without gcs output forced with gcs=always gcs-report=none) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 +#ld: -z gcs=always -z gcs-report=none +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS diff --git a/ld/testsuite/ld-aarch64/property-gcs9.d b/ld/testsuite/ld-aarch64/property-gcs9.d new file mode 100644 index 0000000..82b93ec --- /dev/null +++ b/ld/testsuite/ld-aarch64/property-gcs9.d @@ -0,0 +1,12 @@ +#name: GNU Property (input without gcs output forced with gcs=always gcs-report=warning) +#source: property-gcs.s +#alltargets: [check_shared_lib_support] *linux* +#as: -march=armv9.4-a+gcs -defsym __mult__=0 +#ld: -z gcs=always -z gcs-report=warning +#readelf: -n +#warning: .*property-gcs.*: warning: GCS turned on by -z gcs on the output when all inputs do not have GCS in NOTE section. + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: GCS |