[PATCH] Series-to: u-boot Cover-letter: Fix Typo error in Makefile

Heinrich Schuchardt xypron.glpk at gmx.de
Thu Apr 9 19:23:19 CEST 2020


On 2020-04-09 16:25, Sicris Rey Embay wrote:
> On Thu, Apr 9, 2020 at 8:49 PM Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>
>> On 2020-04-08 17:39, Sicris wrote:
>>> This patch fixes the typo error in Makefile where
>>> -I$(srctree)/arch/$(ARCH)/thumb1/include is not picked up
>>> in the compiler flag when compiling for thumb2.
>>> END
>>>
>>> Signed-off-by: Sicris <sicris.embay at gmail.com>
>>> ---
>>>
>>>  Makefile | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/Makefile b/Makefile
>>> index 8de5ff6d94..503b30392d 100644
>>> --- a/Makefile
>>> +++ b/Makefile
>>> @@ -704,7 +704,7 @@ UBOOTINCLUDE    := \
>>>               -Iinclude \
>>>               $(if $(KBUILD_SRC), -I$(srctree)/include) \
>>>               $(if $(CONFIG_$(SPL_)SYS_THUMB_BUILD), \
>>> -                     $(if $(CONFIG_HAS_THUMB2),, \
>>> +                     $(if $(CONFIG_HAS_THUMB2), \
>>>                               -I$(srctree)/arch/$(ARCH)/thumb1/include),) \
>>
>> This patch relates to
>> https://stackoverflow.com/questions/61097841/error-selected-processor-does-not-support-requested-special-purpose-register
>>
>> The original problem was using the wrong compiler as discussed on
>> Stackoverflow.
>
> Sorry, I was not very clear on the problem that I've encountered.
>
> I tried the M-profile as suggested in the stackoverflow comment from
> Frant.  However, I still get the same error
> with CONFIG_CMD_UBI=y.
>
> {standard input}:757: Error: selected processor does not support
> requested special purpose register – msr cpsr_c,r3
>
> This is due to the assembly inline function local_irq_save() /
> local_irq_restore.  On closer inspection,
> the wrong header for local_irq_save / local_irq_restore was picked up
> by the compiler.
>
> Wrong Header: /arch/arm/include/asm/proc-armv/system.h
> (Closest i can find) Correct Header:
> /arch/arm/thumb1/include/asm/proc-armv/system.h
>
>>
>> Compiling stm32f769-disco_defconfig works fine using the Debian Bullseye
>> package gcc-arm-linux-gnueabi without this patch.
>
> Can you help me check if this compiles using Debian Bullseye with
> CONFIG_CMD_UBI=y?

With this selected compiling fails.

{standard input}:965: Error: selected processor does not support
requested special purpose register -- `mrs r1,cpsr'

The CPSR register is not present on ARMv6-M and ARMv7-M processors.

So on these architectures arch/arm/include/asm/proc-armv/system.h has to
be replaced by arch/arm/thumb1/include/asm/proc-armv/system.h.

>>
>> The current logic is:
>> If it is thumb and not thumb2, include the thumb1 directory.
>> If it is thumb and thumb2, do not include the thumb1 directory.
>>
>> You are inverting the logic with your patch:
>>
>> If it is thumb and thumb2, include the thumb1 directory.
>> If it is thumb and not thumb2, do not include the thumb1 directory.
>>
>> This does not make much sense to me.
>>
>
> Does this suggestion make sense?
>
>     $(if $(CONFIG_HAS_THUMB2), \
>         -I$(srctree)/arch/$(ARCH)/thumb2/include),
>         -I$(srctree)/arch/$(ARCH)/thumb1/include),) \

We do not want to use a special include on ARMv7-A even if building in
thumbs mode. So we should explicitly check the CPU architecture here.

If CONFIG_HAS_THUMB2 is undefined or CONFIG_CPU_V7M is defined,
we should use -I$(srctree)/arch/$(ARCH)/thumb1/include.

--- a/Makefile
+++ b/Makefile
@@ -701,13 +701,15 @@ KBUILD_CFLAGS += $(KCFLAGS)
 # Use UBOOTINCLUDE when you must reference the include/ directory.
 # Needed to be compatible with the O= option
-UBOOTINCLUDE    := \
-		-Iinclude \
-		$(if $(KBUILD_SRC), -I$(srctree)/include) \
-		$(if $(CONFIG_$(SPL_)SYS_THUMB_BUILD), \
-			$(if $(CONFIG_HAS_THUMB2),, \
-				-I$(srctree)/arch/$(ARCH)/thumb1/include),) \
-		-I$(srctree)/arch/$(ARCH)/include \
-		-include $(srctree)/include/linux/kconfig.h
+UBOOTINCLUDE    := \
+	-Iinclude \
+	$(if $(KBUILD_SRC), -I$(srctree)/include) \
+	$(if $(CONFIG_$(SPL_)SYS_THUMB_BUILD), \
+		$(if $(CONFIG_HAS_THUMB2), \
+			$(if $(CONFIG_CPU_V7M), \
+				-I$(srctree)/arch/arm/thumb1/include), \
+			-I$(srctree)/arch/arm/thumb1/include)) \
+	-I$(srctree)/arch/$(ARCH)/include \
+	-include $(srctree)/include/linux/kconfig.h

Best regards

Heinrich

>
> with thumb2/include contains the same thumb1/include contents.
>
>> For understanding the if-statement I found the following Makefile useful:
>>
>> ----
>> all:
>>         $(if ,,echo 1)
>>         $(if ,echo 2)
>>         $(if 1,,echo 3)
>>         $(if 1,echo 4)
>> ---
>>
>> The output contains 1 and 4.
>>
>> Best regards
>>
>> Heinrich
>>
>>
>>>               -I$(srctree)/arch/$(ARCH)/include \
>>>               -include $(srctree)/include/linux/kconfig.h
>>>
>>
>
> cheers,
> Sicris Rey
>



More information about the U-Boot mailing list