Re:Possible kernel optimizati

Michael Meissner (
16 Dec 1996 12:09:18 -0500

In article <> Tekno Soft Snc
<> 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\"").


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,	617-354-5416 (office),	617-354-7161 (fax)