avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[avr-gcc-list] Add 'OS_main' and 'OS_task' attributes in avr-gcc 4.2.1


From: Anatoly Sokolov
Subject: [avr-gcc-list] Add 'OS_main' and 'OS_task' attributes in avr-gcc 4.2.1
Date: Mon, 23 Jul 2007 23:48:48 +0400

Hi.

This patch add "OS_main" and 'OS_task' attributes in GCC 4.2.1. Function with 
"OS_main" and 'OS_task' attributes do not save any "call-saved" registers.

1. "OS_main" attribute  used when there IS guarantee that interrupts are 
disabled at that time when function is called. For example "main" function in 
avr-libc. If this function has local variables that a prologue will look so:
  in r28, 0x3d ; 61
  in r29, 0x3e ; 62
  sbiw r28, 0x08 ; 8
  out 0x3e, r29 ; 62
  out 0x3d, r28 ; 61

No save/clear/restore "I" flag.

2. "OS_task" attribute  used when there is NO guarantee that interrupts are 
disabled at that time when function is called. For example task functions 
multi-threading operating systems. In this case save/clear/restore "I" flag is 
need for changing SP register. Prologue (if this function has local variables) 
will look so:

  in r28, 0x3d ; 61
  in r29, 0x3e ; 62
  sbiw r28, 0x08 ; 8
  in r0, 0x3f ; 63
  cli
  out 0x3e, r29 ; 62
  out 0x3f, r0 ; 63
  out 0x3d, r28 ; 61


Testcase:
__attribute__ ((noinline))
int fn0(long a1, long a2, long a3, long a4, long a5)
{
    return 0;
}

__attribute__ ((OS_main))
int main(void)
{
   volatile long long a; // local var, need function frame

   a = 1;

   return fn0(1, 2, 3, 4, 5); // use call-saved regs
}

PS: At this moment, I have not found a simple way to add "OS_main" attribute 
in the avr-gcc 4.3. So presence of this attribute in GCC 4.3  in doubt.

Anatoly. 


