Viewing file: pcs_attribute-3.c (1.58 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-require-effective-target aarch64_variant_pcs } */
/* Test that .variant_pcs is emitted for vector PCS symbol references. */
#define ATTR __attribute__ ((aarch64_vector_pcs))
static void f_local_basepcs (void) { }
static void (*f_ifunc_basepcs_resolver ()) (void) { return (void (*)(void))f_local_basepcs; }
__attribute__ ((ifunc ("f_ifunc_basepcs_resolver"))) void f_ifunc_basepcs (void);
ATTR static void f_local_vpcs (void) { }
static void (*f_ifunc_vpcs_resolver ()) (void) { return (void (*)(void))f_local_vpcs; }
__attribute__ ((ifunc ("f_ifunc_vpcs_resolver"))) ATTR void f_ifunc_vpcs (void);
__attribute__ ((visibility ("hidden"))) __attribute__ ((ifunc ("f_ifunc_vpcs_resolver"))) ATTR void f_hidden_ifunc_vpcs (void);
__attribute__ ((ifunc ("f_ifunc_vpcs_resolver"))) ATTR static void f_local_ifunc_vpcs (void);
void (*refs_basepcs[]) (void) = { f_ifunc_basepcs, };
void (*ATTR refs_vpcs[]) (void) = { f_ifunc_vpcs, f_hidden_ifunc_vpcs, f_local_ifunc_vpcs, };
/* Note: local symbols don't need .variant_pcs, but gcc generates it, so we check them here. */
/* { dg-final { scan-assembler-not {\.variant_pcs\tf_local_basepcs} } } */ /* { dg-final { scan-assembler-not {\.variant_pcs\tf_ifunc_basepcs} } } */ /* { dg-final { scan-assembler-times {\.variant_pcs\tf_local_vpcs} 1 } } */ /* { dg-final { scan-assembler-times {\.variant_pcs\tf_ifunc_vpcs} 1 } } */ /* { dg-final { scan-assembler-times {\.variant_pcs\tf_hidden_ifunc_vpcs} 1 } } */ /* { dg-final { scan-assembler-times {\.variant_pcs\tf_local_ifunc_vpcs} 1 } } */
|