xref: /linux/tools/objtool/tests/generic/fixtures/special_section.c (revision 5b6dca02b3e2254d2fd5706d76d7ab4610a67296)
1*996edd14SPuranjay Mohan // SPDX-License-Identifier: GPL-2.0
2*996edd14SPuranjay Mohan /*
3*996edd14SPuranjay Mohan  * Special section entry with no ANNOTATE_DATA_SPECIAL annotation and a local
4*996edd14SPuranjay Mohan  * label at offset 0, the shape Clang produces for .kcfi_traps.
5*996edd14SPuranjay Mohan  */
6*996edd14SPuranjay Mohan 
7*996edd14SPuranjay Mohan static const char __modinfo[]
8*996edd14SPuranjay Mohan 	__attribute__((section(".modinfo"), used, aligned(1))) = "\0name=vmlinux";
9*996edd14SPuranjay Mohan 
target(int x)10*996edd14SPuranjay Mohan int target(int x)
11*996edd14SPuranjay Mohan {
12*996edd14SPuranjay Mohan 	asm volatile(
13*996edd14SPuranjay Mohan 		"1:\n\t"
14*996edd14SPuranjay Mohan 		".pushsection	.kcfi_traps, \"a\"\n\t"
15*996edd14SPuranjay Mohan 		".balign	4\n\t"
16*996edd14SPuranjay Mohan 		"trap_marker:\n\t"
17*996edd14SPuranjay Mohan 		".long		1b - .\n\t"
18*996edd14SPuranjay Mohan 		".popsection\n\t");
19*996edd14SPuranjay Mohan #ifdef PATCHED
20*996edd14SPuranjay Mohan 	return x + 2;
21*996edd14SPuranjay Mohan #else
22*996edd14SPuranjay Mohan 	return x + 1;
23*996edd14SPuranjay Mohan #endif
24*996edd14SPuranjay Mohan }
25