X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=scripts%2Flttng-modules%2Fparam-build.sh;h=1535b3e5485ba9d4b68d8f6bcece1217e1b3c1f6;hb=ae365617b4663de79c0ee208fa20ebe5c6cf9dca;hp=77ab74e7ea8aadd50fc7cbcb15ebefff840a36e5;hpb=53300bf0457063d653203922cc23809059eeef40;p=lttng-ci.git diff --git a/scripts/lttng-modules/param-build.sh b/scripts/lttng-modules/param-build.sh index 77ab74e..1535b3e 100644 --- a/scripts/lttng-modules/param-build.sh +++ b/scripts/lttng-modules/param-build.sh @@ -143,7 +143,13 @@ select_compiler() { # Enter linux source dir cd "$LINUX_SRCOBJ_DIR" - kversion=$(make -s kernelversion) + # Get the kernel version using the host toolchain, some cross-compiled arch may be broken + kversion=$(unset ARCH; unset CROSS_COMPILE; make -s kernelversion) + + if [ "${cross_arch}" = "riscv64" ] && verlt "${kversion}" "5.12"; then + echo "RISC-V support was upstreamed in kernel v4.19 but kprobes support was only added in v5.12. Don't try to build it." + exit 0 + fi if { verlt "$kversion" "4.4"; }; then # Force gcc-4.8 for kernels before 4.4 @@ -288,11 +294,14 @@ build_linux_kernel() { # Generate kernel configuration case "$ktag" in Ubuntu*) - if [ "${cross_arch}" = "powerpc" ]; then - if vergte "${kversion}" "4.10"; then - echo "Ubuntu removed big endian powerpc configuration from kernel >= 4.10. Don't try to build it." - exit 0 - fi + if [ "${cross_arch}" = "powerpc" ] && vergte "${kversion}" "4.10"; then + echo "Ubuntu removed big endian powerpc configuration from kernel >= 4.10. Don't try to build it." + exit 0 + fi + + if [ "${cross_arch}" = "riscv64" ] && verlt "${kversion}" "6.2"; then + echo "Ubuntu added RISC-V config to their 'regular' kernels in v6.2. Don't try to build it." + exit 0 fi fakeroot debian/rules clean KW_DEFCONFIG_DIR=. @@ -448,52 +457,19 @@ build_linux_kernel() { patch_linux_kernel dfbd199a7cfe3e3cd8531e1353cdbd7175bfbc5e fi - if { vergte "${kversion}" "3.18"; } && { verlt "${kversion}" "4.16"; } ; then - # Compatibility with binutils >= ~ 2.31 + # Compatibility with binutils >= ~ 2.31 + if { vergte "${kversion}" "3.19"; } && { verlt "${kversion}" "4.16"; } ; then patch_linux_kernel b21ebf2fb4cde1618915a97cc773e287ff49173e fi - - # The above patch only partially applies linux 3.17, and has been, so a - # rebased version is used instead. - if { vergte "${kversion}" "3.17"; } && { verlt "${kversion}" "3.18"; } ; then - cat <<'EOF' | patch -p1 -diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c -index 48598105..0652c5b6 100644 ---- a/arch/x86/kernel/machine_kexec_64.c -+++ b/arch/x86/kernel/machine_kexec_64.c -@@ -516,6 +516,7 @@ int arch_kexec_apply_relocations_add(const Elf64_Ehdr *ehdr, - goto overflow; - break; - case R_X86_64_PC32: -+ case R_X86_64_PLT32: - value -= (u64)address; - *(u32 *)location = value; - break; -diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c -index e69f9882..7c6bc9fe 100644 ---- a/arch/x86/kernel/module.c -+++ b/arch/x86/kernel/module.c -@@ -180,6 +180,7 @@ int apply_relocate_add(Elf64_Shdr *sechdrs, - goto overflow; - break; - case R_X86_64_PC32: -+ case R_X86_64_PLT32: - val -= (u64)loc; - *(u32 *)loc = val; - #if 0 -diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c -index bbb1d225..8deeacbc 100644 ---- a/arch/x86/tools/relocs.c -+++ b/arch/x86/tools/relocs.c -@@ -763,6 +763,7 @@ static int do_reloc64(struct section *sec, Elf_Rel *rel, ElfW(Sym) *sym, - switch (r_type) { - case R_X86_64_NONE: - case R_X86_64_PC32: -+ case R_X86_64_PLT32: - /* - * NONE can be ignored and PC relative relocations don't - * need to be adjusted. -EOF + if { vergte "${kversion}" "3.17"; } && { verlt "${kversion}" "3.18.69"; } ; then + patch_linux_kernel edb9d2d5e647e7a8521b0d35f8452deb02dfd138 + fi + if { vergte "${kversion}" "3.17"; } && { verlt "${kversion}" "3.18.100"; } ; then + patch_linux_kernel 3be6583f0b6f1bf1ee650ebf473d9dee36836527 + patch_linux_kernel 12d839211d080f6a9c370398c41a260365d34c62 + fi + if { vergte "${kversion}" "3.16"; } && { verlt "${kversion}" "3.16.82"; } ; then + patch_linux_kernel ad10e6d464796f2a481de4039a43b9cfca034e1c fi if ( { vergte "${kversion}" "3.14"; } && { verlt "${kversion}" "4.4"; } ) || @@ -803,6 +779,12 @@ extract_distro_headers() { fi fi + # On riscv with 5.14 the vsdo objects are required + if [ "${karch}" = "riscv" ] && \ + ( { vergte "${kversion}" "5.14"; } && { verlt "${kversion}" "5.15"; } ); then + cp -a --parents arch/riscv/kernel/vdso/*.o "${LINUX_HDROBJ_DIR}/" + fi + # Newer kernels need objtool to build modules when CONFIG_STACK_VALIDATION=y if [ -f tools/objtool/objtool ]; then cp -a --parents tools/objtool/objtool "${LINUX_HDROBJ_DIR}/" @@ -992,6 +974,13 @@ if [ "x${cross_arch}" != "x" ]; then ubuntu_config="ppc64el-config.flavour.generic" ;; + "riscv64") + karch="riscv" + cross_compile="riscv64-linux-gnu-" + vanilla_config="defconfig" + ubuntu_config="riscv64-config.flavour.generic" + ;; + *) echo "Unsupported cross arch $cross_arch" exit 1 @@ -1042,6 +1031,12 @@ elif [ "x${arch}" != "x" ]; then ubuntu_config="ppc64el-config.flavour.generic" ;; + "riscv64") + karch="riscv" + vanilla_config="allmodconfig" + ubuntu_config="riscv64-config.flavour.generic" + ;; + *) echo "Unsupported arch $arch" exit 1