Bei der Arbeit an BPFTRACE ist es mir nach längerer Zeit gelungen,
eine Version 0.21.1 für Ubuntu-20.04 zu erzeugen. Leider erscheint
beim Start eine Fehlermeldung, die laut Google eventuell verschwindet,
wenn die Pakete ohne Optimierung erzeugt werden (“-O0” statt “-O2”).
Hier beschreibe ich, wie ich das mache.
Standard-Ablauf
Üblicherweise baue ich ein Debian-Paket mit diesen Kommandos:
1
2
3
4
5
6
7
8
9
TOP_FOLDER=my-build-folder
PACKAGE_NAME=libbpf
mkdir "${TOP_FOLDER}"
cd "${TOP_FOLDER}"
apt source "${PACKAGE_NAME}"
sudo apt build-dep "${PACKAGE_NAME}"
PKG_FOLDER="$(find . -mindepth 1 -maxdepth 1 -type d)"
cd "${PKG_FOLDER}"
dpkg-buildpackage
Man sieht, dass für die Bauerei eine gewisse Optimierung aktiv ist:
1
2
3
4
5
...
cc -I. -I../include -I../include/uapi -g -O2 -fdebug-prefix-map=/home... -c libbpf_probes.c -o sharedobjs/libbpf_probes.o
cc -I. -I../include -I../include/uapi -g -O2 -fdebug-prefix-map=/home... -c bpf_prog_linfo.c -o sharedobjs/bpf_prog_linfo.o
cc -I. -I../include -I../include/uapi -g -O2 -fdebug-prefix-map=/home... -c xsk.c -o sharedobjs/xsk.o
...
Entscheidend sind die Stellen mit “-O2”!
Bauen ohne Optimierung
Am einfachsten baut man ein Paket ohne Optimierung, indem man
statt bisher: dpkg-buildpackage
nun: DEB_BUILD_OPTIONS=noopt dpkg-buildpackage
verwendet, also:
1
2
3
4
5
6
7
8
9
TOP_FOLDER=my-build-folder
PACKAGE_NAME=libbpf
mkdir "${TOP_FOLDER}"
cd "${TOP_FOLDER}"
apt source "${PACKAGE_NAME}"
sudo apt build-dep "${PACKAGE_NAME}"
PKG_FOLDER="$(find . -mindepth 1 -maxdepth 1 -type d)"
cd "${PKG_FOLDER}"
DEB_BUILD_OPTIONS=noopt dpkg-buildpackage
Man sieht, dass für die Bauerei die Optimierung nun deaktiviert ist:
1
2
3
4
5
...
cc -I. -I../include -I../include/uapi -g -O0 -fdebug-prefix-map=/home... -c libbpf_probes.c -o sharedobjs/libbpf_probes.o
cc -I. -I../include -I../include/uapi -g -O0 -fdebug-prefix-map=/home... -c bpf_prog_linfo.c -o sharedobjs/bpf_prog_linfo.o
cc -I. -I../include -I../include/uapi -g -O0 -fdebug-prefix-map=/home... -c xsk.c -o sharedobjs/xsk.o
...
Entscheidend sind die Stellen mit “-O0”!
Fehlermeldung bei BPFTRACE
1
2
3
SUDO uli@ulicsl:~/git/dp-gitea/dptools$ sudo bpftrace bin/trace-open-close-rename.sh
bpftrace: /usr/include/llvm-12/llvm/IR/Instructions.h:940: static llvm::GetElementPtrInst* llvm::GetElementPtrInst::Create(llvm::Type*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, const llvm::Twine&, llvm::Instruction*): Assertion `PointeeType == cast<PointerType>(Ptr->getType()->getScalarType())->getElementType()' failed.
Abgebrochen
Leider tritt sie auch bei “-O0” auf. Die Deaktivierung der Optimierung hat
in diesem Fall also leider keinen Erfolg!
Links
Historie
2024-07-05: Erste Version