[U-Boot] [PATCH] arm: make arch memset/memcpy to work with Thumb2 builds

Stefan Agner stefan at agner.ch
Fri Nov 21 16:10:04 CET 2014


On 2014-11-20 20:14, Jeroen Hofstee wrote:
> Hi,
> 
> On 20-11-14 19:21, Bill Pringlemeir wrote:
>>>>> ---
>>>>> arch/arm/lib/memset.S | 40 ++++++++++++++++++++--------------------
>>>>> 1 file changed, 20 insertions(+), 20 deletions(-)
>>>>>
>>>>> diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
>>>>> index 0cdf895..4fe38f6 100644
>>>>> --- a/arch/arm/lib/memset.S
>>>>> +++ b/arch/arm/lib/memset.S
>>>>>>> -18,8 +18,8 @@
>>>>> 1:	subs	r2, r2, #4		@ 1 do we have enough
>>>>> 	blt	5f			@ 1 bytes to align with?
>>>>> 	cmp	r3, #2			@ 1
>>>>> -	strltb	r1, [r0], #1		@ 1
>>>>> -	strleb	r1, [r0], #1		@ 1
>>>>> +	strblt	r1, [r0], #1		@ 1
>>>>> +	strble	r1, [r0], #1		@ 1
>>>> To test this, can we just use 'objdump'.  The hex codes should be
>>>> identical; there is only one encoding.  It should produce the same
>>>> binaries.  No need to run test-suites, etc.
>> On 20 Nov 2014, jeroen at myspectrum.nl wrote:
>>
>>> yes, I should be trivial to test (and find the trivial problem, with
>>> the patch I attached). I am wondering though if all version of
>>> gas accept the suffix notation... any idea?
>> One part of the answer is here,
>>
>>   https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=history;f=gas/config/tc-arm.c;hb=HEAD
>>
>> The 'strCCb' version is definitely more popular in older ARM books.
>> Certainly there could be bugs and/or patched versions that make a
>> difference.  Probably it would be helpful to know what versions are
>> supported.
>>
>> Back in 1999 it seems that the code at least tries to take conditions
>> anywhere,
>>
>>   https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gas/config/tc-arm.c;hb=858f4ff6ff40a73f2a569fc8886157568f08c6db#l6099
>>
>> I think it is most likely to result in a parse error if it wasn't
>> supported.  Any version since Thumb2/Unified (2003-2005?) was introduced
>> should be accepting this syntax with less issues.  Ie, it seems like a
>> better way forward.
>>
>> Historical versions are here,
>>
>> http://ftp.mirrorservice.org/sites/sourceware.org/pub/binutils/old-releases/
>>
>> Who knows if some vendor patched things to mess something up?  Probably
>> grabbing an older 'gas' version and verifying it was the same binary
>> before/after the patch would probably be fair confirmation?  I don't
>> think you can 100% guarantee this doesn't break with some archaic
>> vendors gas.
> 
> Ok thanks for digging that up, that doesn't sound like a problem
> then. Stefan, can you check if you can actually fix the warnings
> instead of suppressing them?
> 

Ok, I could apply the changes from your patch and it fixed the warnings
in memset.S. However, when I build the file in ARM mode then (without
CONFIG_SYS_THUMB_BUILD set). I get this:

arch/arm/lib/memset.S: Assembler messages:
arch/arm/lib/memset.S:92: Error: bad instruction `stmiage
ip!,{r1,r3-r8,lr}'
arch/arm/lib/memset.S:93: Error: bad instruction `stmiage
ip!,{r1,r3-r8,lr}'
arch/arm/lib/memset.S:95: Error: bad instruction `ldmfdeq
sp!,{r4-r8,pc}'
arch/arm/lib/memset.S:98: Error: bad instruction `stmiane
ip!,{r1,r3-r8,lr}'
arch/arm/lib/memset.S:100: Error: bad instruction `stmiane ip!,{r4-r7}'
arch/arm/lib/memset.S:106: Error: bad instruction `stmiane ip!,{r1,r3}'
arch/arm/lib/memset.S:114: Error: bad instruction `strbne r1,[ip],#1'
arch/arm/lib/memset.S:115: Error: bad instruction `strbne r1,[ip],#1'
arch/arm/lib/memset.S:117: Error: bad instruction `strbne r1,[ip],#1'
arch/arm/lib/memset.S:123: Error: bad instruction `strblt r1,[ip],#1'
arch/arm/lib/memset.S:124: Error: bad instruction `strble r1,[ip],#1'

--
Stefan


> Regards,
> Jeroen



More information about the U-Boot mailing list