xref: /linux/tools/objtool/tests/generic/fixtures/thinlto_local.c (revision 5b6dca02b3e2254d2fd5706d76d7ab4610a67296)
1*7fd24723SPuranjay Mohan // SPDX-License-Identifier: GPL-2.0
2*7fd24723SPuranjay Mohan /*
3*7fd24723SPuranjay Mohan  * Two translation units (TU_B selects the second) linked with ThinLTO.
4*7fd24723SPuranjay Mohan  * Importing bump() promotes the file-local counter, renaming it
5*7fd24723SPuranjay Mohan  * counter.llvm.<hash>.  The hash is content derived, so it differs between the
6*7fd24723SPuranjay Mohan  * original and patched builds.
7*7fd24723SPuranjay Mohan  */
8*7fd24723SPuranjay Mohan 
9*7fd24723SPuranjay Mohan #ifdef TU_B
10*7fd24723SPuranjay Mohan 
11*7fd24723SPuranjay Mohan extern int bump(void);
12*7fd24723SPuranjay Mohan 
other_entry(void)13*7fd24723SPuranjay Mohan int other_entry(void)
14*7fd24723SPuranjay Mohan {
15*7fd24723SPuranjay Mohan 	return bump() + bump();
16*7fd24723SPuranjay Mohan }
17*7fd24723SPuranjay Mohan 
18*7fd24723SPuranjay Mohan #else
19*7fd24723SPuranjay Mohan 
20*7fd24723SPuranjay Mohan static const char __modinfo[]
21*7fd24723SPuranjay Mohan 	__attribute__((section(".modinfo"), used, aligned(1))) = "\0name=vmlinux";
22*7fd24723SPuranjay Mohan 
23*7fd24723SPuranjay Mohan static int counter;
24*7fd24723SPuranjay Mohan 
bump(void)25*7fd24723SPuranjay Mohan int bump(void)
26*7fd24723SPuranjay Mohan {
27*7fd24723SPuranjay Mohan 	return ++counter;
28*7fd24723SPuranjay Mohan }
29*7fd24723SPuranjay Mohan 
target(void)30*7fd24723SPuranjay Mohan int target(void)
31*7fd24723SPuranjay Mohan {
32*7fd24723SPuranjay Mohan #ifdef PATCHED
33*7fd24723SPuranjay Mohan 	return counter + 1;
34*7fd24723SPuranjay Mohan #else
35*7fd24723SPuranjay Mohan 	return counter;
36*7fd24723SPuranjay Mohan #endif
37*7fd24723SPuranjay Mohan }
38*7fd24723SPuranjay Mohan 
39*7fd24723SPuranjay Mohan #endif
40