On Sun, Mar 10, 2019 at 11:12 PM Richard Purdie
<richard.pur...@linuxfoundation.org> wrote:
>
> Testing stap on armv7 machines was failing due to intermixing of thumb/arm
> instructions. Patch the kernel to always use the v7 march options since
> we know our gcc versions support it to avoid the failure and allow
> systemtap to work.

I'd rather just merge this into the kernel directly. I can do a quick
merge and bump
of the SRCREV. If you send the patch against linux-yocto, that makes it easier
for me to grab and integrate it, versus having to dig it out of here
(since my access
is pretty limited at the moment).

Bruce

>
> [YOCTO #13153]
>
> Signed-off-by: Richard Purdie <richard.pur...@linuxfoundation.org>
> ---
>  ...0001-arm-Makefile-Fix-systemtap-4.19.patch | 60 +++++++++++++++++++
>  .../0001-arm-Makefile-Fix-systemtap.patch     | 60 +++++++++++++++++++
>  meta/recipes-kernel/linux/linux-yocto_4.19.bb |  3 +-
>  meta/recipes-kernel/linux/linux-yocto_5.0.bb  |  3 +-
>  4 files changed, 124 insertions(+), 2 deletions(-)
>  create mode 100644 
> meta/recipes-kernel/linux/linux-yocto/0001-arm-Makefile-Fix-systemtap-4.19.patch
>  create mode 100644 
> meta/recipes-kernel/linux/linux-yocto/0001-arm-Makefile-Fix-systemtap.patch
>
> diff --git 
> a/meta/recipes-kernel/linux/linux-yocto/0001-arm-Makefile-Fix-systemtap-4.19.patch
>  
> b/meta/recipes-kernel/linux/linux-yocto/0001-arm-Makefile-Fix-systemtap-4.19.patch
> new file mode 100644
> index 00000000000..53bd53b276c
> --- /dev/null
> +++ 
> b/meta/recipes-kernel/linux/linux-yocto/0001-arm-Makefile-Fix-systemtap-4.19.patch
> @@ -0,0 +1,60 @@
> +From c2995494e311c113177db50ff140cebd94fd4011 Mon Sep 17 00:00:00 2001
> +From: Richard Purdie <richard.pur...@linuxfoundation.org>
> +Date: Sun, 10 Mar 2019 06:43:15 +0000
> +Subject: [PATCH] arm/Makefile: Fix systemtap
> +
> +Currently systemtap fails to operate correctly on armv7 systems such as 
> beaglebone and
> +soon, qemuarm.
> +
> +
> +root@qemuarm:/usr/src/kernel# env -uARCH -uKBUILD_EXTMOD -uCROSS_COMPILE 
> -uKBUILD_IMAGE -uKCONFIG_CONFIG -uINSTALL_PATH -uLD_LIBRARY_PATH 
> PATH=/usr/bin:/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
>  make -C /lib/modules/4.19.19-yocto-standard/build M=/tmp/staptcNU6M modules 
> CONFIG_DEBUG_INFO= CONFIG_STACK_VALIDATION= ARCH=arm stap_4321_src.i 
> --no-print-directory -j2 V=1
> +test -e include/generated/autoconf.h -a -e include/config/auto.conf || (     
>           \
> +echo >&2;                                                      \
> +echo >&2 "  ERROR: Kernel configuration is invalid.";          \
> +echo >&2 "         include/generated/autoconf.h or include/config/auto.conf 
> are missing.";\
> +echo >&2 "         Run 'make oldconfig && make prepare' on kernel src to fix 
> it.";     \
> +echo >&2 ;                                                     \
> +/bin/false)
> +mkdir -p /tmp/staptcNU6M/.tmp_versions ; rm -f 
> /tmp/staptcNU6M/.tmp_versions/*
> +make -f ./scripts/Makefile.build obj=/tmp/staptcNU6M
> +(cat /dev/null;   echo kernel//tmp/staptcNU6M/stap_4321.ko;) > 
> /tmp/staptcNU6M/modules.order
> +  gcc -Wp,-MD,/tmp/staptcNU6M/.stap_4321_src.o.d  -nostdinc -isystem 
> /usr/lib/gcc/arm-poky-linux-gnueabi/8.3.0/include -I./arch/arm/include 
> -I./arch/arm/include/generated  -I./include -I./arch/arm/include/uapi 
> -I./arch/arm/include/generated/uapi -I./include/uapi 
> -I./include/generated/uapi -include ./include/linux/kconfig.h -include 
> ./include/linux/compiler_types.h -D__KERNEL__ -mlittle-endian -Wall -Wundef 
> -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common 
> -fshort-wchar -Werror-implicit-function-declaration -Wno-format-security 
> -std=gnu89 -fno-PIE -DCC_HAVE_ASM_GOTO -fno-dwarf2-cfi-asm 
> -fno-omit-frame-pointer -mapcs -mno-sched-prolog -fno-ipa-sra 
> -mabi=aapcs-linux -mfpu=vfp -funwind-tables -marm -Wa,-mno-warn-deprecated 
> -D__LINUX_ARM_ARCH__=7 -march=armv5t -Wa,-march=armv7-a -msoft-float -Uarm 
> -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation 
> -Wno-format-overflow -Wno-int-in-bool-context -Os -Wno-maybe-uninitialized 
> --param=allow-st
 ore-data-races=0 -Wframe-larger-than=1024 -fstack-protector-strong 
-Wno-unused-but-set-variable -Wno-unused-const-variable -fno-omit-frame-pointer 
-fno-optimize-sibling-calls -fno-var-tracking-assignments -pg 
-Wdeclaration-after-statement -Wno-pointer-sign -Wno-stringop-truncation 
-fno-strict-overflow -fno-merge-all-constants -fmerge-constants 
-fno-stack-check -fconserve-stack -Werror=implicit-int 
-Werror=strict-prototypes -Werror=date-time -Werror=incompatible-pointer-types 
-Werror=designated-init -fmacro-prefix-map=./= -Wno-packed-not-aligned 
-Iinclude2/asm/mach-default -I/lib/modules/4.19.19-yocto-standard/build 
-include /tmp/staptcNU6M/stapconf_4321.h -D "STP_NO_VELREL_CHECK" 
-freorder-blocks -fasynchronous-unwind-tables -Wframe-larger-than=512 
-fno-ipa-icf -Wno-unused -Wno-tautological-compare -Werror 
-I/usr/share/systemtap/runtime  -DMODULE  -DKBUILD_BASENAME='"stap_4321_src"' 
-DKBUILD_MODNAME='"stap_4321"' -c -o /tmp/staptcNU6M/stap_4321_src.o 
/tmp/staptcNU6M/stap_432
 1_src.c
> +/tmp/ccaE9CMG.s: Assembler messages:
> +/tmp/ccaE9CMG.s:49: Error: selected processor does not support `dmb ish' in 
> ARM mode
> +/tmp/ccaE9CMG.s:52: Error: architectural extension `mp' is not allowed for 
> the current b
> +
> +(which was from running the stap command with -v -v -v -k and then being 
> able to run the command individually)
> +
> +Note that it says armv5t above.
> +
> +That comes from the code this patch changes
> +
> +root@qemuarm:/usr/src/kernel# gcc -march=armv7-a 
> /tmp/staptcNU6M/stap_4321_aux_0.c
> +cc1: error: -mfloat-abi=hard: selected processor lacks an FPU
> +
> +which makes me wonder if cc-option fails unless -mfpu-vfp is on the 
> commandline too.
> +
> +Since we have a gcc which accepts the armv7-a arch, just remove the cc-option
> +wrapper unconditionally here.
> +
> +Signed-off-by: Richard Purdie <richard.pur...@linuxfoundation.org>
> +---
> + arch/arm/Makefile | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/arch/arm/Makefile b/arch/arm/Makefile
> +index ecb99f7ac613..8513ba79ea04 100644
> +--- a/arch/arm/Makefile
> ++++ b/arch/arm/Makefile
> +@@ -64,7 +64,7 @@ KBUILD_CFLAGS        += $(call cc-option,-fno-ipa-sra)
> + # macro, but instead defines a whole series of macros which makes
> + # testing for a specific architecture or later rather impossible.
> + arch-$(CONFIG_CPU_32v7M)      =-D__LINUX_ARM_ARCH__=7 -march=armv7-m 
> -Wa,-march=armv7-m
> +-arch-$(CONFIG_CPU_32v7)               =-D__LINUX_ARM_ARCH__=7 $(call 
> cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
> ++arch-$(CONFIG_CPU_32v7)               =-D__LINUX_ARM_ARCH__=7 
> -march=armv7-a -Wa$(comma)-march=armv7-a
> + arch-$(CONFIG_CPU_32v6)               =-D__LINUX_ARM_ARCH__=6 $(call 
> cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
> + # Only override the compiler option if ARMv6. The ARMv6K extensions are
> + # always available in ARMv7
> +--
> +2.20.1
> +
> diff --git 
> a/meta/recipes-kernel/linux/linux-yocto/0001-arm-Makefile-Fix-systemtap.patch 
> b/meta/recipes-kernel/linux/linux-yocto/0001-arm-Makefile-Fix-systemtap.patch
> new file mode 100644
> index 00000000000..53bd53b276c
> --- /dev/null
> +++ 
> b/meta/recipes-kernel/linux/linux-yocto/0001-arm-Makefile-Fix-systemtap.patch
> @@ -0,0 +1,60 @@
> +From c2995494e311c113177db50ff140cebd94fd4011 Mon Sep 17 00:00:00 2001
> +From: Richard Purdie <richard.pur...@linuxfoundation.org>
> +Date: Sun, 10 Mar 2019 06:43:15 +0000
> +Subject: [PATCH] arm/Makefile: Fix systemtap
> +
> +Currently systemtap fails to operate correctly on armv7 systems such as 
> beaglebone and
> +soon, qemuarm.
> +
> +
> +root@qemuarm:/usr/src/kernel# env -uARCH -uKBUILD_EXTMOD -uCROSS_COMPILE 
> -uKBUILD_IMAGE -uKCONFIG_CONFIG -uINSTALL_PATH -uLD_LIBRARY_PATH 
> PATH=/usr/bin:/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
>  make -C /lib/modules/4.19.19-yocto-standard/build M=/tmp/staptcNU6M modules 
> CONFIG_DEBUG_INFO= CONFIG_STACK_VALIDATION= ARCH=arm stap_4321_src.i 
> --no-print-directory -j2 V=1
> +test -e include/generated/autoconf.h -a -e include/config/auto.conf || (     
>           \
> +echo >&2;                                                      \
> +echo >&2 "  ERROR: Kernel configuration is invalid.";          \
> +echo >&2 "         include/generated/autoconf.h or include/config/auto.conf 
> are missing.";\
> +echo >&2 "         Run 'make oldconfig && make prepare' on kernel src to fix 
> it.";     \
> +echo >&2 ;                                                     \
> +/bin/false)
> +mkdir -p /tmp/staptcNU6M/.tmp_versions ; rm -f 
> /tmp/staptcNU6M/.tmp_versions/*
> +make -f ./scripts/Makefile.build obj=/tmp/staptcNU6M
> +(cat /dev/null;   echo kernel//tmp/staptcNU6M/stap_4321.ko;) > 
> /tmp/staptcNU6M/modules.order
> +  gcc -Wp,-MD,/tmp/staptcNU6M/.stap_4321_src.o.d  -nostdinc -isystem 
> /usr/lib/gcc/arm-poky-linux-gnueabi/8.3.0/include -I./arch/arm/include 
> -I./arch/arm/include/generated  -I./include -I./arch/arm/include/uapi 
> -I./arch/arm/include/generated/uapi -I./include/uapi 
> -I./include/generated/uapi -include ./include/linux/kconfig.h -include 
> ./include/linux/compiler_types.h -D__KERNEL__ -mlittle-endian -Wall -Wundef 
> -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common 
> -fshort-wchar -Werror-implicit-function-declaration -Wno-format-security 
> -std=gnu89 -fno-PIE -DCC_HAVE_ASM_GOTO -fno-dwarf2-cfi-asm 
> -fno-omit-frame-pointer -mapcs -mno-sched-prolog -fno-ipa-sra 
> -mabi=aapcs-linux -mfpu=vfp -funwind-tables -marm -Wa,-mno-warn-deprecated 
> -D__LINUX_ARM_ARCH__=7 -march=armv5t -Wa,-march=armv7-a -msoft-float -Uarm 
> -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation 
> -Wno-format-overflow -Wno-int-in-bool-context -Os -Wno-maybe-uninitialized 
> --param=allow-st
 ore-data-races=0 -Wframe-larger-than=1024 -fstack-protector-strong 
-Wno-unused-but-set-variable -Wno-unused-const-variable -fno-omit-frame-pointer 
-fno-optimize-sibling-calls -fno-var-tracking-assignments -pg 
-Wdeclaration-after-statement -Wno-pointer-sign -Wno-stringop-truncation 
-fno-strict-overflow -fno-merge-all-constants -fmerge-constants 
-fno-stack-check -fconserve-stack -Werror=implicit-int 
-Werror=strict-prototypes -Werror=date-time -Werror=incompatible-pointer-types 
-Werror=designated-init -fmacro-prefix-map=./= -Wno-packed-not-aligned 
-Iinclude2/asm/mach-default -I/lib/modules/4.19.19-yocto-standard/build 
-include /tmp/staptcNU6M/stapconf_4321.h -D "STP_NO_VELREL_CHECK" 
-freorder-blocks -fasynchronous-unwind-tables -Wframe-larger-than=512 
-fno-ipa-icf -Wno-unused -Wno-tautological-compare -Werror 
-I/usr/share/systemtap/runtime  -DMODULE  -DKBUILD_BASENAME='"stap_4321_src"' 
-DKBUILD_MODNAME='"stap_4321"' -c -o /tmp/staptcNU6M/stap_4321_src.o 
/tmp/staptcNU6M/stap_432
 1_src.c
> +/tmp/ccaE9CMG.s: Assembler messages:
> +/tmp/ccaE9CMG.s:49: Error: selected processor does not support `dmb ish' in 
> ARM mode
> +/tmp/ccaE9CMG.s:52: Error: architectural extension `mp' is not allowed for 
> the current b
> +
> +(which was from running the stap command with -v -v -v -k and then being 
> able to run the command individually)
> +
> +Note that it says armv5t above.
> +
> +That comes from the code this patch changes
> +
> +root@qemuarm:/usr/src/kernel# gcc -march=armv7-a 
> /tmp/staptcNU6M/stap_4321_aux_0.c
> +cc1: error: -mfloat-abi=hard: selected processor lacks an FPU
> +
> +which makes me wonder if cc-option fails unless -mfpu-vfp is on the 
> commandline too.
> +
> +Since we have a gcc which accepts the armv7-a arch, just remove the cc-option
> +wrapper unconditionally here.
> +
> +Signed-off-by: Richard Purdie <richard.pur...@linuxfoundation.org>
> +---
> + arch/arm/Makefile | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/arch/arm/Makefile b/arch/arm/Makefile
> +index ecb99f7ac613..8513ba79ea04 100644
> +--- a/arch/arm/Makefile
> ++++ b/arch/arm/Makefile
> +@@ -64,7 +64,7 @@ KBUILD_CFLAGS        += $(call cc-option,-fno-ipa-sra)
> + # macro, but instead defines a whole series of macros which makes
> + # testing for a specific architecture or later rather impossible.
> + arch-$(CONFIG_CPU_32v7M)      =-D__LINUX_ARM_ARCH__=7 -march=armv7-m 
> -Wa,-march=armv7-m
> +-arch-$(CONFIG_CPU_32v7)               =-D__LINUX_ARM_ARCH__=7 $(call 
> cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
> ++arch-$(CONFIG_CPU_32v7)               =-D__LINUX_ARM_ARCH__=7 
> -march=armv7-a -Wa$(comma)-march=armv7-a
> + arch-$(CONFIG_CPU_32v6)               =-D__LINUX_ARM_ARCH__=6 $(call 
> cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
> + # Only override the compiler option if ARMv6. The ARMv6K extensions are
> + # always available in ARMv7
> +--
> +2.20.1
> +
> diff --git a/meta/recipes-kernel/linux/linux-yocto_4.19.bb 
> b/meta/recipes-kernel/linux/linux-yocto_4.19.bb
> index 3ef26a12baa..aca9f15404e 100644
> --- a/meta/recipes-kernel/linux/linux-yocto_4.19.bb
> +++ b/meta/recipes-kernel/linux/linux-yocto_4.19.bb
> @@ -22,7 +22,8 @@ SRCREV_machine ?= "11e0e616ed095bb8012e1b4a231254c9656a0193"
>  SRCREV_meta ?= "41fe45f7c5e69f6ec26c657fea16c459544042cf"
>
>  SRC_URI = 
> "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRANCH}; \
> -           
> git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-4.19;destsuffix=${KMETA}"
> +           
> git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-4.19;destsuffix=${KMETA}
>  \
> +           file://0001-arm-Makefile-Fix-systemtap-4.19.patch"
>
>  LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
>  LINUX_VERSION ?= "4.19.19"
> diff --git a/meta/recipes-kernel/linux/linux-yocto_5.0.bb 
> b/meta/recipes-kernel/linux/linux-yocto_5.0.bb
> index ae6e80c0108..198fed43411 100644
> --- a/meta/recipes-kernel/linux/linux-yocto_5.0.bb
> +++ b/meta/recipes-kernel/linux/linux-yocto_5.0.bb
> @@ -25,7 +25,8 @@ SRCREV_meta ?= "4faa4419884d2bbe65f637befd71a1e95629eaae"
>  # KMACHINE_qemuarm ?= "qemuarma15"
>
>  SRC_URI = 
> "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRANCH}; \
> -           
> git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-5.0;destsuffix=${KMETA}"
> +           
> git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-5.0;destsuffix=${KMETA}
>  \
> +           file://0001-arm-Makefile-Fix-systemtap.patch"
>
>  LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
>  LINUX_VERSION ?= "5.0"
> --
> 2.20.1
>


-- 
- Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end
- "Use the force Harry" - Gandalf, Star Trek II
-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to