GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
TRAMPOLINE(3) FreeBSD Library Functions Manual TRAMPOLINE(3)

trampoline - closures as first-class C functions

#include <trampoline.h>

function = alloc_trampoline(address, variable, data);

free_trampoline(function);

is_trampoline(function)
trampoline_address(function)
trampoline_variable(function)
trampoline_data(function)

These functions implement closures as first-class C functions. A closure consists of a regular C function and a piece of data which gets passed to the C function when the closure is called.

Closures as first-class C functions means that they fit into a function pointer and can be called exactly like any other C function. function = alloc_trampoline(address, variable, data) allocates a closure. When function gets called, it stores data in the variable variable and calls the C function at address. The function at address is responsible for fetching data out of variable immediately, before execution of any other function call.

This is much like gcc's local functions, except that the GNU C local functions have dynamic extent (i.e. are deallocated when the creating function returns), while trampoline provides functions with indefinite extent: function is only deallocated when free_trampoline(function) is called.

is_trampoline(function) checks whether the C function function was produced by a call to alloc_trampoline. If this returns true, the arguments given to alloc_trampoline can be retrieved:

trampoline_address(function) returns address,

trampoline_variable(function) returns variable,

trampoline_data(function) returns data.

gcc(1), stdarg(3), callback(3)

Passing the data through a global variable is not reentrant. Don't call trampoline functions from within signal handlers. This is fixed in the callback(3) package.

The way gcc builds local functions is described in the gcc source, file gcc-2.6.3/config/cpu/cpu.h.

Bruno Haible <bruno@clisp.org>

Many ideas were cribbed from the gcc source.

1 January 2017

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.