aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Sadek <andrew.sadek.se@gmail.com>2018-05-06 11:42:06 +0000
committerMichael Eager <eager@gcc.gnu.org>2018-05-06 11:42:06 +0000
commitb0e69bd6980044e30c99d3f1a82aac24b1bc0f59 (patch)
treef0bb5d0feaa5e619968ac23c9e1bb600eb29e5a2 /gcc
parent8309b221a0fce1cb7dc96d4e7df33bc761ccded9 (diff)
downloadgcc-b0e69bd6980044e30c99d3f1a82aac24b1bc0f59.zip
gcc-b0e69bd6980044e30c99d3f1a82aac24b1bc0f59.tar.gz
gcc-b0e69bd6980044e30c99d3f1a82aac24b1bc0f59.tar.bz2
picdtr.c: Add test for -fPIE -mpic-data-is-text-relative.
2018-05-06 Andrew Sadek <andrew.sadek.se@gmail.com> * gcc.target/microblaze/others/picdtr.c: Add test for -fPIE -mpic-data-is-text-relative. From-SVN: r259975
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/microblaze/others/picdtr.c160
2 files changed, 165 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3390087..5903cdc 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-05-06 Andrew Sadek <andrew.sadek.se@gmail.com>
+
+ * gcc.target/microblaze/others/picdtr.c: Add test for
+ -fPIE -mpic-data-is-text-relative.
+
2018-05-06 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/85507
diff --git a/gcc/testsuite/gcc.target/microblaze/others/picdtr.c b/gcc/testsuite/gcc.target/microblaze/others/picdtr.c
new file mode 100644
index 0000000..e7b8b0d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/microblaze/others/picdtr.c
@@ -0,0 +1,160 @@
+/* { dg-options "-fPIE -mpic-data-text-rel -save-temps" } */
+/* { dg-do run } */
+
+#define TEST_VAR(var,val) (var) = (val); if( (var) != (val)) return 0;
+
+int foo(unsigned int i);
+extern void abort(void);
+extern void exit(int);
+
+unsigned char data[8];
+long bigData[7];
+long var;
+typedef struct {int a; short b; long c[1000][1000]; long long d[3][3]; char e; } myDef;
+myDef def;
+const char* myString;
+
+/* { dg-final { scan-assembler "mfs\tr20,rpc" } } */
+/* { dg-final { scan-assembler "addik\tr20,r20,8@TXTPCREL" } } */
+/* { dg-final { scan-assembler ",r20,\[^\n]*var\[^\n]*@TXTREL" } } */
+/* { dg-final { scan-assembler-not ",r0,\[^\n]*var" } } */
+/* { dg-final { scan-assembler ",r20,\[^\n]*bigData\[^\n]*@TXTREL" } } */
+/* { dg-final { scan-assembler-not ",r0,\[^\n]*bigData" } } */
+/* { dg-final { scan-assembler ",r20,\[^\n]*def\[^\n]*@TXTREL" } } */
+/* { dg-final { scan-assembler-not ",r0,\[^\n]*def" } } */
+/* { dg-final { scan-assembler ",r20,\[^\n]*data\[^\n]*@TXTREL" } } */
+/* { dg-final { scan-assembler-not ",r0,\[^\n]*data" } } */
+/* { dg-final { scan-assembler ",r20,\[^\n]*L\[^\n]*@TXTREL" } } */
+/* { dg-final { scan-assembler-not ",r0,\[^\n]*L" } } */
+
+
+
+void foo2() {
+ var++;
+}
+
+int foo (unsigned int i) {
+
+ TEST_VAR(var,123)
+ TEST_VAR(data[i],77)
+ TEST_VAR(data[2],88)
+ TEST_VAR(def.a,897)
+ TEST_VAR(bigData[i],78)
+ TEST_VAR(bigData[2],777)
+ TEST_VAR(def.b,12333);
+ TEST_VAR(def.c[i][i],5);
+ TEST_VAR(def.c[0][1],7);
+ TEST_VAR(def.d[1][2],123);
+ TEST_VAR(def.e,7);
+ TEST_VAR(bigData[i+1],bigData[i*2]);
+
+ foo2();
+
+ myString = "Hello";
+
+ switch(i){
+
+ case 1: var += 2; break;
+ case 2: var += 3; break;
+ case 3: var += 5; break;
+ case 4: var += 7; break;
+ case 5: var += 8; break;
+ default: var = 0;
+
+ }
+
+ return 1;
+
+}
+
+int main() {
+
+ int result = foo(3);
+ if(result != 1 || var != 129) {
+ abort();
+ }
+
+ exit(0);
+
+}
+
+/* { dg-options "-fPIE -mpic-data-text-rel -save-temps" } */
+/* { dg-do run } */
+
+#define TEST_VAR(var,val) (var) = (val); if( (var) != (val)) return 0;
+
+int foo(unsigned int i);
+extern void abort(void);
+extern void exit(int);
+
+unsigned char data[8];
+long bigData[7];
+long var;
+typedef struct {int a; short b; long c[1000][1000]; long long d[3][3]; char e; } myDef;
+myDef def;
+const char* myString;
+
+/* { dg-final { scan-assembler "mfs\tr20,rpc" } } */
+/* { dg-final { scan-assembler "addik\tr20,r20,8@TXTPCREL" } } */
+/* { dg-final { scan-assembler ",r20,\[^\n]*var\[^\n]*@TXTREL" } } */
+/* { dg-final { scan-assembler-not ",r0,\[^\n]*var" } } */
+/* { dg-final { scan-assembler ",r20,\[^\n]*bigData\[^\n]*@TXTREL" } } */
+/* { dg-final { scan-assembler-not ",r0,\[^\n]*bigData" } } */
+/* { dg-final { scan-assembler ",r20,\[^\n]*def\[^\n]*@TXTREL" } } */
+/* { dg-final { scan-assembler-not ",r0,\[^\n]*def" } } */
+/* { dg-final { scan-assembler ",r20,\[^\n]*data\[^\n]*@TXTREL" } } */
+/* { dg-final { scan-assembler-not ",r0,\[^\n]*data" } } */
+/* { dg-final { scan-assembler ",r20,\[^\n]*L\[^\n]*@TXTREL" } } */
+/* { dg-final { scan-assembler-not ",r0,\[^\n]*L" } } */
+
+
+
+void foo2() {
+ var++;
+}
+
+int foo (unsigned int i) {
+
+ TEST_VAR(var,123)
+ TEST_VAR(data[i],77)
+ TEST_VAR(data[2],88)
+ TEST_VAR(def.a,897)
+ TEST_VAR(bigData[i],78)
+ TEST_VAR(bigData[2],777)
+ TEST_VAR(def.b,12333);
+ TEST_VAR(def.c[i][i],5);
+ TEST_VAR(def.c[0][1],7);
+ TEST_VAR(def.d[1][2],123);
+ TEST_VAR(def.e,7);
+ TEST_VAR(bigData[i+1],bigData[i*2]);
+
+ foo2();
+
+ myString = "Hello";
+
+ switch(i){
+
+ case 1: var += 2; break;
+ case 2: var += 3; break;
+ case 3: var += 5; break;
+ case 4: var += 7; break;
+ case 5: var += 8; break;
+ default: var = 0;
+
+ }
+
+ return 1;
+
+}
+
+int main() {
+
+ int result = foo(3);
+ if(result != 1 || var != 129) {
+ abort();
+ }
+
+ exit(0);
+
+}
+