possible issue with bss section in sparc

Stephan Gruenfelder stephan.gruenfelder at space.at
Wed Aug 29 03:26:27 CDT 2007


Hi Aleix,

if "std" accesses data, which is not 8-bytes aligned, the SPARC processor would 
trap (i.e. stop operating in most conditions). It that is your "weird" behaviour 
than your observation makes sense.

Regards
Stephan

Aleix Conchillo Flaqué wrote:
> Hi all,
> 
> yesterday I changed some dynamic allocated arrays of structures to
> static arrays and the application I am working on had a really weird
> behaviour. I changed the array to dynamic and everything worked
> properly again. So, after a couple of hours I started thinking that it
> could be a problem of the bss section (a moment of desperation I
> guess).
> 
> I had a look at the linker script
> (c/src/lib/libbsp/sparc/erc32/startup/linkcmds):
> 
>   .bss :
>   {
>     __bss_start = ALIGN(0x8);
>     _bss_start = .;
>     bss_start = .;
>     *(.bss)
>     *(COMMON)
>     end = .;
>     _end = ALIGN(0x8);
>     __end = ALIGN(0x8);
>   } > ram
> 
> And at the startup code (c/src/lib/libbsp/sparc/shared/start.S):
> 
>         /* clear the bss */
> 1:
> 
>         sethi %hi(_edata),%g2
>         or    %g2,%lo(_edata),%g2       ! g2 = start of bss
>         sethi %hi(_end),%g3
>         or    %g3,%lo(_end),%g3         ! g3 = end of bss
>         mov   %g0,%g1                   ! so std has two zeros
> zerobss:
>         std    %g0,[%g2]
>         add    %g2,8,%g2
>         cmp    %g2,%g3
>         bleu,a zerobss
>         nop
> 
> And I thought it could be a problem on the alignment of the bss
> section, which aligns to the next byte, and the instruction "std
> %g0,[%g2]" which stores 8 bytes at the same time. I'm not an expert on
> this, so this was another moment of desperation.
> 
> I tried out two separate things: first, change the alignment to
> ALIGN(16), and second, change the assembly to (keeping ALIGN(8)):
> 
>         stb    %g0,[%g2]
>         add    %g2,1,%g2
> 
> Both things worked well. So, I'm wondering if that makes any sense at
> all. Could it be that the "std" is overwriting some bytes that it
> should not? Should I find the error in my application, probably a
> memory issue, because the bss thing doesn't make any sense?
> 
> Any clues would be really appreciated.
> 
> Thanks in advance,
> 
> Aleix
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.com
> http://rtems.rtems.org/mailman/listinfo/rtems-users
> 

-- 
====================================================
Stephan GRUENFELDER
Dr.techn., Software Engineer

Tel.  : +43-1-80199/5530
Fax   : +43-1-80199/5577
E-Mail: stephan.gruenfelder at space.at
AUSTRIAN AEROSPACE GmbH
Stachegasse 16
A-1120 Vienna, AUSTRIA / EUROPE
FN 91260 g Handelsgericht Wien
www.space.at


This e-mail is for information only. Any contractual obligations require a confirmation by a company fax or letter.
This e-mail and any file attached to it may contain confidential information. If you are not the intended recipient, please delete this e-mail from your system immediately and notify us of the erroneous transmission; any other use of this e-mail is prohibited.




More information about the rtems-users mailing list