From: Romain Naour Date: Fri, 22 May 2020 23:22:12 +0000 (+0200) Subject: package/qemu: remove csky fork X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=58af9a70cc0f195116dedb3fd0e2ca5b4fec9e70;p=buildroot.git package/qemu: remove csky fork We have a qemu fork for csky cpus [1] but since qemu version bump to 4.2.0 [2] and libssh2/libssh change the csky build is broken. The csky fork is based on Qemu 3.0.0 but unlike autotools packages any unknown option is handled as error. Since we don't want to support all options from previous qemu release and the github repository has been removed [3] and the only remaining archive is located on http://sources.buildroot.net, remove the qemu csky fork as suggested by [4]. [1] https://git.buildroot.net/buildroot/commit/?id=f816e5b276f1ef15840bec6667f1e8219717ab7d [2] https://git.buildroot.net/buildroot/commit/?id=0ea17054ce7dfc54efca5634133cef786445e7b1 [3] https://github.com/c-sky/qemu [4] http://lists.busybox.net/pipermail/buildroot/2020-May/281885.html Signed-off-by: Romain Naour Cc: Guo Ren Cc: Peter Korsgaard [Peter: move patches out of 4.2.0 subdir] Signed-off-by: Peter Korsgaard --- diff --git a/package/qemu/0001-user-exec-fix-usage-of-mcontext-structure-on-ARM-uCl.patch b/package/qemu/0001-user-exec-fix-usage-of-mcontext-structure-on-ARM-uCl.patch new file mode 100644 index 0000000000..157d28b112 --- /dev/null +++ b/package/qemu/0001-user-exec-fix-usage-of-mcontext-structure-on-ARM-uCl.patch @@ -0,0 +1,35 @@ +From d3f1e7e9ff9aae3f770b0bcb9aa3c2f787f76a1b Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Fri, 5 May 2017 09:07:15 +0200 +Subject: [PATCH] user-exec: fix usage of mcontext structure on ARM/uClibc + +user-exec.c has some conditional code to decide how to use the +mcontext structure. Unfortunately, since uClibc defines __GLIBC__, but +with old versions of __GLIBC__ and __GLIBC_MINOR__, an old code path +gets used, which doesn't apply to uClibc. + +Fix this by excluding __UCLIBC__, which ensures we fall back to the +general case of using uc_mcontext.arm_pc, which works fine with +uClibc. + +Signed-off-by: Thomas Petazzoni +--- + user-exec.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c +index 6db0758..2b3d116 100644 +--- a/accel/tcg/user-exec.c ++++ b/accel/tcg/user-exec.c +@@ -506,7 +506,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, + + #if defined(__NetBSD__) + pc = uc->uc_mcontext.__gregs[_REG_R15]; +-#elif defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)) ++#elif defined(__GLIBC__) && !defined(__UCLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)) + pc = uc->uc_mcontext.gregs[R15]; + #else + pc = uc->uc_mcontext.arm_pc; +-- +2.7.4 + diff --git a/package/qemu/0002-util-cacheinfo-fix-crash-when-compiling-with-uClibc.patch b/package/qemu/0002-util-cacheinfo-fix-crash-when-compiling-with-uClibc.patch new file mode 100644 index 0000000000..d1b9e35709 --- /dev/null +++ b/package/qemu/0002-util-cacheinfo-fix-crash-when-compiling-with-uClibc.patch @@ -0,0 +1,43 @@ +From d82b8540ecaf3cb09a033e4971d8645d3343211e Mon Sep 17 00:00:00 2001 +From: Carlos Santos +Date: Wed, 16 Oct 2019 22:27:30 -0300 +Subject: [PATCH] util/cacheinfo: fix crash when compiling with uClibc + +uClibc defines _SC_LEVEL1_ICACHE_LINESIZE and _SC_LEVEL1_DCACHE_LINESIZE +but the corresponding sysconf calls returns -1, which is a valid result, +meaning that the limit is indeterminate. + +Handle this situation using the fallback values instead of crashing due +to an assertion failure. + +Signed-off-by: Carlos Santos +--- + util/cacheinfo.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/util/cacheinfo.c b/util/cacheinfo.c +index ea6f3e99bf..d94dc6adc8 100644 +--- a/util/cacheinfo.c ++++ b/util/cacheinfo.c +@@ -93,10 +93,16 @@ static void sys_cache_info(int *isize, int *dsize) + static void sys_cache_info(int *isize, int *dsize) + { + # ifdef _SC_LEVEL1_ICACHE_LINESIZE +- *isize = sysconf(_SC_LEVEL1_ICACHE_LINESIZE); ++ int tmp_isize = (int) sysconf(_SC_LEVEL1_ICACHE_LINESIZE); ++ if (tmp_isize > 0) { ++ *isize = tmp_isize; ++ } + # endif + # ifdef _SC_LEVEL1_DCACHE_LINESIZE +- *dsize = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); ++ int tmp_dsize = (int) sysconf(_SC_LEVEL1_DCACHE_LINESIZE); ++ if (tmp_dsize > 0) { ++ *dsize = tmp_dsize; ++ } + # endif + } + #endif /* sys_cache_info */ +-- +2.18.1 + diff --git a/package/qemu/0003-target-arm-arm-semi-fix-SYS_OPEN-to-return-nonzero-f.patch b/package/qemu/0003-target-arm-arm-semi-fix-SYS_OPEN-to-return-nonzero-f.patch new file mode 100644 index 0000000000..46652d8298 --- /dev/null +++ b/package/qemu/0003-target-arm-arm-semi-fix-SYS_OPEN-to-return-nonzero-f.patch @@ -0,0 +1,78 @@ +From 318f83f387678a3c0a2a729b506613011c6830b2 Mon Sep 17 00:00:00 2001 +From: Masahiro Yamada +Date: Fri, 17 Jan 2020 14:09:30 +0000 +Subject: [PATCH] target/arm/arm-semi: fix SYS_OPEN to return nonzero + filehandle + +According to the specification "Semihosting for AArch32 and Aarch64", +the SYS_OPEN operation should return: + + - A nonzero handle if the call is successful + - -1 if the call is not successful + +So, it should never return 0. + +Prior to commit 35e9a0a8ce4b ("target/arm/arm-semi: Make semihosting +code hand out its own file descriptors"), the guest fd matched to the +host fd. It returned a nonzero handle on success since the fd 0 is +already used for stdin. + +Now that the guest fd is the index of guestfd_array, it starts from 0. + +I noticed this issue particularly because Trusted Firmware-A built with +PLAT=qemu is no longer working. Its io_semihosting driver only handles +a positive return value as a valid filehandle. + +Basically, there are two ways to fix this: + + - Use (guestfd - 1) as the index of guestfs_arrary. We need to insert + increment/decrement to convert the guestfd and the array index back + and forth. + + - Keep using guestfd as the index of guestfs_array. The first entry + of guestfs_array is left unused. + +I thought the latter is simpler. We end up with wasting a small piece +of memory for the unused first entry of guestfd_array, but this is +probably not a big deal. + +Fixes: 35e9a0a8ce4b ("target/arm/arm-semi: Make semihosting code hand out its own file descriptors") +Cc: qemu-stable@nongnu.org +Signed-off-by: Masahiro Yamada +Reviewed-by: Richard Henderson +Message-id: 20200109041228.10131-1-masahiroy@kernel.org +Signed-off-by: Peter Maydell + +(cherry picked from commit 21bf9b06cb6d07c6cc437dfd47b47b28c2bb79db) +Signed-off-by: Adrien Grassein +Signed-off-by: Romain Naour +--- + target/arm/arm-semi.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/target/arm/arm-semi.c b/target/arm/arm-semi.c +index 6f7b6d801b..4275dfc345 100644 +--- a/target/arm/arm-semi.c ++++ b/target/arm/arm-semi.c +@@ -144,7 +144,8 @@ static int alloc_guestfd(void) + guestfd_array = g_array_new(FALSE, TRUE, sizeof(GuestFD)); + } + +- for (i = 0; i < guestfd_array->len; i++) { ++ /* SYS_OPEN should return nonzero handle on success. Start guestfd from 1 */ ++ for (i = 1; i < guestfd_array->len; i++) { + GuestFD *gf = &g_array_index(guestfd_array, GuestFD, i); + + if (gf->type == GuestFDUnused) { +@@ -168,7 +169,7 @@ static GuestFD *do_get_guestfd(int guestfd) + return NULL; + } + +- if (guestfd < 0 || guestfd >= guestfd_array->len) { ++ if (guestfd <= 0 || guestfd >= guestfd_array->len) { + return NULL; + } + +-- +2.24.1 + diff --git a/package/qemu/4.2.0/0001-user-exec-fix-usage-of-mcontext-structure-on-ARM-uCl.patch b/package/qemu/4.2.0/0001-user-exec-fix-usage-of-mcontext-structure-on-ARM-uCl.patch deleted file mode 100644 index 157d28b112..0000000000 --- a/package/qemu/4.2.0/0001-user-exec-fix-usage-of-mcontext-structure-on-ARM-uCl.patch +++ /dev/null @@ -1,35 +0,0 @@ -From d3f1e7e9ff9aae3f770b0bcb9aa3c2f787f76a1b Mon Sep 17 00:00:00 2001 -From: Thomas Petazzoni -Date: Fri, 5 May 2017 09:07:15 +0200 -Subject: [PATCH] user-exec: fix usage of mcontext structure on ARM/uClibc - -user-exec.c has some conditional code to decide how to use the -mcontext structure. Unfortunately, since uClibc defines __GLIBC__, but -with old versions of __GLIBC__ and __GLIBC_MINOR__, an old code path -gets used, which doesn't apply to uClibc. - -Fix this by excluding __UCLIBC__, which ensures we fall back to the -general case of using uc_mcontext.arm_pc, which works fine with -uClibc. - -Signed-off-by: Thomas Petazzoni ---- - user-exec.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c -index 6db0758..2b3d116 100644 ---- a/accel/tcg/user-exec.c -+++ b/accel/tcg/user-exec.c -@@ -506,7 +506,7 @@ int cpu_signal_handler(int host_signum, void *pinfo, - - #if defined(__NetBSD__) - pc = uc->uc_mcontext.__gregs[_REG_R15]; --#elif defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)) -+#elif defined(__GLIBC__) && !defined(__UCLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)) - pc = uc->uc_mcontext.gregs[R15]; - #else - pc = uc->uc_mcontext.arm_pc; --- -2.7.4 - diff --git a/package/qemu/4.2.0/0002-util-cacheinfo-fix-crash-when-compiling-with-uClibc.patch b/package/qemu/4.2.0/0002-util-cacheinfo-fix-crash-when-compiling-with-uClibc.patch deleted file mode 100644 index d1b9e35709..0000000000 --- a/package/qemu/4.2.0/0002-util-cacheinfo-fix-crash-when-compiling-with-uClibc.patch +++ /dev/null @@ -1,43 +0,0 @@ -From d82b8540ecaf3cb09a033e4971d8645d3343211e Mon Sep 17 00:00:00 2001 -From: Carlos Santos -Date: Wed, 16 Oct 2019 22:27:30 -0300 -Subject: [PATCH] util/cacheinfo: fix crash when compiling with uClibc - -uClibc defines _SC_LEVEL1_ICACHE_LINESIZE and _SC_LEVEL1_DCACHE_LINESIZE -but the corresponding sysconf calls returns -1, which is a valid result, -meaning that the limit is indeterminate. - -Handle this situation using the fallback values instead of crashing due -to an assertion failure. - -Signed-off-by: Carlos Santos ---- - util/cacheinfo.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/util/cacheinfo.c b/util/cacheinfo.c -index ea6f3e99bf..d94dc6adc8 100644 ---- a/util/cacheinfo.c -+++ b/util/cacheinfo.c -@@ -93,10 +93,16 @@ static void sys_cache_info(int *isize, int *dsize) - static void sys_cache_info(int *isize, int *dsize) - { - # ifdef _SC_LEVEL1_ICACHE_LINESIZE -- *isize = sysconf(_SC_LEVEL1_ICACHE_LINESIZE); -+ int tmp_isize = (int) sysconf(_SC_LEVEL1_ICACHE_LINESIZE); -+ if (tmp_isize > 0) { -+ *isize = tmp_isize; -+ } - # endif - # ifdef _SC_LEVEL1_DCACHE_LINESIZE -- *dsize = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); -+ int tmp_dsize = (int) sysconf(_SC_LEVEL1_DCACHE_LINESIZE); -+ if (tmp_dsize > 0) { -+ *dsize = tmp_dsize; -+ } - # endif - } - #endif /* sys_cache_info */ --- -2.18.1 - diff --git a/package/qemu/4.2.0/0003-target-arm-arm-semi-fix-SYS_OPEN-to-return-nonzero-f.patch b/package/qemu/4.2.0/0003-target-arm-arm-semi-fix-SYS_OPEN-to-return-nonzero-f.patch deleted file mode 100644 index 46652d8298..0000000000 --- a/package/qemu/4.2.0/0003-target-arm-arm-semi-fix-SYS_OPEN-to-return-nonzero-f.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 318f83f387678a3c0a2a729b506613011c6830b2 Mon Sep 17 00:00:00 2001 -From: Masahiro Yamada -Date: Fri, 17 Jan 2020 14:09:30 +0000 -Subject: [PATCH] target/arm/arm-semi: fix SYS_OPEN to return nonzero - filehandle - -According to the specification "Semihosting for AArch32 and Aarch64", -the SYS_OPEN operation should return: - - - A nonzero handle if the call is successful - - -1 if the call is not successful - -So, it should never return 0. - -Prior to commit 35e9a0a8ce4b ("target/arm/arm-semi: Make semihosting -code hand out its own file descriptors"), the guest fd matched to the -host fd. It returned a nonzero handle on success since the fd 0 is -already used for stdin. - -Now that the guest fd is the index of guestfd_array, it starts from 0. - -I noticed this issue particularly because Trusted Firmware-A built with -PLAT=qemu is no longer working. Its io_semihosting driver only handles -a positive return value as a valid filehandle. - -Basically, there are two ways to fix this: - - - Use (guestfd - 1) as the index of guestfs_arrary. We need to insert - increment/decrement to convert the guestfd and the array index back - and forth. - - - Keep using guestfd as the index of guestfs_array. The first entry - of guestfs_array is left unused. - -I thought the latter is simpler. We end up with wasting a small piece -of memory for the unused first entry of guestfd_array, but this is -probably not a big deal. - -Fixes: 35e9a0a8ce4b ("target/arm/arm-semi: Make semihosting code hand out its own file descriptors") -Cc: qemu-stable@nongnu.org -Signed-off-by: Masahiro Yamada -Reviewed-by: Richard Henderson -Message-id: 20200109041228.10131-1-masahiroy@kernel.org -Signed-off-by: Peter Maydell - -(cherry picked from commit 21bf9b06cb6d07c6cc437dfd47b47b28c2bb79db) -Signed-off-by: Adrien Grassein -Signed-off-by: Romain Naour ---- - target/arm/arm-semi.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/target/arm/arm-semi.c b/target/arm/arm-semi.c -index 6f7b6d801b..4275dfc345 100644 ---- a/target/arm/arm-semi.c -+++ b/target/arm/arm-semi.c -@@ -144,7 +144,8 @@ static int alloc_guestfd(void) - guestfd_array = g_array_new(FALSE, TRUE, sizeof(GuestFD)); - } - -- for (i = 0; i < guestfd_array->len; i++) { -+ /* SYS_OPEN should return nonzero handle on success. Start guestfd from 1 */ -+ for (i = 1; i < guestfd_array->len; i++) { - GuestFD *gf = &g_array_index(guestfd_array, GuestFD, i); - - if (gf->type == GuestFDUnused) { -@@ -168,7 +169,7 @@ static GuestFD *do_get_guestfd(int guestfd) - return NULL; - } - -- if (guestfd < 0 || guestfd >= guestfd_array->len) { -+ if (guestfd <= 0 || guestfd >= guestfd_array->len) { - return NULL; - } - --- -2.24.1 - diff --git a/package/qemu/Config.in.host b/package/qemu/Config.in.host index 5ed160159a..7ccf768d15 100644 --- a/package/qemu/Config.in.host +++ b/package/qemu/Config.in.host @@ -3,7 +3,6 @@ config BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS default y if BR2_arm default y if BR2_armeb default y if BR2_aarch64 - default y if BR2_csky default y if BR2_i386 default y if BR2_m68k default y if BR2_microblazeel diff --git a/package/qemu/qemu.hash b/package/qemu/qemu.hash index dae11cb3fe..322b4fdf16 100644 --- a/package/qemu/qemu.hash +++ b/package/qemu/qemu.hash @@ -2,6 +2,3 @@ sha256 d3481d4108ce211a053ef15be69af1bdd9dde1510fda80d92be0f6c3e98768f0 qemu-4.2.0.tar.xz sha256 6f04ae8364d0079a192b14635f4b1da294ce18724c034c39a6a41d1b09df6100 COPYING sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING.LIB - -# Locally computed -sha256 61091767ffd16002e77f005155d096208094e69dee35e6d5ddcaa6c8a13b5e26 qemu-b517e1dc3125a57555d67a8deed9eac7b42288e2.tar.gz diff --git a/package/qemu/qemu.mk b/package/qemu/qemu.mk index 0bb29f9369..7fe64e3605 100644 --- a/package/qemu/qemu.mk +++ b/package/qemu/qemu.mk @@ -4,14 +4,9 @@ # ################################################################################ -ifeq ($(BR2_csky),y) -QEMU_VERSION = b517e1dc3125a57555d67a8deed9eac7b42288e2 -QEMU_SITE = $(call github,c-sky,qemu,$(QEMU_VERSION)) -else QEMU_VERSION = 4.2.0 QEMU_SOURCE = qemu-$(QEMU_VERSION).tar.xz QEMU_SITE = http://download.qemu.org -endif QEMU_LICENSE = GPL-2.0, LGPL-2.1, MIT, BSD-3-Clause, BSD-2-Clause, Others/BSD-1c QEMU_LICENSE_FILES = COPYING COPYING.LIB # NOTE: there is no top-level license file for non-(L)GPL licenses; @@ -238,13 +233,6 @@ endif ifeq ($(HOST_QEMU_ARCH),sh4aeb) HOST_QEMU_ARCH = sh4eb endif -ifeq ($(HOST_QEMU_ARCH),csky) -ifeq ($(BR2_ck610),y) -HOST_QEMU_ARCH = cskyv1 -else -HOST_QEMU_ARCH = cskyv2 -endif -endif HOST_QEMU_SYS_ARCH ?= $(HOST_QEMU_ARCH) HOST_QEMU_CFLAGS = $(HOST_CFLAGS)