(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
nios2/
biggot-2.c
       1  /* Check that a program that requires large-GOT support builds and
       2     executes without error.  This program defines a very large number
       3     of leaf functions; compiled with -fPIC, they all require GOT
       4     entries, which will overflow the range addressible by 16-bit -fpic
       5     offsets by about a factor of 2.  */
       6  
       7  /* { dg-options "-fPIC" } */
       8  /* { dg-do run { target nios2-*-linux-gnu } } */
       9  
      10  extern void abort (void);
      11  
      12  static int n = 0;
      13  
      14  void
      15  doit (int m)
      16  {
      17    if (m != n)
      18      abort ();
      19    n++;
      20  }
      21  
      22  #define X(N) \
      23    void f_##N (void) { doit (0x##N); }
      24  
      25  #define F(N) f_##N ();
      26  
      27  #define A(N) \
      28    X(N##0) X(N##1) X(N##2) X(N##3) X(N##4) X(N##5) X(N##6) X(N##7) \
      29    X(N##8) X(N##9) X(N##a) X(N##b) X(N##c) X(N##d) X(N##e) X(N##f) \
      30    void f_##N (void) { \
      31      F(N##0) F(N##1) F(N##2) F(N##3) F(N##4) F(N##5) F(N##6) F(N##7) \
      32      F(N##8) F(N##9) F(N##a) F(N##b) F(N##c) F(N##d) F(N##e) F(N##f) \
      33      }
      34  
      35  #define B(N) \
      36    A(N##0) A(N##1) A(N##2) A(N##3) A(N##4) A(N##5) A(N##6) A(N##7) \
      37    A(N##8) A(N##9) A(N##a) A(N##b) A(N##c) A(N##d) A(N##e) A(N##f) \
      38    void f_##N (void) { \
      39      F(N##0) F(N##1) F(N##2) F(N##3) F(N##4) F(N##5) F(N##6) F(N##7) \
      40      F(N##8) F(N##9) F(N##a) F(N##b) F(N##c) F(N##d) F(N##e) F(N##f) \
      41      }
      42  
      43  #define C(N) \
      44    B(N##0) B(N##1) B(N##2) B(N##3) B(N##4) B(N##5) B(N##6) B(N##7) \
      45    B(N##8) B(N##9) B(N##a) B(N##b) B(N##c) B(N##d) B(N##e) B(N##f) \
      46    void f_##N (void) { \
      47      F(N##0) F(N##1) F(N##2) F(N##3) F(N##4) F(N##5) F(N##6) F(N##7) \
      48      F(N##8) F(N##9) F(N##a) F(N##b) F(N##c) F(N##d) F(N##e) F(N##f) \
      49      }
      50  
      51  #define D(N) \
      52    C(N##0) C(N##1) C(N##2) C(N##3) C(N##4) C(N##5) C(N##6) C(N##7) \
      53    void f_##N (void) { \
      54      F(N##0) F(N##1) F(N##2) F(N##3) F(N##4) F(N##5) F(N##6) F(N##7) \
      55      }
      56  
      57  /* This defines 16x16x16x8 leaf functions, requiring something over
      58     128K of GOT space overall.  */
      59  D(0)
      60  
      61  int
      62  main (void)
      63  {
      64    f_0 ();
      65    if (n != 16*16*16*8)
      66      abort ();
      67    return 0;
      68  }