Re:Possible kernel optimizati

Michael Meissner (meissner@cygnus.com)
16 Dec 1996 12:09:18 -0500


In article <9612141007.aa08415@ax433.mclink.it> Tekno Soft Snc
<MC3641@mclink.it> writes:

| Good! How can do it with a gcc ? In a C code we need to declare this
| functions as part of this section (with #pragma ?), in new exception
| handling we can do it with __asm__(".section __ex_table,\"ax\"").

RTFM:

Declaring Attributes of Functions
=================================

In GNU C, you declare certain things about functions called in your
program which help the compiler optimize function calls and check your
code more carefully.

The keyword `__attribute__' allows you to specify special attributes
when making a declaration. This keyword is followed by an attribute
specification inside double parentheses. Eight attributes, `noreturn',
`const', `format', `section', `constructor', `destructor', `unused' and
`weak' are currently defined for functions. Other attributes, including
`section' are supported for variables declarations (*note Variable
Attributes::.) and for types (*note Type Attributes::.).

You may also specify attributes with `__' preceding and following
each keyword. This allows you to use them in header files without
being concerned about a possible macro of the same name. For example,
you may use `__noreturn__' instead of `noreturn'.

...

`section ("section-name")'
Normally, the compiler places the code it generates in the `text'
section. Sometimes, however, you need additional sections, or you
need certain particular functions to appear in special sections.
The `section' attribute specifies that a function lives in a
particular section. For example, the declaration:

extern void foobar (void) __attribute__ ((section ("bar")));

puts the function `foobar' in the `bar' section.

Some file formats do not support arbitrary sections so the
`section' attribute is not available on all platforms. If you
need to map the entire contents of a module to a particular
section, consider using the facilities of the linker instead.

-- 
Michael Meissner, Cygnus Support (East Coast)
4th floor, 955 Massachusetts Avenue, Cambridge, MA 02139, USA
meissner@cygnus.com,	617-354-5416 (office),	617-354-7161 (fax)