€•ù_Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ/translations/zh_CN/bpf/s390”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/zh_TW/bpf/s390”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/it_IT/bpf/s390”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ja_JP/bpf/s390”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ko_KR/bpf/s390”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/pt_BR/bpf/s390”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/sp_SP/bpf/s390”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒTesting BPF on s390”h]”hŒTesting BPF on s390”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ6/var/lib/git/docbuild/linux/Documentation/bpf/s390.rst”h´Kubh¶)”}”(hhh]”(h»)”}”(hŒ1. Introduction”h]”hŒ1. Introduction”…””}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)”}”(hŒÓIBM Z are mainframe computers, which are descendants of IBM System/360 from year 1964. They are supported by the Linux kernel under the name "s390". This document describes how to test BPF in an s390 QEMU guest.”h]”hŒ×IBM Z are mainframe computers, which are descendants of IBM System/360 from year 1964. They are supported by the Linux kernel under the name “s390â€. This document describes how to test BPF in an s390 QEMU guest.”…””}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ1. introduction”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒ2. One-time setup”h]”hŒ2. One-time setup”…””}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhôh²hh³hÊh´K ubhÝ)”}”(hŒ:The following is required to build and run the test suite:”h]”hŒ:The following is required to build and run the test suite:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khhôh²hubhŒ block_quote”“”)”}”(hŒ„* s390 GCC * s390 development headers and libraries * Clang with BPF support * QEMU with s390 support * Disk image with s390 rootfs ”h]”hŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒs390 GCC”h]”hÝ)”}”(hj"h]”hŒs390 GCC”…””}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)”}”(hŒ&s390 development headers and libraries”h]”hÝ)”}”(hj9h]”hŒ&s390 development headers and libraries”…””}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)”}”(hŒClang with BPF support”h]”hÝ)”}”(hjPh]”hŒClang with BPF support”…””}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)”}”(hŒQEMU with s390 support”h]”hÝ)”}”(hjgh]”hŒQEMU with s390 support”…””}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)”}”(hŒDisk image with s390 rootfs ”h]”hÝ)”}”(hŒDisk image with s390 rootfs”h]”hŒDisk image with s390 rootfs”…””}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jh³hÊh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÊh´Khhôh²hubhÝ)”}”(hŒšDebian supports installing compiler and libraries for s390 out of the box. Users of other distros may use debootstrap in order to set up a Debian chroot::”h]”hŒ™Debian supports installing compiler and libraries for s390 out of the box. Users of other distros may use debootstrap in order to set up a Debian chroot:”…””}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khhôh²hubhŒ literal_block”“”)”}”(hXsudo debootstrap \ --variant=minbase \ --include=sudo \ testing \ ./s390-toolchain sudo mount --rbind /dev ./s390-toolchain/dev sudo mount --rbind /proc ./s390-toolchain/proc sudo mount --rbind /sys ./s390-toolchain/sys sudo chroot ./s390-toolchain”h]”hXsudo debootstrap \ --variant=minbase \ --include=sudo \ testing \ ./s390-toolchain sudo mount --rbind /dev ./s390-toolchain/dev sudo mount --rbind /proc ./s390-toolchain/proc sudo mount --rbind /sys ./s390-toolchain/sys sudo chroot ./s390-toolchain”…””}”hj²sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j°h³hÊh´Khhôh²hubhÝ)”}”(hŒEOnce on Debian, the build prerequisites can be installed as follows::”h]”hŒDOnce on Debian, the build prerequisites can be installed as follows:”…””}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K$hhôh²hubj±)”}”(hXesudo dpkg --add-architecture s390x sudo apt-get update sudo apt-get install \ bc \ bison \ cmake \ debootstrap \ dwarves \ flex \ g++ \ gcc \ g++-s390x-linux-gnu \ gcc-s390x-linux-gnu \ gdb-multiarch \ git \ make \ python3 \ qemu-system-misc \ qemu-utils \ rsync \ libcap-dev:s390x \ libelf-dev:s390x \ libncurses-dev”h]”hXesudo dpkg --add-architecture s390x sudo apt-get update sudo apt-get install \ bc \ bison \ cmake \ debootstrap \ dwarves \ flex \ g++ \ gcc \ g++-s390x-linux-gnu \ gcc-s390x-linux-gnu \ gdb-multiarch \ git \ make \ python3 \ qemu-system-misc \ qemu-utils \ rsync \ libcap-dev:s390x \ libelf-dev:s390x \ libncurses-dev”…””}”hjÐsbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´K&hhôh²hubhÝ)”}”(hŒ8Latest Clang targeting BPF can be installed as follows::”h]”hŒ7Latest Clang targeting BPF can be installed as follows:”…””}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K>hhôh²hubj±)”}”(hXPgit clone https://github.com/llvm/llvm-project.git ln -s ../../clang llvm-project/llvm/tools/ mkdir llvm-project-build cd llvm-project-build cmake \ -DLLVM_TARGETS_TO_BUILD=BPF \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/opt/clang-bpf \ ../llvm-project/llvm make sudo make install export PATH=/opt/clang-bpf/bin:$PATH”h]”hXPgit clone https://github.com/llvm/llvm-project.git ln -s ../../clang llvm-project/llvm/tools/ mkdir llvm-project-build cd llvm-project-build cmake \ -DLLVM_TARGETS_TO_BUILD=BPF \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/opt/clang-bpf \ ../llvm-project/llvm make sudo make install export PATH=/opt/clang-bpf/bin:$PATH”…””}”hjìsbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´K@hhôh²hubhÝ)”}”(hŒGThe disk image can be prepared using a loopback mount and debootstrap::”h]”hŒFThe disk image can be prepared using a loopback mount and debootstrap:”…””}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KMhhôh²hubj±)”}”(hX»qemu-img create -f raw ./s390.img 1G sudo losetup -f ./s390.img sudo mkfs.ext4 /dev/loopX mkdir ./s390.rootfs sudo mount /dev/loopX ./s390.rootfs sudo debootstrap \ --foreign \ --arch=s390x \ --variant=minbase \ --include=" \ iproute2, \ iputils-ping, \ isc-dhcp-client, \ kmod, \ libcap2, \ libelf1, \ netcat, \ procps" \ testing \ ./s390.rootfs sudo umount ./s390.rootfs sudo losetup -d /dev/loopX”h]”hX»qemu-img create -f raw ./s390.img 1G sudo losetup -f ./s390.img sudo mkfs.ext4 /dev/loopX mkdir ./s390.rootfs sudo mount /dev/loopX ./s390.rootfs sudo debootstrap \ --foreign \ --arch=s390x \ --variant=minbase \ --include=" \ iproute2, \ iputils-ping, \ isc-dhcp-client, \ kmod, \ libcap2, \ libelf1, \ netcat, \ procps" \ testing \ ./s390.rootfs sudo umount ./s390.rootfs sudo losetup -d /dev/loopX”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´KOhhôh²hubeh}”(h]”Œone-time-setup”ah ]”h"]”Œ2. one-time setup”ah$]”h&]”uh1hµhh·h²hh³hÊh´K ubh¶)”}”(hhh]”(h»)”}”(hŒ3. Compilation”h]”hŒ3. Compilation”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KgubhÝ)”}”(hŒkIn addition to the usual Kconfig options required to run the BPF test suite, it is also helpful to select::”h]”hŒjIn addition to the usual Kconfig options required to run the BPF test suite, it is also helpful to select:”…””}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kihjh²hubj±)”}”(hŒICONFIG_NET_9P=y CONFIG_9P_FS=y CONFIG_NET_9P_VIRTIO=y CONFIG_VIRTIO_PCI=y”h]”hŒICONFIG_NET_9P=y CONFIG_9P_FS=y CONFIG_NET_9P_VIRTIO=y CONFIG_VIRTIO_PCI=y”…””}”hj=sbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´Klhjh²hubhÝ)”}”(hŒRas that would enable a very easy way to share files with the s390 virtual machine.”h]”hŒRas that would enable a very easy way to share files with the s390 virtual machine.”…””}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kqhjh²hubhÝ)”}”(hŒ‹Compiling kernel, modules and testsuite, as well as preparing gdb scripts to simplify debugging, can be done using the following commands::”h]”hŒŠCompiling kernel, modules and testsuite, as well as preparing gdb scripts to simplify debugging, can be done using the following commands:”…””}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kthjh²hubj±)”}”(hX+make ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- menuconfig make ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- bzImage modules scripts_gdb make ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- \ -C tools/testing/selftests \ TARGETS=bpf \ INSTALL_PATH=$PWD/tools/testing/selftests/kselftest_install \ install”h]”hX+make ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- menuconfig make ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- bzImage modules scripts_gdb make ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- \ -C tools/testing/selftests \ TARGETS=bpf \ INSTALL_PATH=$PWD/tools/testing/selftests/kselftest_install \ install”…””}”hjgsbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´Kwhjh²hubeh}”(h]”Œ compilation”ah ]”h"]”Œ3. compilation”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kgubh¶)”}”(hhh]”(h»)”}”(hŒ4. Running the test suite”h]”hŒ4. Running the test suite”…””}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj}h²hh³hÊh´K€ubhÝ)”}”(hŒ/The virtual machine can be started as follows::”h]”hŒ.The virtual machine can be started as follows:”…””}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K‚hj}h²hubj±)”}”(hX·qemu-system-s390x \ -cpu max,zpci=on \ -smp 2 \ -m 4G \ -kernel linux/arch/s390/boot/compressed/vmlinux \ -drive file=./s390.img,if=virtio,format=raw \ -nographic \ -append 'root=/dev/vda rw console=ttyS1' \ -virtfs local,path=./linux,security_model=none,mount_tag=linux \ -object rng-random,filename=/dev/urandom,id=rng0 \ -device virtio-rng-ccw,rng=rng0 \ -netdev user,id=net0 \ -device virtio-net-ccw,netdev=net0”h]”hX·qemu-system-s390x \ -cpu max,zpci=on \ -smp 2 \ -m 4G \ -kernel linux/arch/s390/boot/compressed/vmlinux \ -drive file=./s390.img,if=virtio,format=raw \ -nographic \ -append 'root=/dev/vda rw console=ttyS1' \ -virtfs local,path=./linux,security_model=none,mount_tag=linux \ -object rng-random,filename=/dev/urandom,id=rng0 \ -device virtio-rng-ccw,rng=rng0 \ -netdev user,id=net0 \ -device virtio-net-ccw,netdev=net0”…””}”hjœsbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´K„hj}h²hubhÝ)”}”(hŒÌWhen using this on a real IBM Z, ``-enable-kvm`` may be added for better performance. When starting the virtual machine for the first time, disk image setup must be finalized using the following command::”h]”(hŒ!When using this on a real IBM Z, ”…””}”(hjªh²hh³Nh´NubhŒliteral”“”)”}”(hŒ``-enable-kvm``”h]”hŒ -enable-kvm”…””}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j²hjªubhŒ› may be added for better performance. When starting the virtual machine for the first time, disk image setup must be finalized using the following command:”…””}”(hjªh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K’hj}h²hubj±)”}”(hŒ'/debootstrap/debootstrap --second-stage”h]”hŒ'/debootstrap/debootstrap --second-stage”…””}”hjÌsbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´K–hj}h²hubhÝ)”}”(hŒkDirectory with the code built on the host as well as ``/proc`` and ``/sys`` need to be mounted as follows::”h]”(hŒ5Directory with the code built on the host as well as ”…””}”(hjÚh²hh³Nh´Nubj³)”}”(hŒ ``/proc``”h]”hŒ/proc”…””}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j²hjÚubhŒ and ”…””}”(hjÚh²hh³Nh´Nubj³)”}”(hŒ``/sys``”h]”hŒ/sys”…””}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j²hjÚubhŒ need to be mounted as follows:”…””}”(hjÚh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K˜hj}h²hubj±)”}”(hŒYmkdir -p /linux mount -t 9p linux /linux mount -t proc proc /proc mount -t sysfs sys /sys”h]”hŒYmkdir -p /linux mount -t 9p linux /linux mount -t proc proc /proc mount -t sysfs sys /sys”…””}”hj sbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´K›hj}h²hubhÝ)”}”(hŒDAfter that, the test suite can be run using the following commands::”h]”hŒCAfter that, the test suite can be run using the following commands:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K hj}h²hubj±)”}”(hŒFcd /linux/tools/testing/selftests/kselftest_install ./run_kselftest.sh”h]”hŒFcd /linux/tools/testing/selftests/kselftest_install ./run_kselftest.sh”…””}”hj(sbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´K¢hj}h²hubhÝ)”}”(hŒ.As usual, tests can be also run individually::”h]”hŒ-As usual, tests can be also run individually:”…””}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K¥hj}h²hubj±)”}”(hŒ5cd /linux/tools/testing/selftests/bpf ./test_verifier”h]”hŒ5cd /linux/tools/testing/selftests/bpf ./test_verifier”…””}”hjDsbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´K§hj}h²hubeh}”(h]”Œrunning-the-test-suite”ah ]”h"]”Œ4. running the test suite”ah$]”h&]”uh1hµhh·h²hh³hÊh´K€ubh¶)”}”(hhh]”(h»)”}”(hŒ 5. Debugging”h]”hŒ 5. Debugging”…””}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjZh²hh³hÊh´K«ubhÝ)”}”(hŒjIt is possible to debug the s390 kernel using QEMU GDB stub, which is activated by passing ``-s`` to QEMU.”h]”(hŒ[It is possible to debug the s390 kernel using QEMU GDB stub, which is activated by passing ”…””}”(hjkh²hh³Nh´Nubj³)”}”(hŒ``-s``”h]”hŒ-s”…””}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j²hjkubhŒ to QEMU.”…””}”(hjkh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K­hjZh²hubhÝ)”}”(hŒ‚It is preferable to turn KASLR off, so that gdb would know where to find the kernel image in memory, by building the kernel with::”h]”hŒIt is preferable to turn KASLR off, so that gdb would know where to find the kernel image in memory, by building the kernel with:”…””}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K°hjZh²hubj±)”}”(hŒRANDOMIZE_BASE=n”h]”hŒRANDOMIZE_BASE=n”…””}”hj™sbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´K³hjZh²hubhÝ)”}”(hŒ6GDB can then be attached using the following command::”h]”hŒ5GDB can then be attached using the following command:”…””}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KµhjZh²hubj±)”}”(hŒ:gdb-multiarch -ex 'target remote localhost:1234' ./vmlinux”h]”hŒ:gdb-multiarch -ex 'target remote localhost:1234' ./vmlinux”…””}”hjµsbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´K·hjZh²hubeh}”(h]”Œ debugging”ah ]”h"]”Œ 5. debugging”ah$]”h&]”uh1hµhh·h²hh³hÊh´K«ubh¶)”}”(hhh]”(h»)”}”(hŒ 6. Network”h]”hŒ 6. Network”…””}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjËh²hh³hÊh´KºubhÝ)”}”(hŒ†In case one needs to use the network in the virtual machine in order to e.g. install additional packages, it can be configured using::”h]”hŒ…In case one needs to use the network in the virtual machine in order to e.g. install additional packages, it can be configured using:”…””}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K¼hjËh²hubj±)”}”(hŒ dhclient eth0”h]”hŒ dhclient eth0”…””}”hjêsbah}”(h]”h ]”h"]”h$]”h&]”jÀjÁuh1j°h³hÊh´K¿hjËh²hubeh}”(h]”Œnetwork”ah ]”h"]”Œ 6. network”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kºubh¶)”}”(hhh]”(h»)”}”(hŒ7. Links”h]”hŒ7. Links”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KÂubhÝ)”}”(hŒzThis document is a compilation of techniques, whose more comprehensive descriptions can be found by following these links:”h]”hŒzThis document is a compilation of techniques, whose more comprehensive descriptions can be found by following these links:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÄhjh²hubj)”}”(hhh]”(j)”}”(hŒB`Debootstrap `_”h]”hÝ)”}”(hj$h]”(hŒ reference”“”)”}”(hj$h]”hŒ Debootstrap”…””}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Debootstrap”Œrefuri”Œ1https://wiki.debian.org/EmDebian/CrossDebootstrap”uh1j)hj&ubhŒtarget”“”)”}”(hŒ4 ”h]”h}”(h]”Œ debootstrap”ah ]”h"]”Œ debootstrap”ah$]”h&]”Œrefuri”j;uh1j<Œ referenced”Khj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÇhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒ6`Multiarch `_”h]”hÝ)”}”(hjZh]”(j*)”}”(hjZh]”hŒ Multiarch”…””}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Multiarch”j:Œ'https://wiki.debian.org/Multiarch/HOWTO”uh1j)hj\ubj=)”}”(hŒ* ”h]”h}”(h]”Œ multiarch”ah ]”h"]”Œ multiarch”ah$]”h&]”Œrefuri”jnuh1j<jKKhj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÈhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒ3`Building LLVM `_”h]”hÝ)”}”(hjŠh]”(j*)”}”(hjŠh]”hŒ Building LLVM”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Building LLVM”j:Œ https://llvm.org/docs/CMake.html”uh1j)hjŒubj=)”}”(hŒ# ”h]”h}”(h]”Œ building-llvm”ah ]”h"]”Œ building llvm”ah$]”h&]”Œrefuri”jžuh1j<jKKhjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÉhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒq`Cross-compiling the kernel `_”h]”hÝ)”}”(hjºh]”(j*)”}”(hjºh]”hŒCross-compiling the kernel”…””}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒCross-compiling the kernel”j:ŒQhttps://wiki.gentoo.org/wiki/Embedded_Handbook/General/Cross-compiling_the_kernel”uh1j)hj¼ubj=)”}”(hŒT ”h]”h}”(h]”Œcross-compiling-the-kernel”ah ]”h"]”Œcross-compiling the kernel”ah$]”h&]”Œrefuri”jÎuh1j<jKKhj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÊhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒQ`QEMU s390x Guest Support `_”h]”hÝ)”}”(hjêh]”(j*)”}”(hjêh]”hŒQEMU s390x Guest Support”…””}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒQEMU s390x Guest Support”j:Œ3https://wiki.qemu.org/Documentation/Platforms/S390X”uh1j)hjìubj=)”}”(hŒ6 ”h]”h}”(h]”Œqemu-s390x-guest-support”ah ]”h"]”Œqemu s390x guest support”ah$]”h&]”Œrefuri”jþuh1j<jKKhjìubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KËhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒR`Plan 9 folder sharing over Virtio `_”h]”hÝ)”}”(hjh]”(j*)”}”(hjh]”hŒ!Plan 9 folder sharing over Virtio”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ!Plan 9 folder sharing over Virtio”j:Œ+https://wiki.qemu.org/Documentation/9psetup”uh1j)hjubj=)”}”(hŒ. ”h]”h}”(h]”Œ!plan-9-folder-sharing-over-virtio”ah ]”h"]”Œ!plan 9 folder sharing over virtio”ah$]”h&]”Œrefuri”j.uh1j<jKKhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÌhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒR`Using GDB with QEMU `_”h]”hÝ)”}”(hjJh]”(j*)”}”(hjJh]”hŒUsing GDB with QEMU”…””}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒUsing GDB with QEMU”j:Œ9https://wiki.osdev.org/Kernel_Debugging#Use_GDB_with_QEMU”uh1j)hjLubj=)”}”(hŒ< ”h]”h}”(h]”Œusing-gdb-with-qemu”ah ]”h"]”Œusing gdb with qemu”ah$]”h&]”Œrefuri”j^uh1j<jKKhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÍhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jšŒ-”uh1jh³hÊh´KÇhjh²hubeh}”(h]”Œlinks”ah ]”h"]”Œ7. links”ah$]”h&]”uh1hµhh·h²hh³hÊh´KÂubeh}”(h]”Œtesting-bpf-on-s390”ah ]”h"]”Œtesting bpf on s390”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j²Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jŒj‰hñhîjjjzjwjWjTjÈjÅjýjúj„jjGjDjxjuj¨j¥jØjÕjjj8j5jhjeuŒ nametypes”}”(jŒ‰hñ‰j‰jz‰jW‰jȉjý‰j„‰jGˆjxˆj¨ˆj؈jˆj8ˆjhˆuh}”(j‰h·hîhËjhôjwjjTj}jÅjZjújËjjjDj>jujoj¥jŸjÕjÏjjÿj5j/jej_uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.