xref: /linux/tools/objtool/tests/generic/fixtures/cold_function.c (revision 5b6dca02b3e2254d2fd5706d76d7ab4610a67296)
1*76e7630dSPuranjay Mohan // SPDX-License-Identifier: GPL-2.0
2*76e7630dSPuranjay Mohan /* Function the compiler may split into a hot part and a foo.cold part. */
3*76e7630dSPuranjay Mohan 
4*76e7630dSPuranjay Mohan static const char __modinfo[]
5*76e7630dSPuranjay Mohan 	__attribute__((section(".modinfo"), used, aligned(1))) = "\0name=vmlinux";
6*76e7630dSPuranjay Mohan 
slow_path(int x)7*76e7630dSPuranjay Mohan static void __attribute__((cold, noinline)) slow_path(int x)
8*76e7630dSPuranjay Mohan {
9*76e7630dSPuranjay Mohan 	__asm__ volatile("" :: "r"(x));
10*76e7630dSPuranjay Mohan }
11*76e7630dSPuranjay Mohan 
target(int x)12*76e7630dSPuranjay Mohan int target(int x)
13*76e7630dSPuranjay Mohan {
14*76e7630dSPuranjay Mohan 	if (__builtin_expect(x < 0, 0))
15*76e7630dSPuranjay Mohan 		slow_path(x);
16*76e7630dSPuranjay Mohan #ifdef PATCHED
17*76e7630dSPuranjay Mohan 	return x + 2;
18*76e7630dSPuranjay Mohan #else
19*76e7630dSPuranjay Mohan 	return x + 1;
20*76e7630dSPuranjay Mohan #endif
21*76e7630dSPuranjay Mohan }
22