On Tue, 1 Mar 2005, Paul Schlie wrote:

> Might it be possible to alternatively add an attribute symbol hook so that a
> target may easily define an arbitrary target specific named attribute which
> may be utilized without having to patch the parser, etc. to do so?
> 
> Thereby one could easily define a ROM and/or PMEM attribute hypothetically
> for not only __FUNCTION__, but any arbitrary declared type or parameter
> declaration, preserved through to the back end to aid in target specific
> code generation and/or memory allocation?

The insert_attributes hook *already exists*.  It can insert arbitrary 
attributes on arbitrary declarations completely under target control.  
You can have target command-line options to control what it does.  You can 
have target pragmas that control what it does.  And of course source code 
can explicitly use attributes in any place documented in "Attribute 
Syntax".  I was simply suggesting filling a lacuna by applying this hook 
to implicit __func__ declarations as well as to explicit declarations.

> PMEM __FUNCTION__ 

This syntax doesn't make sense and you haven't explained what you want it 
to mean.  But you can have a pragma or command line option to put 
__FUNCTION__ in a special section if you want.

> ROM static const x[] = "some string"

You can already apply attributes to variables if you want.

> char y[] = ROM "some string"

We know that being able to control sections of string constants is 
desirable.  Bug 192 concerns one case.  Attributes in addition to 
command-line options is a natural extension.  (I noted some implementation 
issues in <http://gcc.gnu.org/ml/gcc/2001-06/msg01653.html>, though 
without considering the issue of suitable syntax for attributes on the 
string constants themselves which doesn't involve syntactic ambiguity for 
C or C++; it may be best not to allow attributes on individual strings, 
only a strings_section attribute to control the section of strings within 
an object or function definition.)

> struct {int a; int b;} z = PMEM {5312, 3421};

This syntax makes even less sense.  A brace-enclosed initializer is not an 
object!  If z has static storage duration, put the attribute on z.  If it 
doesn't, how it is initialized is a matter of compiler optimization and 
specifying attributes of where a copy of the initializer might go doesn't 
seem to make sense.

-- 
Joseph S. Myers               http://www.srcf.ucam.org/~jsm28/gcc/
    [EMAIL PROTECTED] (personal mail)
    [EMAIL PROTECTED] (CodeSourcery mail)
    [EMAIL PROTECTED] (Bugzilla assignments and CCs)

Reply via email to