1 /* Test -mno-pic-data-is-text-relative option. No relative addressing
2 of elements in .data and .bss are allowed with that option. */
3
4 /* { dg-do compile } */
5 /* { dg-options "-O3 -fno-optimize-sibling-calls -fpic -mno-pic-data-is-text-relative -march=z10 -mtune=z9-109 -mzarch" } */
6
7 static int a = 3;
8
9 /* With -mno-pic-data-is-text-relative these must be addressed via
10 GOT. */
11
12 int __attribute__((noinline,noclone))
foo()13 foo ()
14 {
15 return a;
16 }
17
18 /* Just to make a potentially modified. */
19
20 void
bar(int b)21 bar (int b)
22 {
23 a = b;
24 }
25
26 /* { dg-final { scan-assembler-times "\\.LANCHOR\\d+@GOTENT" 2 } } */
27
28 /* The exrl target is a label_ref which should not be affected at
29 all. */
30
31 void
mymemcpy(char * dst,char * src,long size)32 mymemcpy (char *dst, char *src, long size)
33 {
34 __builtin_memcpy (dst, src, size);
35 }
36
37 /* { dg-final { scan-assembler "exrl" } } */
38
39
40 /* PLT slots can still be addressed relatively. */
41
42 int
callfoo()43 callfoo ()
44 {
45 return foo ();
46 }
47
48 /* { dg-final { scan-assembler-times "foo@PLT" 1 } } */
49
50
51 /* GOT entries can still be addressed relatively. */
52
53 void *
fooptr()54 fooptr ()
55 {
56 return &foo;
57 }
58
59 /* { dg-final { scan-assembler-times "foo@GOTENT" 1 } } */
60