From 1c7d6584a7811b7785ae5c1e378f14b5ba0971cf Mon Sep 17 00:00:00 2001 From: takeshi_hoshina Date: Mon, 2 Nov 2020 11:07:33 +0900 Subject: basesystem-jj recipes --- ...r_to_globals-and-bb_errno-to-be-non-const.patch | 183 +++++++++++++++++++++ .../recipes-core/busybox/busybox_%.bbappend | 1 - .../recipes-core/busybox/busybox_1.31.%.bbappend | 9 + .../recipes-core/meta/meta-environment.bbappend | 9 +- .../meta-clang/recipes-core/musl/musl_%.bbappend | 11 ++ .../nativesdk-packagegroup-sdk-host.bbappend | 4 +- ...ackagegroup-core-standalone-sdk-target.bbappend | 7 +- .../packagegroup-cross-canadian.bbappend | 7 +- 8 files changed, 213 insertions(+), 18 deletions(-) create mode 100644 external/meta-clang/recipes-core/busybox/busybox/0001-Turn-ptr_to_globals-and-bb_errno-to-be-non-const.patch delete mode 100644 external/meta-clang/recipes-core/busybox/busybox_%.bbappend create mode 100644 external/meta-clang/recipes-core/busybox/busybox_1.31.%.bbappend (limited to 'external/meta-clang/recipes-core') diff --git a/external/meta-clang/recipes-core/busybox/busybox/0001-Turn-ptr_to_globals-and-bb_errno-to-be-non-const.patch b/external/meta-clang/recipes-core/busybox/busybox/0001-Turn-ptr_to_globals-and-bb_errno-to-be-non-const.patch new file mode 100644 index 00000000..c14950a5 --- /dev/null +++ b/external/meta-clang/recipes-core/busybox/busybox/0001-Turn-ptr_to_globals-and-bb_errno-to-be-non-const.patch @@ -0,0 +1,183 @@ +From d941b59087d34cb93053b638c066bf080122e7bb Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Wed, 16 Jan 2019 22:39:24 -0800 +Subject: [PATCH] Turn ptr_to_globals and bb_errno to be non const + +writing to a const variable is undefined behavior + +This is undefined as per (C99 6.7.3 paragraph 5) see [1] + +errno and ptr_to_globals is written to in code, this fails with +segfaults when compiled with clang + +unsigned FAST_FUNC bb_strtou(const char *arg, char **endp, int base) +{ + unsigned long v; + char *endptr; + + if (!endp) endp = &endptr; + *endp = (char*) arg; + + if (!isalnum(arg[0])) return ret_ERANGE(); + errno = 0; + v = strtoul(arg, endp, base); + if (v > UINT_MAX) return ret_ERANGE(); + return handle_errors(v, endp); + } + +without 'const' ( working code ) + +Dump of assembler code for function bb_strtou: + 0x0000555555568298 <+0>: push %rbx + 0x0000555555568299 <+1>: sub $0x10,%rsp + 0x000055555556829d <+5>: test %rsi,%rsi + 0x00005555555682a0 <+8>: lea 0x8(%rsp),%rbx + 0x00005555555682a5 <+13>: cmovne %rsi,%rbx + 0x00005555555682a9 <+17>: mov %rdi,(%rbx) + 0x00005555555682ac <+20>: mov (%rdi),%al + 0x00005555555682ae <+22>: lea -0x30(%rax),%ecx + 0x00005555555682b1 <+25>: cmp $0xa,%cl + 0x00005555555682b4 <+28>: jb 0x5555555682be + 0x00005555555682b6 <+30>: or $0x20,%al + 0x00005555555682b8 <+32>: add $0x9f,%al + 0x00005555555682ba <+34>: cmp $0x1a,%al + 0x00005555555682bc <+36>: jae 0x5555555682dc + 0x00005555555682be <+38>: mov 0x107da3(%rip),%rax # 0x555555670068 +=> 0x00005555555682c5 <+45>: movl $0x0,(%rax) + 0x00005555555682cb <+51>: mov %rbx,%rsi + 0x00005555555682ce <+54>: callq 0x555555564310 + 0x00005555555682d3 <+59>: mov %rax,%rcx + 0x00005555555682d6 <+62>: shr $0x20,%rcx + 0x00005555555682da <+66>: je 0x5555555682f0 + 0x00005555555682dc <+68>: mov 0x107d85(%rip),%rax # 0x555555670068 + 0x00005555555682e3 <+75>: movl $0x22,(%rax) + 0x00005555555682e9 <+81>: mov $0xffffffff,%eax + 0x00005555555682ee <+86>: jmp 0x5555555682fb + 0x00005555555682f0 <+88>: mov %rax,%rdi + 0x00005555555682f3 <+91>: mov %rbx,%rsi + 0x00005555555682f6 <+94>: callq 0x5555555681e8 + 0x00005555555682fb <+99>: add $0x10,%rsp + 0x00005555555682ff <+103>: pop %rbx + 0x0000555555568300 <+104>: retq + +here address of bb_errno is valid rax = 0x7ffff7cac6c0 + +with 'const' ( non-working code ) + +Dump of assembler code for function bb_strtou: + 0x00005555555682a4 <+0>: push %r14 + 0x00005555555682a6 <+2>: push %rbx + 0x00005555555682a7 <+3>: push %rax + 0x00005555555682a8 <+4>: test %rsi,%rsi + 0x00005555555682ab <+7>: mov %rsp,%rbx + 0x00005555555682ae <+10>: cmovne %rsi,%rbx + 0x00005555555682b2 <+14>: mov %rdi,(%rbx) + 0x00005555555682b5 <+17>: mov (%rdi),%al + 0x00005555555682b7 <+19>: lea -0x30(%rax),%ecx + 0x00005555555682ba <+22>: cmp $0xa,%cl + 0x00005555555682bd <+25>: jb 0x5555555682d6 + 0x00005555555682bf <+27>: or $0x20,%al + 0x00005555555682c1 <+29>: add $0x9f,%al + 0x00005555555682c3 <+31>: cmp $0x1a,%al + 0x00005555555682c5 <+33>: jb 0x5555555682d6 + 0x00005555555682c7 <+35>: mov 0x107d9a(%rip),%rax # 0x555555670068 + 0x00005555555682ce <+42>: movl $0x22,(%rax) + 0x00005555555682d4 <+48>: jmp 0x5555555682fc + 0x00005555555682d6 <+50>: mov 0x107d8b(%rip),%r14 # 0x555555670068 +=> 0x00005555555682dd <+57>: movl $0x0,(%r14) + 0x00005555555682e4 <+64>: mov %rbx,%rsi + 0x00005555555682e7 <+67>: callq 0x555555564300 + 0x00005555555682ec <+72>: mov %rax,%rcx + 0x00005555555682ef <+75>: shr $0x20,%rcx + 0x00005555555682f3 <+79>: je 0x555555568303 + 0x00005555555682f5 <+81>: movl $0x22,(%r14) + 0x00005555555682fc <+88>: mov $0xffffffff,%eax + 0x0000555555568301 <+93>: jmp 0x55555556830e + 0x0000555555568303 <+95>: mov %rax,%rdi + 0x0000555555568306 <+98>: mov %rbx,%rsi + 0x0000555555568309 <+101>: callq 0x5555555681f4 + 0x000055555556830e <+106>: add $0x8,%rsp + 0x0000555555568312 <+110>: pop %rbx + 0x0000555555568313 <+111>: pop %r14 + 0x0000555555568315 <+113>: retq + +r14 is 0x0 and writing to this ofcourse ends up in segfault + +[1] https://bugs.llvm.org/show_bug.cgi?id=39919 + +Signed-off-by: Khem Raj +--- + coreutils/test.c | 2 +- + include/libbb.h | 4 ++-- + libbb/lineedit.c | 2 +- + shell/ash.c | 5 ++--- + 4 files changed, 6 insertions(+), 7 deletions(-) + +diff --git a/coreutils/test.c b/coreutils/test.c +index 868ffbecb..d11fccf5b 100644 +--- a/coreutils/test.c ++++ b/coreutils/test.c +@@ -401,7 +401,7 @@ struct test_statics { + }; + + /* See test_ptr_hack.c */ +-extern struct test_statics *const test_ptr_to_statics; ++extern struct test_statics *test_ptr_to_statics; + + #define S (*test_ptr_to_statics) + #define args (S.args ) +diff --git a/include/libbb.h b/include/libbb.h +index 111d1b790..a52265e77 100644 +--- a/include/libbb.h ++++ b/include/libbb.h +@@ -341,7 +341,7 @@ struct BUG_off_t_size_is_misdetected { + #if defined(__GLIBC__) + /* glibc uses __errno_location() to get a ptr to errno */ + /* We can just memorize it once - no multithreading in busybox :) */ +-extern int *const bb_errno; ++extern int *bb_errno; + #undef errno + #define errno (*bb_errno) + #endif +@@ -2152,7 +2152,7 @@ struct globals; + /* '*const' ptr makes gcc optimize code much better. + * Magic prevents ptr_to_globals from going into rodata. + * If you want to assign a value, use SET_PTR_TO_GLOBALS(x) */ +-extern struct globals *const ptr_to_globals; ++extern struct globals *ptr_to_globals; + /* At least gcc 3.4.6 on mipsel system needs optimization barrier */ + #define barrier() __asm__ __volatile__("":::"memory") + #define SET_PTR_TO_GLOBALS(x) do { \ +diff --git a/libbb/lineedit.c b/libbb/lineedit.c +index fbabc6c12..026c42c4c 100644 +--- a/libbb/lineedit.c ++++ b/libbb/lineedit.c +@@ -181,7 +181,7 @@ struct lineedit_statics { + }; + + /* See lineedit_ptr_hack.c */ +-extern struct lineedit_statics *const lineedit_ptr_to_statics; ++extern struct lineedit_statics * lineedit_ptr_to_statics; + + #define S (*lineedit_ptr_to_statics) + #define state (S.state ) +diff --git a/shell/ash.c b/shell/ash.c +index c5588ea66..6f07f7d6d 100644 +--- a/shell/ash.c ++++ b/shell/ash.c +@@ -297,10 +297,9 @@ typedef long arith_t; + * set "-DBB_GLOBAL_CONST=''" in CONFIG_EXTRA_CFLAGS to disable + * this optimization. + */ +-#ifndef BB_GLOBAL_CONST +-# define BB_GLOBAL_CONST const +-#endif + ++#undef BB_GLOBAL_CONST ++#define BB_GLOBAL_CONST + + /* ============ Hash table sizes. Configurable. */ + +-- +2.23.0 + diff --git a/external/meta-clang/recipes-core/busybox/busybox_%.bbappend b/external/meta-clang/recipes-core/busybox/busybox_%.bbappend deleted file mode 100644 index d7b9ca1d..00000000 --- a/external/meta-clang/recipes-core/busybox/busybox_%.bbappend +++ /dev/null @@ -1 +0,0 @@ -ARM_INSTRUCTION_SET_toolchain-clang = "arm" diff --git a/external/meta-clang/recipes-core/busybox/busybox_1.31.%.bbappend b/external/meta-clang/recipes-core/busybox/busybox_1.31.%.bbappend new file mode 100644 index 00000000..f26df7e1 --- /dev/null +++ b/external/meta-clang/recipes-core/busybox/busybox_1.31.%.bbappend @@ -0,0 +1,9 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" +SRC_URI_append_toolchain-clang = "\ + file://0001-Turn-ptr_to_globals-and-bb_errno-to-be-non-const.patch \ +" + +# networking/tls_pstm_sqr_comba.c:514:4: error: inline assembly requires more registers than available +# SQRADD2(*tmpx++, *tmpy--); +# ^ +TOOLCHAIN_x86 = "gcc" diff --git a/external/meta-clang/recipes-core/meta/meta-environment.bbappend b/external/meta-clang/recipes-core/meta/meta-environment.bbappend index 734a9e65..725a431e 100644 --- a/external/meta-clang/recipes-core/meta/meta-environment.bbappend +++ b/external/meta-clang/recipes-core/meta/meta-environment.bbappend @@ -10,7 +10,10 @@ TARGET_CLANGCC_ARCH_remove_powerpc = "-mno-spe" create_sdk_files_append() { script=${SDK_OUTPUT}/${SDKPATH}/environment-setup-${REAL_MULTIMACH_TARGET_SYS} - echo 'export CLANGCC="${TARGET_PREFIX}clang ${TARGET_CLANGCC_ARCH} --sysroot=$SDKTARGETSYSROOT"' >> $script - echo 'export CLANGCXX="${TARGET_PREFIX}clang++ ${TARGET_CLANGCC_ARCH} --sysroot=$SDKTARGETSYSROOT"' >> $script - echo 'export CLANGCPP="${TARGET_PREFIX}clang -E ${TARGET_CLANGCC_ARCH} --sysroot=$SDKTARGETSYSROOT"' >> $script + if ${@bb.utils.contains('CLANGSDK', '1', 'true', 'false', d)}; then + echo 'export CLANGCC="${TARGET_PREFIX}clang ${TARGET_CLANGCC_ARCH} --sysroot=$SDKTARGETSYSROOT"' >> $script + echo 'export CLANGCXX="${TARGET_PREFIX}clang++ ${TARGET_CLANGCC_ARCH} --sysroot=$SDKTARGETSYSROOT"' >> $script + echo 'export CLANGCPP="${TARGET_PREFIX}clang -E ${TARGET_CLANGCC_ARCH} --sysroot=$SDKTARGETSYSROOT"' >> $script + echo 'export CLANG_TIDY_EXE="${TARGET_PREFIX}clang-tidy ${TARGET_CLANGCC_ARCH} --sysroot=$SDKTARGETSYSROOT"' >> $script + fi } diff --git a/external/meta-clang/recipes-core/musl/musl_%.bbappend b/external/meta-clang/recipes-core/musl/musl_%.bbappend index c8b9878e..a6a1bf54 100644 --- a/external/meta-clang/recipes-core/musl/musl_%.bbappend +++ b/external/meta-clang/recipes-core/musl/musl_%.bbappend @@ -1 +1,12 @@ DEPENDS_append_toolchain-clang = " clang-cross-${TARGET_ARCH}" +TOOLCHAIN_x86-x32 = "gcc" +TOOLCHAIN_riscv64 = "gcc" +TOOLCHAIN_powerpc64 = "gcc" + +inherit lto + +# workaround until https://bugs.llvm.org/show_bug.cgi?id=44384 +# is fixed +do_configure_prepend_toolchain-clang () { + sed -i -e '/frounding-math/d' ${S}/configure +} diff --git a/external/meta-clang/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend b/external/meta-clang/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend index a8e81aa5..0c8ae6c3 100644 --- a/external/meta-clang/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend +++ b/external/meta-clang/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend @@ -1,3 +1 @@ -NATIVESDKCLANG ?= "nativesdk-clang" - -RDEPENDS_${PN} += "${NATIVESDKCLANG}" +RDEPENDS_${PN} += "${@bb.utils.contains('CLANGSDK', '1', 'nativesdk-clang', '', d)}" diff --git a/external/meta-clang/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bbappend b/external/meta-clang/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bbappend index dd0f83c6..59f0959b 100644 --- a/external/meta-clang/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bbappend +++ b/external/meta-clang/recipes-core/packagegroups/packagegroup-core-standalone-sdk-target.bbappend @@ -1,6 +1 @@ -RRECOMMENDS_${PN} += "\ - libcxx-dev \ - libcxx-staticdev \ - compiler-rt-dev \ - compiler-rt-staticdev \ -" +RRECOMMENDS_${PN} += "${@bb.utils.contains('CLANGSDK', '1', 'libcxx-dev libcxx-staticdev compiler-rt-dev compiler-rt-staticdev', '', d)}" diff --git a/external/meta-clang/recipes-core/packagegroups/packagegroup-cross-canadian.bbappend b/external/meta-clang/recipes-core/packagegroups/packagegroup-cross-canadian.bbappend index 2618d20d..4bbd4ab8 100644 --- a/external/meta-clang/recipes-core/packagegroups/packagegroup-cross-canadian.bbappend +++ b/external/meta-clang/recipes-core/packagegroups/packagegroup-cross-canadian.bbappend @@ -1,5 +1,2 @@ -CLANGCROSSCANADIAN ?= "clang-cross-canadian-${TRANSLATED_TARGET_ARCH}" -CLANGCROSSCANADIAN_riscv64 = "" -RDEPENDS_${PN} += "\ - ${@all_multilib_tune_values(d, 'CLANGCROSSCANADIAN')} \ -" +CLANGCROSSCANADIAN = "${@bb.utils.contains('CLANGSDK', '1', 'clang-cross-canadian-${TRANSLATED_TARGET_ARCH}', '', d)}" +RDEPENDS_${PN} += "${@all_multilib_tune_values(d, 'CLANGCROSSCANADIAN')}" -- cgit 1.2.3-korg