1 /* Helper header for test-audit-threads. 2 3 Copyright (C) 2018-2022 Free Software Foundation, Inc. 4 This file is part of the GNU C Library. 5 6 The GNU C Library is free software; you can redistribute it and/or 7 modify it under the terms of the GNU Lesser General Public 8 License as published by the Free Software Foundation; either 9 version 2.1 of the License, or (at your option) any later version. 10 11 The GNU C Library is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Lesser General Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public 17 License along with the GNU C Library; if not, see 18 <https://www.gnu.org/licenses/>. */ 19 20 /* We use this helper to create a large number of functions, all of 21 which will be resolved lazily and thus have their PLT updated. 22 This is done to provide enough functions that we can statistically 23 observe a thread vs. PLT resolution failure if one exists. */ 24 25 #define CONCAT(a, b) a ## b 26 #define NUM(x, y) CONCAT (x, y) 27 28 #define FUNC10(x) \ 29 FUNC (NUM (x, 0)); \ 30 FUNC (NUM (x, 1)); \ 31 FUNC (NUM (x, 2)); \ 32 FUNC (NUM (x, 3)); \ 33 FUNC (NUM (x, 4)); \ 34 FUNC (NUM (x, 5)); \ 35 FUNC (NUM (x, 6)); \ 36 FUNC (NUM (x, 7)); \ 37 FUNC (NUM (x, 8)); \ 38 FUNC (NUM (x, 9)) 39 40 #define FUNC100(x) \ 41 FUNC10 (NUM (x, 0)); \ 42 FUNC10 (NUM (x, 1)); \ 43 FUNC10 (NUM (x, 2)); \ 44 FUNC10 (NUM (x, 3)); \ 45 FUNC10 (NUM (x, 4)); \ 46 FUNC10 (NUM (x, 5)); \ 47 FUNC10 (NUM (x, 6)); \ 48 FUNC10 (NUM (x, 7)); \ 49 FUNC10 (NUM (x, 8)); \ 50 FUNC10 (NUM (x, 9)) 51 52 #define FUNC1000(x) \ 53 FUNC100 (NUM (x, 0)); \ 54 FUNC100 (NUM (x, 1)); \ 55 FUNC100 (NUM (x, 2)); \ 56 FUNC100 (NUM (x, 3)); \ 57 FUNC100 (NUM (x, 4)); \ 58 FUNC100 (NUM (x, 5)); \ 59 FUNC100 (NUM (x, 6)); \ 60 FUNC100 (NUM (x, 7)); \ 61 FUNC100 (NUM (x, 8)); \ 62 FUNC100 (NUM (x, 9)) 63 64 #define FUNC7000() \ 65 FUNC1000 (1); \ 66 FUNC1000 (2); \ 67 FUNC1000 (3); \ 68 FUNC1000 (4); \ 69 FUNC1000 (5); \ 70 FUNC1000 (6); \ 71 FUNC1000 (7); 72 73 #ifdef FUNC 74 # undef FUNC 75 #endif 76 77 #ifdef externnum 78 # define FUNC(x) extern int CONCAT (retNum, x) (void) 79 #endif 80 81 #ifdef definenum 82 # define FUNC(x) int CONCAT (retNum, x) (void) { return x; } 83 #endif 84 85 #ifdef callnum 86 # define FUNC(x) CONCAT (retNum, x) (); sync_all (x) 87 #endif 88 89 /* A value of 7000 functions is chosen as an arbitrarily large 90 number of functions that will allow us enough attempts to 91 verify lazy resolution operation. */ 92 FUNC7000 (); 93