Intelligente Lösungen
in neuer Dimension

Debian-Paket ohne Optimierung erzeugen

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