xref: /linux/tools/objtool/tests/generic/fixtures/symid_discarded.c (revision 5b6dca02b3e2254d2fd5706d76d7ab4610a67296)
1*e018004aSPuranjay Mohan // SPDX-License-Identifier: GPL-2.0
2*e018004aSPuranjay Mohan /*
3*e018004aSPuranjay Mohan  * Compiled twice and partially linked so the result has duplicate locals,
4*e018004aSPuranjay Mohan  * which is what symid_needed() requires.  dup_normal is in a live section,
5*e018004aSPuranjay Mohan  * dup_discarded in one the vmlinux link throws away.  DISCARDED_SEC selects
6*e018004aSPuranjay Mohan  * which discarded section, since there is more than one and each was its own
7*e018004aSPuranjay Mohan  * bug.
8*e018004aSPuranjay Mohan  */
9*e018004aSPuranjay Mohan 
10*e018004aSPuranjay Mohan #ifndef DISCARDED_SEC
11*e018004aSPuranjay Mohan #define DISCARDED_SEC ".exitcall.exit"
12*e018004aSPuranjay Mohan #endif
13*e018004aSPuranjay Mohan 
14*e018004aSPuranjay Mohan static const char __modinfo[]
15*e018004aSPuranjay Mohan 	__attribute__((section(".modinfo"), used, aligned(1))) = "\0name=vmlinux";
16*e018004aSPuranjay Mohan 
17*e018004aSPuranjay Mohan static int dup_normal = 1;
18*e018004aSPuranjay Mohan 
19*e018004aSPuranjay Mohan static void *dup_discarded
20*e018004aSPuranjay Mohan 	__attribute__((section(DISCARDED_SEC), used)) = &dup_normal;
21*e018004aSPuranjay Mohan 
FUNC_NAME(void)22*e018004aSPuranjay Mohan int FUNC_NAME(void)
23*e018004aSPuranjay Mohan {
24*e018004aSPuranjay Mohan 	return dup_normal + (dup_discarded != (void *)0);
25*e018004aSPuranjay Mohan }
26