(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
nios2/
biggot-1.c
       1  /* Check that the GOT pointer is being initialized correctly to allow
       2     access to the full 64K maximum GOT size for -fpic, rather than only 32K
       3     (which would happen if the GOT pointer points to the base of the GOT,
       4     as the GOT16 and CALL16 relocations are signed).  */
       5  
       6  /* { dg-options "-fpic" } */
       7  /* { dg-do run { target nios2-*-linux-gnu } } */
       8  
       9  extern void abort (void);
      10  
      11  static int n = 0;
      12  
      13  void
      14  doit (int m)
      15  {
      16    if (m != n)
      17      abort ();
      18    n++;
      19  }
      20  
      21  #define X(N) \
      22    void f_##N (void) { doit (0x##N); }
      23  
      24  #define F(N) f_##N ();
      25  
      26  #define A(N) \
      27    X(N##0) X(N##1) X(N##2) X(N##3) X(N##4) X(N##5) X(N##6) X(N##7) \
      28    X(N##8) X(N##9) X(N##a) X(N##b) X(N##c) X(N##d) X(N##e) X(N##f) \
      29    void f_##N (void) { \
      30      F(N##0) F(N##1) F(N##2) F(N##3) F(N##4) F(N##5) F(N##6) F(N##7) \
      31      F(N##8) F(N##9) F(N##a) F(N##b) F(N##c) F(N##d) F(N##e) F(N##f) \
      32      }
      33  
      34  #define B(N) \
      35    A(N##0) A(N##1) A(N##2) A(N##3) A(N##4) A(N##5) A(N##6) A(N##7) \
      36    A(N##8) A(N##9) A(N##a) A(N##b) A(N##c) A(N##d) A(N##e) A(N##f) \
      37    void f_##N (void) { \
      38      F(N##0) F(N##1) F(N##2) F(N##3) F(N##4) F(N##5) F(N##6) F(N##7) \
      39      F(N##8) F(N##9) F(N##a) F(N##b) F(N##c) F(N##d) F(N##e) F(N##f) \
      40      }
      41  
      42  #define C(N) \
      43    B(N##0) B(N##1) B(N##2) B(N##3) B(N##4) B(N##5) B(N##6) B(N##7) \
      44    B(N##8) B(N##9) B(N##a) B(N##b) B(N##c) B(N##d) B(N##e) B(N##f) \
      45    void f_##N (void) { \
      46      F(N##0) F(N##1) F(N##2) F(N##3) F(N##4) F(N##5) F(N##6) F(N##7) \
      47      F(N##8) F(N##9) F(N##a) F(N##b) F(N##c) F(N##d) F(N##e) F(N##f) \
      48      }
      49  
      50  #define D(N) \
      51    C(N##0) C(N##1) C(N##2) \
      52    void f_##N (void) { \
      53      F(N##0) F(N##1) F(N##2) \
      54      }
      55  
      56  /* This defines 16x16x16x3 leaf functions, requiring something over
      57     48K of GOT space overall.  */
      58  D(0)
      59  
      60  int
      61  main (void)
      62  {
      63    f_0 ();
      64    if (n != 16*16*16*3)
      65      abort ();
      66    return 0;
      67  }