Hi,

I finally got around to checking the attached patch for the
https://bugs.launchpad.net/ubuntu/+source/gcc-4.8/+bug/1270789

I noticed attached patch causes regression for pr38151.c in gcc test-suite.

A reduced test-case that triggers this is:
static unsigned long global_max_fast;
int __libc_mallopt (int param_number, int value)
{
 __asm__ __volatile__ ("# %[_SDT_A2]" :: [_SDT_A2] "nor"
((global_max_fast)));
 global_max_fast = 1;
}

In this regard I have couple of questions:

1. Is the in-line asm valid? Look ok to me.
2. For the pr38151.c regression, asm diff is as shown below.

<       add     x0, x0, :lo12:.LANCHOR0
<       ldr     x0, [x0]
---
>       ldr     x0, [x0,#:lo12:.LANCHOR0]

This causes:
pr38151.c:(.text+0x10c): relocation truncated to fit:
R_AARCH64_LDST64_ABS_LO12_NC against `.rodata'
collect2: error: ld returned 1 exit status.

If I however increase the alignment of .rodata where .LANCHOR0 is
defined, this passes.  Is alignment of BITS_PER_UNIT valid for
SYMBOL_REF? If I change it as I am doing this attached patch, is there
anything else I need to do.



Thanks,
Kugan
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 57b6645..3d15d54 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -3193,6 +3193,8 @@ aarch64_classify_address (struct aarch64_address_info 
*info,
                }
              else if (SYMBOL_REF_DECL (sym))
                align = DECL_ALIGN (SYMBOL_REF_DECL (sym));
+             else if (GET_CODE(sym) == SYMBOL_REF)
+               align = GET_MODE_ALIGNMENT (GET_MODE (sym));
              else
                align = BITS_PER_UNIT;
 
_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to