xref: /linux/tools/objtool/tests/generic/fixtures/special_section_shared.c (revision 5b6dca02b3e2254d2fd5706d76d7ab4610a67296)
1*229ad173SPuranjay Mohan // SPDX-License-Identifier: GPL-2.0
2*229ad173SPuranjay Mohan /* Two functions contribute to one special section; only one is patched. */
3*229ad173SPuranjay Mohan 
4*229ad173SPuranjay Mohan static const char __modinfo[]
5*229ad173SPuranjay Mohan 	__attribute__((section(".modinfo"), used, aligned(1))) = "\0name=vmlinux";
6*229ad173SPuranjay Mohan 
other(int x)7*229ad173SPuranjay Mohan int other(int x)
8*229ad173SPuranjay Mohan {
9*229ad173SPuranjay Mohan 	asm volatile(
10*229ad173SPuranjay Mohan 		"2:\n\t"
11*229ad173SPuranjay Mohan 		".pushsection	.kcfi_traps, \"a\"\n\t"
12*229ad173SPuranjay Mohan 		".balign	4\n\t"
13*229ad173SPuranjay Mohan 		".long		2b - .\n\t"
14*229ad173SPuranjay Mohan 		".popsection\n\t");
15*229ad173SPuranjay Mohan 	return x * 5;
16*229ad173SPuranjay Mohan }
17*229ad173SPuranjay Mohan 
target(int x)18*229ad173SPuranjay Mohan int target(int x)
19*229ad173SPuranjay Mohan {
20*229ad173SPuranjay Mohan 	asm volatile(
21*229ad173SPuranjay Mohan 		"1:\n\t"
22*229ad173SPuranjay Mohan 		".pushsection	.kcfi_traps, \"a\"\n\t"
23*229ad173SPuranjay Mohan 		".balign	4\n\t"
24*229ad173SPuranjay Mohan 		".long		1b - .\n\t"
25*229ad173SPuranjay Mohan 		".popsection\n\t");
26*229ad173SPuranjay Mohan #ifdef PATCHED
27*229ad173SPuranjay Mohan 	return x + 2;
28*229ad173SPuranjay Mohan #else
29*229ad173SPuranjay Mohan 	return x + 1;
30*229ad173SPuranjay Mohan #endif
31*229ad173SPuranjay Mohan }
32