begin 666 gcc-4.2.1-os_main_os_task.txt
address@hidden(&=C8R]C;VYF:6<O879R+V%V<BYC"CT]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T*+2TM(&=C8R]C;VYF:6<O879R+V%V<BYC"2AR979I<VEO;B Q,C8T
M-3<I"BLK*R!G8V,O8V]N9FEG+V%V<B]A=G(N8PDH=V]R:VEN9R!C;W!Y*0I 
M0" M-#DL-B K-#DL."! 0 H@(V1E9FEN92!-05A?3$1?3T9&4T54*$U/1$4I
M("@V-" M("AS:6=N960I1T547TU/1$5?4TE:12 H34]$12DI"B *('-T871I
M8R!I;address@hidden:V5D7V9U;F-T:6]N7W @*'1R964I.PHK<W1A=&EC(&EN
M="!A=G)?3U-?;6%I;E]F=6YC=&EO;E]P("AT<F5E*3L**W-T871I8R!I;G0@
M879R7T]37W1A<VM?9G5N8W1I;VY?<" H=')E92D["B!S=&%T:6,@:6YT(&EN
M=&5R<G5P=%]F=6YC=&EO;E]P("AT<F5E*3L*('-T871I8R!I;G0@<VEG;F%L
M7V9U;F-T:6]N7W @*'1R964I.PH@<W1A=&EC(&EN="!A=G)?<F5G<U]T;U]S
M879E("A(05)$7U)address@hidden"D! ("TT,#$L-B K-# S+#,S($! "B @
M(')E='5R;B!A("$]($Y53$Q?5%)%13L*('T*( address@hidden)N(&YO;GIE
M<F\@:address@hidden<R!A($]37VUA:address@hidden;VXN(" J+PHK"BMS=&%T
M:6,@:6YT"BMA=G)?3U-?;6%I;E]F=6YC=&EO;E]P("AT<F5E(&9U;F,I"BM[
M"BL@('address@hidden("!G8V-?87-S97)T("A44D5%7T-/address@hidden&9U;F,I
M(#T]($953D-424].7T1%0TPI.PHK(" **R @82 ](&QO;VMU<%]A='1R:6)U
M=&address@hidden")/4U]M86EN(address@hidden)55$53("address@hidden&9U
M;F,I*2D["BL@(')E='5R;B!A("$]($Y53$Q?5%)address@hidden
M=7)N(&YO;GIE<F\@:address@hidden<R!A($]37W1A<address@hidden;VXN(" J
M+PHK"BMS=&%T:6,@:6YT"BMA=G)?3U-?=&%S:U]F=6YC=&EO;E]P("AT<F5E
M(&9U;F,I"BM["BL@('address@hidden("!G8V-?87-S97)T("A44D5%7T-/
address@hidden&9U;F,I(#T]($953D-424].7T1%0TPI.PHK(" **R @82 ](&QO;VMU
M<%]A='1R:6)U=&address@hidden")/4U]T87-K(address@hidden)55$53("A44D5%
address@hidden&9U;F,I*2D["BL@(')E='5R;B!A("$]($Y53$Q?5%)%13L**WT*
M*PHK"B O*B!2971U<FX@;F]N>F5R;R!I9B!&54Y#(&ES(&%N(&EN=&5R<G5P
M="!F=6YC=&EO;B!A<R!S<&5C:69I960*(" @(&)Y('1H92 B:6YT97)R=7!T
M(B!A='1R:6)U=&4N(" J+PH@"D! ("TT-#8L." K-#<U+#$Q($! "B @(" @
M0TQ%05)?2$%21%]214=?4T54("@J<V5T*3L*(" @8V]U;G0@/2 P.PH@"BT@
M("\J($YO(&address@hidden&\@<V%V92!A;GD@<F5G:7-T97)S(&EF('1H92!F=6YC
M=&EO;B!N979E<B!R971U<FYS+B @*B\*+2 @:address@hidden)4U]63TQ!
M5$E,12 H8W5R<F5N=%]F=6YC=&EO;E]D96-L*2D**R @address@hidden@;F5E9"!T
M;R!S879E(&%N>2!R96=I<W1E<G,@:address@hidden&AE(&9U;F-T:6]N(&YE=F5R(')E
M='5R;G,@;W(@"BL@(" @(&ES(&AA=F4@(D]37VUA:6XB(&]R($]37W1A<VL@
M871T<FEB=71E+B @*B\**R @:address@hidden)4U]63TQ!5$E,12 H8W5R
M<F5N=%]F=6YC=&EO;E]D96-L*0HK(" @(" @?'address@hidden:6Y?9G5N
M8W1I;VY?<" H8W5R<F5N=%]F=6YC=&EO;E]D96-L*0HK(" @(" @?'address@hidden
M7T]37W1A<VM?9G5N8W1I;VY?<" H8W5R<F5N=%]F=6YC=&EO;E]D96-L*2D*
M(" @("!R971U<FX@,#L*( H@("!F;W(@*')E9R ](# [(')E9R \(#,R.R!R
M96<K*RD*0$ @+30Y."PW("LU,S L-B! 0 H@"2 @)B8@(2!I;G1E<G)U<'1?
M9G5N8W1I;VY?<" H8W5R<F5N=%]F=6YC=&EO;E]D96-L*0H@"2 @)B8@(2!S
M:6=N86Q?9G5N8W1I;VY?<" H8W5R<F5N=%]F=6YC=&EO;E]D96-L*0H@"2 @
M)B8@(2!A=G)?;F%K961?9G5N8W1I;VY?<" H8W5R<F5N=%]F=6YC=&EO;E]D
M96-L*0HM"2 @)B8@(2!-04E.7TY!345?4" H1$5#3%].04U%("AC=7)R96YT
M7V9U;F-T:6]N7V1E8VPI*0H@"2 @)B8@(2!44D5%7U1(25-?5D],051)3$4@
M*&-U<G)E;G1?9G5N8W1I;VY?9&5C;"address@hidden@"D! ("TV-C<L-R K-CDX
M+#@@0$ *(" @:6YT(')E9SL*(" @:6YT(&EN=&5R<G5P=%]F=6YC7W ["B @
M(&EN="!S:6=N86Q?9G5N8U]P.PHM("!I;G0@;6%I;E]P.PHK("!I;address@hidden
M;6%I;E]P.PHK("!I;address@hidden&%S:U]P.PH@("!I;G0@;&EV95]S97$["B @
M(&EN="!M:6YI;6EZ93L*( I 0" address@hidden<@*S<Q-RPX($! "B *(" @:6YT
M97)R=7!T7V9U;F-?<" ](&EN=&5R<G5P=%]F=6YC=&EO;E]P("AC=7)R96YT
M7V9U;F-T:6]N7V1E8VPI.PH@("!S:6=N86Q?9G5N8U]P(#T@<VEG;F%L7V9U
M;F-T:6]N7W @*&-U<G)E;G1?9G5N8W1I;VY?9&5C;"D["BT@(&UA:6Y?<" ]
M($U!24Y?3D%-15]0("A$14-,address@hidden&-U<G)E;G1?9G5N8W1I;VY?9&5C
M;"DI.PHK("!/4U]M86EN7W @/2!A=G)?3U-?;6%I;E]F=6YC=&EO;E]P("AC
M=7)R96YT7V9U;F-T:6]N7V1E8VPI.PHK("!/4U]T87-K7W @/2!A=G)?3U-?
M=&%S:U]F=6YC=&EO;E]P("AC=7)R96YT7V9U;F-T:6]N7V1E8VPI.PH@("!L
M:79E7W-E<2 ]('-E<75E;G1?<F5G<U]L:79E("@I.PH@("!M:6YI;6EZ92 ]
M("A405)'151?0T%,3%]04D],3T=515,*( D@(" @(" F)B A:6YT97)R=7!T
M7V9U;F-?<" F)B A<VEG;F%L7V9U;F-?<" F)B!L:79E7W-E<2D["D! ("TW
M,#4L,address@hidden<S."PX($! "B )(" @(" @($%3,2 H8VQR+%]?>F5R;U]R96=?
M7RD@(" @(EQN(BD["B @(" @("!P<F]L;V=U95]S:7IE("L](#4["B @(" @
M?0HM("!I9B H;6%I;E]P*0HK("!I9B H;6EN:6UI>F4@)address@hidden&9R86UE7W!O
M:6YT97)?;F5E9&5D('Q\(&QI=F5?<V5Q(address@hidden( H@(" @('L*+2 @(" @
M(&9P<FEN=&address@hidden&9I;&4L("@B7'0B( HM"0D@(" 
@("address@hidden&QD:2QR,address@hidden
M("(L;&\X*"5S("T@(B!(3U-47U=)1$5?24Y47U!224Y47T1%0R B*2(@0U)?
M5$%""BT)"2 @(" @($%3,2 H;&1I+'(R.2D@(BQH:address@hidden)7,@+2 B($A/4U1?
M5TE$15])3E1?4%))3E1?1$5#("(I(B!#4E]404(*+0D)(" @(" @05,R("AO
M=70L7U]34%](7U\L<C(Y*2 @(" @0U)?5$%""BT)"2 @(" @($%3,B H;W5T
M+%]?4U!?3%]?+'(R."D@(EQN(BDL"BT)(" @(" @(&%V<E]I;FET7W-T86-K
M+"!S:7IE+"!A=G)?:6YI=%]S=&%C:RP@<VEZ92D["BT@(" @(" *+2 @(" @
M('!R;VQO9W5E7W-I>address@hidden@-#L*+2 @("!]"BT@(&5L<V4@:address@hidden&UI;FEM
M:7IE("8F("AF<F%M95]P;VEN=&5R7VYE961E9"!\?"!L:79E7W-E<2 ^(#8I
M*2 *+2 @("!["B @(" @("!F<')I;G1F("AF:6QE+" H(EQT(@H@"0D@(" @
M("address@hidden&QD:2P@<C(V*2 B+&QO."@B($A/4U1?5TE$15])3E1?4%))3E1?
M1$5#("(I(B!#4E]404(*( D)(" @(" @05,Q("AL9&DL('(R-RD@(BQH:address@hidden
M(B!(3U-47U=)1$5?24Y47U!224Y47T1%0R B*2(@0U)?5$%"*2P@<VEZ92P@
M<VEZ92D["D! ("TW-34L,3(@*S<W-RPQ-R! 0 H@"7T*(" @(" @(&EF("AF
M<F%M95]P;VEN=&5R7VYE961E9"D*( E["BL)("!I9B H(4]37VUA:6Y?<" F
M)B A3U-?=&%S:U]P*0HK(" @(" @(" @(" @>PHK"2 @(" @(&9P<FEN=&8@
M*&9I;&4L(")<="(**PD)(" @(" @($%3,2 H<'5S:"QR,address@hidden(address@hidden
M"0D@(" @(" @05,Q("AP=7-H+'(R.2D@(EQN(BD["BL)(" @(" @<')O;&]G
M=65?<VEZ92 K/2 R.PHK"2 @("!]"B )("!F<')I;G1F("AF:6QE+" B7'0B
M"BT)"2 @($%3,2 
H<'5S:"QR,address@hidden(address@hidden"0D@("address@hidden'!U<address@hidden
M<C(Y*2!#4E]404(*( D)(" @05,R("AI;BQR,address@hidden,7U\I($-27U1!
address@hidden@"0D@("!!4S(@*&EN+'(R.2Q?7U-07TA?7RD@(EQN(BD["BT)("!P<F]L
M;V=U95]S:7IE("L](#0["BL)("!P<F]L;V=U95]S:7IE("L](#(["B )("!I
M9B H<VEZ92D*( D@(" @>PH@"2 @(" @(&9P=71S("@B7'0B+"!F:6QE*3L*
M0$ @+3<W,"PW("LW.3<L-R! 0 H@"0E["B )"2 @<')O;&]G=65?<VEZ92 K
M/2!O=71?<V5T7W-T86-K7W!T<B H9FEL92P@,2P@,2D["B )"7T*+0D@(" @
M("!E;'-E(&EF("AS:6=N86Q?9G5N8U]P*0HK"2 @(" @(&5L<V4@:address@hidden'-I
M9VYA;%]F=6YC7W @?'address@hidden;6%I;E]P*0H@"0E["B )"2 @<')O;&]G=65?
M<VEZ92 K/2!O=71?<V5T7W-T86-K7W!T<B H9FEL92P@,"P@,"D["B )"7T*
M0$ @+3<Y-"PW("LX,C$L."! 0 H@("!I;G0@<F5G.PH@("!I;G0@:6YT97)R
M=7!T7V9U;F-?<#L*(" @:6YT('-I9VYA;%]F=6YC7W ["BT@(&EN="!M86EN
M7W ["BL@(&EN="!/4U]M86EN7W ["BL@(&EN="!/4U]T87-K7W ["B @(&EN
M="!F=6YC=&EO;E]S:7IE.PH@("!I;G0@;&EV95]S97$["B @(&EN="!M:6YI
M;6EZ93L*0$ @address@hidden" K.#4T+#$T($! "B *(" @:6YT97)R=7!T7V9U
M;F-?<" ](&EN=&5R<G5P=%]F=6YC=&EO;E]P("AC=7)R96YT7V9U;F-T:6]N
M7V1E8VPI.PH@("!S:6=N86Q?9G5N8U]P(#T@<VEG;F%L7V9U;F-T:6]N7W @
M*&-U<G)E;G1?9G5N8W1I;VY?9&5C;"D["BT@(&UA:6Y?<" ]($U!24Y?3D%-
M15]0("A$14-,address@hidden&-U<G)E;G1?9G5N8W1I;VY?9&5C;"DI.PHK("!/
M4U]M86EN7W @/2!A=G)?3U-?;6%I;E]F=6YC=&EO;E]P("AC=7)R96YT7V9U
M;F-T:6]N7V1E8VPI.PHK("!/4U]T87-K7W @/2!A=G)?3U-?=&%S:U]F=6YC
M=&EO;E]P("AC=7)R96YT7V9U;F-T:6]N7V1E8VPI.PH@("!L:79E7W-E<2 ]
M('-E<75E;G1?<F5G<U]L:79E("@I.PH@("!M:6YI;6EZ92 ]("A405)'151?
M0T%,3%]04D],3T=515,*( D@(" @(" F)B A:6YT97)R=7!T7V9U;F-?<" F
M)B A<VEG;F%L7V9U;F-?<" F)B!L:79E7W-E<2D["B @( HM("!I9B H;6%I
M;E]P*0HK("!I9B H;6EN:6UI>F4@)address@hidden&9R86UE7W!O:6YT97)?;F5E9&5D
M('Q\(&QI=F5?<V5Q(address@hidden"DI"B @(" @>PHM(" @(" @address@hidden)N('9A
M;'5E(&9R;VT@;6%I;address@hidden(&ES(&%L<F5A9'D@:address@hidden&AE(&-O<G)E8W0@<F5G
M:7-T97)S"BT)("AR,C4Z<C(T*2!A<R!T:&address@hidden"@I(&%R9W5M96YT+B @
M*B\*+2 @(" @(&EF("A!5E)?345'02D*+0E["BT)("!F<'5T<R H(EQT(B!!
address@hidden&IM<"QE>&ET*2 B7&XB+"!F:6QE*3L*+0D@(&5P:6QO9W5E7W-I>F4@
M*ST@,CL*+0E]"BT@(" @("!E;'-E"BT)>PHM"2 @9G!U=',@*")<="(@05,Q
M("AR:FUP+&5X:70I(")<;B(L(&9I;&4I.PHM"2 @*RME<&EL;V=U95]S:7IE
M.PHM"7T*+2 @("!]"BT@(&5L<V4@:address@hidden&UI;FEM:7IE("8F("AF<F%M95]P
M;VEN=&5R7VYE961E9"!\?"!L:79E7W-E<2 ^(#0I*0HM(" @('L*(" @(" @
M(&9P<FEN=&address@hidden&9I;&4L("@B7'0B($%3,B H;&1I+"!R,S L("5D*2!#4E]4
M04(I+"!L:79E7W-E<2D["B @(" @(" K*V5P:6QO9W5E7W-I>F4["B @(" @
M("!I9B H9G)A;65?<&]I;G1E<E]N965D960I"D! ("TX.30L,3 @*SDP."PQ
M,R! 0 H@"0D@(&5P:6QO9W5E7W-I>address@hidden@;W5T7W-E=%]S=&%C:U]P='(@
M*&9I;&4L("TQ+" M,2D["B )"7T*( D@(" @?0HM"2 @9G!R:6YT9B H9FEL
M92P@(EQT(@HM"0D@("address@hidden'!O<"QR,CDI(address@hidden"0D@("!!4S$@
M*'!O<"QR,address@hidden(")<;B(I.PHM"2 @97!I;&]G=65?<VEZ92 K/2 R.PHK"2 @
M:address@hidden"%/4U]M86EN7W @)B8@(4]37W1A<VM?<"D**R @(" @(" @(" @('L*
M*PD@(" @("!F<')I;G1F("AF:6QE+" B7'0B"BL)"2 @(" @("address@hidden'!O
M<"QR,CDI(address@hidden"0D@(" @(" @05,Q("AP;W L<C(X*2 B7&XB*3L*
M*PD@(" @("!E<&EL;V=U95]S:7IE("L](#(["BL)(" @('T*( E]"B *(" @
M(" @(&5P:6QO9W5E7W-I>address@hidden@879R7W)E9W-?=&]?<V%V92 H)G-E="D[
M"D! ("address@hidden"! 0 H@(" @:6YT97)R=7!T("T@;6%K92!A
M(&9U;F-T:6]N('1O(&)E(&AA<F1W87)E(&EN=&5R<G5P="address@hidden(@9G5N
M8W1I;VX*(" @('!R;VQO9W5E(&EN=&5R<G5P=',@87)E(&5N86)L960["B @
M("!N86ME9" @(" @+2!D;VXG="!G96YE<F%T92!F=6YC=&EO;B!P<F]L;V=U
M92]E<&EL;V=U92!A;address@hidden')E="<@8V]M;6%N9"X**R @($]37VUA:address@hidden N
M+BX**R @($]37W1A<address@hidden N+BX*( H@(" @3VYL>2!@<')O9VUE;2<@871T
M<FEB=71E('9A;&ED(&9O<B!T>7!E+B @*B\*( I 0" M-#8U-"PV("LT-C<S
M+#@@0$ *(" @>R B<VEG;F%L(BP@(" @,"P@,"address@hidden')U92P@(&9A;'-E+"!F
M86QS92P@(&%V<E]H86YD;&5?9FYD96-L7V%T=')I8G5T92!]+ H@("![(")I
M;G1E<G)U<'0B+" P+" P+"!T<G5E+" @9F%L<V4L(&9A;'-E+" @879R7VAA
M;F1L95]F;F1E8VQ?871T<FEB=71E('TL"B @('L@(FYA:V5D(BP@(" @(# L
M(# L(&9A;'-E+"!T<G5E+" @=')U92P@("!A=G)?:&%N9&QE7V9N='EP95]A
M='1R:6)U=&address@hidden @>R B3U-?;6%I;B(L(" @,"P@,"address@hidden<V4L('1R
M=64L("!T<G5E+" @(&%V<E]H86YD;&5?9FYT>7!E7V%T=')I8G5T92!]+ HK
M("![(")/4U]T87-K(BP@(" P+" P+"address@hidden')U92P@('1R=64L(" @
M879R7VAA;F1L95]F;G1Y<&5?871T<FEB=71E('TL"B @('address@hidden,3"P@(" @
L(" @(# L(# L(&9A;'-E+"address@hidden<V4L(address@hidden@?3L*( H`
`
end





reply via email to

[Prev in Thread] Current Thread [Next in Thread]