Blame elf/tst-execstack-mod.c
|
Packit |
6c4009 |
/* Test module for making nonexecutable stacks executable
|
|
Packit |
6c4009 |
on load of a DSO that requires executable stacks. */
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
#include <stdbool.h>
|
|
Packit |
6c4009 |
#include <stdio.h>
|
|
Packit |
6c4009 |
#include <stdlib.h>
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
void callme (void (*callback) (void));
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
/* This is a function that makes use of executable stack by
|
|
Packit |
6c4009 |
using a local function trampoline. */
|
|
Packit |
6c4009 |
void
|
|
Packit |
6c4009 |
tryme (void)
|
|
Packit |
6c4009 |
{
|
|
Packit |
6c4009 |
bool ok = false;
|
|
Packit |
6c4009 |
void callback (void) { ok = true; }
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
callme (&callback);
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
if (ok)
|
|
Packit |
6c4009 |
printf ("DSO called ok (local %p, trampoline %p)\n", &ok, &callback);
|
|
Packit |
6c4009 |
else
|
|
Packit |
6c4009 |
abort ();
|
|
Packit |
6c4009 |
}
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
void
|
|
Packit |
6c4009 |
callme (void (*callback) (void))
|
|
Packit |
6c4009 |
{
|
|
Packit |
6c4009 |
(*callback) ();
|
|
Packit |
6c4009 |
}
|