jjb: lttng-modules: Add riscv64 to crossbuilds
[lttng-ci.git] / scripts / lttng-modules / param-build.sh
index 77ab74e7ea8aadd50fc7cbcb15ebefff840a36e5..1535b3e5485ba9d4b68d8f6bcece1217e1b3c1f6 100644 (file)
@@ -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
This page took 0.024678 seconds and 4 git commands to generate.