.ascii/.asciz does not tag its data as data as needed for be8

John Breitenbach breiten@lexmark.com
Mon Jul 6 15:32:00 GMT 2009


John Breitenbach wrote:
> I just found that the arm assembler does not tag the output of .ascii 
> and .asciz as data like .long/.word, .etc do.
> This is a problem when building in be8 mode, where instructions get 
> swapped but data must not.  I found that
> preceding the .asciz with a .long does get us into "data mode" - we 
> don't switch back to instruction mode with the .ascii.
>
> This macro from the linux kernel shows the problem - the format string 
> gets byte-swapped because its not marked
> as data by the assembler.  readelf -a shows the absence of a $d symbol 
> for the ascii data.
>
>    DBGSTR    "bounce"
>
>    .macro    DBGSTR, str
> #if DEBUG
>    stmfd    sp!, {r0-r3, ip, lr}
>    add    r0, pc, #4
>    bl    printk
>    b    1f
>    .asciz  "<7>VFP: \str\n"
>    .balign 4
> 1:    ldmfd    sp!, {r0-r3, ip, lr}
> #endif
>    .endm
>
> By adding a .long in front of the .asciz and adding 8 instead of 4 to 
> the pc avoids the problem in this
> situation, but there are a handful more throughout the kernel.
>
> gas version is:
> GNU assembler (CodeSourcery 2007q1-10. Marvell 2008q3-13 20081204) 2.17
>
> John.
>
Sorry for the false report - I see that this was already fixed in this 
release:

GNU assembler (CodeSourcery 2007q1-10. Marvell 2009q1-18 20090504) 
2.18.50.20080215





More information about the Binutils mailing list