Placing variable/array in a particular section

Jens Bauer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Apr 5 06:34:19 PDT 2015


On Sunday, 5 April 2015 at 10:16:10 UTC, Johannes Pfau wrote:
> I'll push support for the section attribute in 1~2 hours. 
> (waiting for the testsuite ;-)
>
> [1] 
> https://github.com/D-Programming-GDC/GDC/blob/master/libphobos/libdruntime/gcc/attribute.d

I've made a couple of tests and it all works as expected...
The snippet below builds without problems (except for the 
expected error; confirming that I have gotten the immutable part 
right).
In addition, I've checked the disassembly and it all checks out 
fine.

import gcc.attribute;

//alias extern(C) void function() VectorFunc;
//@attribute("section",(".isr_vector")) immutable VectorFunc 
[100] functions = [ cast(VectorFunc) 0x10001000, &Reset_Handler, 
cast(VectorFunc)0xfadeface ];		/* works */
//@attribute("section",".isr_vector") immutable VectorFunc [100] 
functions = [ cast(VectorFunc) 0x10001000, &Reset_Handler, 
cast(VectorFunc)0xfeedface ];		/* works */

alias extern(C) immutable void function() VectorFunc;
@attribute("section",".isr_vector") VectorFunc [100] g_pfnVectors 
= [ cast(VectorFunc) 0x10001000, &Reset_Handler, 
cast(VectorFunc)0xfeedfeed ];	/* works */


extern(C) void Reset_Handler()
{
//	g_pfnVectors[4] = cast(VectorFunc)0x1000;	/* error: cannot 
modify immutable expression g_pfnVectors[4] (correct behaviour) */

	while(1){}
}

...

08000000 <_D5start12g_pfnVectorsyG100PUZv>:
  8000000:	10001000 	andne	r1, r0, r0
  8000004:	08000235 	stmdaeq	r0, {r0, r2, r4, r5, r9}
  8000008:	feedface 	cdp2	10, 14, cr15, cr13, cr14, {6}

[snipped some frame_dummy, tm_clones and dtors junk]

08000234 <Reset_Handler>:
  8000234:	e7fe      	b.n	8000234 <Reset_Handler>


More information about the Digitalmars-d-learn mailing list