extern void foo(void);
__attribute__((section(".data.var"))) volatile char a_variable[8];
__attribute__((section(".text.factorial"))) unsigned int
factorial(unsigned int n) {
if (n == 0)
return 1;
return factorial(n - 1) * n;
}
__attribute__((noinline)) static void
factorial_wrapper() {
factorial(5);
}
__attribute__((always_inline)) static void
factorial_2nd_layer_inline_wrapper() {
factorial(6);
}
__attribute__((always_inline)) static void
factorial_inline_wrapper() {
factorial_2nd_layer_inline_wrapper();
}
__attribute__((section(".text.inline")))
__attribute__((noinline)) static void
factorial_inline_test() {
factorial_inline_wrapper();
}
void my_indirect_func(void) {
}
static void (*resolve_indirect_func(void))(void) {
return my_indirect_func;
}
void indirect_func(void) __attribute__ ((ifunc ("resolve_indirect_func")));
__attribute__((noinline)) static void i_exist_twice(void) {
a_variable[1] = '\0';
}
asm(
".globl dummy\n"
".type dummy, @function\n"
"dummy:\n"
".byte 0xde\n"
".byte 0xad\n"
".byte 0xbe\n"
".byte 0xef\n"
);
extern void dummy(void);
asm(
".globl untyped\n"
"untyped:\n"
"nop\n"
"nop\n"
);
extern void untyped(void);
asm(
".globl zero_size\n"
".type zero_size, @function\n"
"zero_size:\n"
);
extern void zero_size(void);
__attribute__((section(".text.main"))) int
main(int argc, const char *argv[]) {
factorial_wrapper();
factorial_inline_test();
foo();
dummy();
i_exist_twice();
zero_size();
untyped();
a_variable[0] = 42;
return 0;
}