comp.lang.ada
 help / color / mirror / Atom feed
From: Simon Wright <simon@pushface.org>
Subject: Re: How do I disable elaboration code on this
Date: Mon, 11 Apr 2011 07:28:14 +0100
Date: 2011-04-11T07:28:14+01:00	[thread overview]
Message-ID: <m2vcyls3nl.fsf@pushface.org> (raw)
In-Reply-To: 93b20b91-03ed-48d2-87b6-a109127a5a4f@l18g2000yql.googlegroups.com

Lucretia <Lucretia9000@yahoo.co.uk> writes:

> Just to clarify, this vector is to be:
>
> 1) set up by the user
> 2) gathered by the linker script and written out at the start of the
> elf
> 3) placed at address 0 in the elf
> 4) made ROMable
>
> From your responses, it seems that you don't quite understand my aim
> here, point 4 is the most important here, ROMable means, the compiler
> must not under any circumstance create any elaboration code to
> initialise the array and given that the array is 1) constant and 2)
> has known contents, the compiler should be capable of this. Maybe GNAT
> can't do it? Maybe Ada can't do it and actually is wrong for OS
> development? Which I doubt otherwise, I may as well go create my own
> strongly typed language for OS/embedded work?

Please re-read this which I posted earlier (apologies if my news
interface is failing. I did try mailing it.)

Provided that the Cortex-M3 SDK ld has the ability to specify where a
section should go, this will meet all your criteria except possibly (2)
(which doesn't seem really necessary?)

The SDK must have the ability to specify where sections should go,
otherwise how is this exception vector set up from C or ASM?

------------------------------------------------------------------------

It's the fact that Vector is at 16#0000_0000# that's causing the problem
(there is no elaboration code if the linker is allowed to put Vector
where it likes). So clearly GNAT doesn't know how to make ld do what's
wanted and has to do it the hard way.

Is the missing bit perhaps the use of what on VAX used to be called
program sections (PSECTs)?

GNU ld includes the option

   --section-start sectionname=org
      Locate a section in the output file at the absolute address given
      by org. You may use this option as many times as necessary to
      locate multiple sections in the command line. org must be a single
      hexadecimal integer; for compatibility with other linkers, you may
      omit the leading 0x usually associated with hexadecimal values.

so I suppose what's needed is a way to force Vector into a specific
named section.

What about pragma Linker_Section?
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gnat_rm/Pragma-Linker_005fSection.html

I can't go much further here (what's legal as the name of a section
depends on the assembler/linker conventions), but this

   pragma Linker_Section (Vector, "initial_isv,0");

(instead of "for Vector'Address") resulted in this

        .globl _isr__vector
        .section initial_isv
        .align 5
_isr__vector:
        .quad   _isr__dummy
        .quad   _isr__dummy
        .quad   _isr__dummy
        .quad   _isr__dummy
        .const

(This is a 64-bit compiler, hence the .quad's. No idea about .align 5.)



  reply	other threads:[~2011-04-11  6:28 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-09 13:58 How do I disable elaboration code on this Lucretia
2011-04-09 16:57 ` Jeffrey Carter
2011-04-09 17:01   ` Simon Wright
2011-04-09 17:44     ` Ludovic Brenta
2011-04-09 19:19       ` Simon Wright
2011-04-09 19:32         ` Jeffrey Carter
2011-04-10  9:06           ` Lucretia
2011-04-10  9:31             ` Simon Wright
2011-04-09 19:35         ` Ludovic Brenta
2011-04-09 22:05           ` Simon Wright
2011-04-10  5:39             ` Simon Wright
2011-04-10 17:20   ` Lucretia
2011-04-10 20:12     ` Jeffrey Carter
2011-04-10 20:47     ` Georg Bauhaus
2011-04-10 21:19       ` Lucretia
2011-04-11  5:08         ` Lucretia
2011-04-11  6:28           ` Simon Wright [this message]
2011-04-11  8:54             ` Lucretia
2011-04-11 10:10               ` Simon Wright
2011-04-11 11:59                 ` Simon Clubley
2011-04-11 18:30                   ` Simon Wright
2011-04-11 19:12                     ` Simon Wright
2011-04-11 19:50                       ` Simon Wright
2011-04-11 21:40                       ` Lucretia
2011-04-11 23:12                         ` Lucretia
2011-04-11 23:16                           ` Lucretia
2011-04-11 23:31                           ` Lucretia
2011-04-12  5:22                             ` Simon Wright
2011-04-12 17:07                             ` Simon Clubley
2011-04-13 16:53                       ` Simon Wright
2011-04-15  8:38                       ` Simon Wright
2011-04-11 23:08                   ` Lucretia
2011-04-12 11:50                     ` Simon Clubley
2011-04-12 16:48                       ` Lucretia
2011-04-11 11:19               ` Georg Bauhaus
2011-04-11 13:50                 ` Simon Wright
2011-04-14 19:19               ` Florian Weimer
2011-04-10 16:34 ` Rolf
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox