+2019-07-05 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ Backport from mainline
+ 2019-06-03 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ * config/aarch64/aarch64-protos.h (aarch64_asm_output_alias): Declare.
+ (aarch64_asm_output_external): Declare.
+ * config/aarch64/aarch64.c (aarch64_asm_output_variant_pcs): New.
+ (aarch64_declare_function_name): Call aarch64_asm_output_variant_pcs.
+ (aarch64_asm_output_alias): New.
+ (aarch64_asm_output_external): New.
+ * config/aarch64/aarch64.h (ASM_OUTPUT_DEF_FROM_DECLS): Define.
+ (ASM_OUTPUT_EXTERNAL): Define.
+
+ 2019-06-04 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ * config/aarch64/aarch64-protos.h (aarch64_asm_output_external): Remove
+ const.
+ * config/aarch64/aarch64.c (aarch64_asm_output_external): Call
+ default_elf_asm_output_external.
+
2019-07-04 Martin Liska <mliska@suse.cz>
Backport from mainline
bool aarch64_is_noplt_call_p (rtx);
bool aarch64_label_mentioned_p (rtx);
void aarch64_declare_function_name (FILE *, const char*, tree);
+void aarch64_asm_output_alias (FILE *, const tree, const tree);
+void aarch64_asm_output_external (FILE *, tree, const char*);
bool aarch64_legitimate_pic_operand_p (rtx);
bool aarch64_mask_and_shift_for_ubfiz_p (scalar_int_mode, rtx, rtx);
bool aarch64_masks_and_shift_for_bfi_p (scalar_int_mode, unsigned HOST_WIDE_INT,
return (global ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | type;
}
+/* Output .variant_pcs for aarch64_vector_pcs function symbols. */
+
+static void
+aarch64_asm_output_variant_pcs (FILE *stream, const tree decl, const char* name)
+{
+ if (aarch64_simd_decl_p (decl))
+ {
+ fprintf (stream, "\t.variant_pcs\t");
+ assemble_name (stream, name);
+ fprintf (stream, "\n");
+ }
+}
+
/* The last .arch and .tune assembly strings that we printed. */
static std::string aarch64_last_printed_arch_string;
static std::string aarch64_last_printed_tune_string;
aarch64_last_printed_tune_string = this_tune->name;
}
+ aarch64_asm_output_variant_pcs (stream, fndecl, name);
+
/* Don't forget the type directive for ELF. */
ASM_OUTPUT_TYPE_DIRECTIVE (stream, name, "function");
ASM_OUTPUT_LABEL (stream, name);
}
+/* Implement ASM_OUTPUT_DEF_FROM_DECLS. Output .variant_pcs for aliases. */
+
+void
+aarch64_asm_output_alias (FILE *stream, const tree decl, const tree target)
+{
+ const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
+ const char *value = IDENTIFIER_POINTER (target);
+ aarch64_asm_output_variant_pcs (stream, decl, name);
+ ASM_OUTPUT_DEF (stream, name, value);
+}
+
+/* Implement ASM_OUTPUT_EXTERNAL. Output .variant_pcs for undefined
+ function symbol references. */
+
+void
+aarch64_asm_output_external (FILE *stream, tree decl, const char* name)
+{
+ default_elf_asm_output_external (stream, decl, name);
+ aarch64_asm_output_variant_pcs (stream, decl, name);
+}
+
/* Implements TARGET_ASM_FILE_START. Output the assembly header. */
static void
#define ASM_DECLARE_FUNCTION_NAME(STR, NAME, DECL) \
aarch64_declare_function_name (STR, NAME, DECL)
+/* Output assembly strings for alias definition. */
+#define ASM_OUTPUT_DEF_FROM_DECLS(STR, DECL, TARGET) \
+ aarch64_asm_output_alias (STR, DECL, TARGET)
+
+/* Output assembly strings for undefined extern symbols. */
+#undef ASM_OUTPUT_EXTERNAL
+#define ASM_OUTPUT_EXTERNAL(STR, DECL, NAME) \
+ aarch64_asm_output_external (STR, DECL, NAME)
+
/* For EH returns X4 contains the stack adjustment. */
#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, R4_REGNUM)
#define EH_RETURN_HANDLER_RTX aarch64_eh_return_handler_rtx ()
+2019-07-05 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ Backport from mainline
+ 2019-06-03 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ * gcc.target/aarch64/pcs_attribute-2.c: New test.
+ * gcc.target/aarch64/torture/simd-abi-4.c: Check .variant_pcs support.
+ * lib/target-supports.exp (check_effective_target_aarch64_variant_pcs):
+ New.
+
+ 2019-06-18 Szabolcs Nagy <szabolcs.nagy@arm.com>
+
+ * gcc.target/aarch64/pcs_attribute-2.c: Remove ifunc usage.
+ * gcc.target/aarch64/pcs_attribute-3.c: New test.
+
2019-07-04 Martin Liska <mliska@suse.cz>
Backport from mainline
-/* dg-do run */
+/* { dg-do run } */
+/* { dg-require-effective-target aarch64_variant_pcs } */
/* { dg-additional-options "-std=c99" } */
}
}
+# Return 1 if the assembler accepts the aarch64 .variant_pcs directive.
+
+proc check_effective_target_aarch64_variant_pcs { } {
+ if { [istarget aarch64*-*-*] } {
+ return [check_no_compiler_messages aarch64_variant_pcs object {
+ __asm__ (".variant_pcs foo");
+ }]
+ } else {
+ return 0
+ }
+}
# Return 1 if this is a reduced AVR Tiny core. Such cores have different
# register set, instruction set, addressing capabilities and ABI.