|
1 | | -name: Profiling ASAN Tests |
| 1 | +name: Profiling ASAN/UBSAN Tests |
2 | 2 |
|
3 | 3 | on: |
4 | 4 | pull_request: |
@@ -55,11 +55,11 @@ jobs: |
55 | 55 | switch-php ${{ matrix.php-build }} |
56 | 56 | cd profiling |
57 | 57 | export CC=clang-20 |
58 | | - export CFLAGS='-fsanitize=address -fno-omit-frame-pointer' |
| 58 | + export CFLAGS='-fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer' |
59 | 59 | export LDFLAGS='-fsanitize=address -shared-libasan' |
60 | 60 | export RUSTC_LINKER=lld-20 |
61 | 61 | triplet=$(uname -m)-unknown-linux-gnu |
62 | | - RUSTFLAGS='-Zsanitizer=address' cargo +${RUST_TOOLCHAIN} build -Zbuild-std=std,panic_abort --target $triplet --profile profiler-release |
| 62 | + RUSTFLAGS='-Zsanitizer=address -C force-frame-pointers=yes' cargo +${RUST_TOOLCHAIN} build -Zbuild-std=std,panic_abort --target $triplet --profile profiler-release |
63 | 63 | cp -v "$CARGO_TARGET_DIR/$triplet/profiler-release/libdatadog_php_profiling.so" "$(php-config --extension-dir)/datadog-profiling.so" |
64 | 64 |
|
65 | 65 | - name: Run phpt tests |
|
69 | 69 | cd profiling/tests |
70 | 70 | cp -v $(php-config --prefix)/lib/php/build/run-tests.php . |
71 | 71 | export DD_PROFILING_OUTPUT_PPROF=/tmp/pprof |
| 72 | + export ASAN_OPTIONS="${ASAN_OPTIONS:+$ASAN_OPTIONS:}abort_on_error=1:halt_on_error=1:detect_leaks=1:strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:detect_container_overflow=1:detect_odr_violation=2:symbolize=1:disable_coredump=0:unmap_shadow_on_exit=1" |
| 73 | + export LSAN_OPTIONS="${LSAN_OPTIONS:+$LSAN_OPTIONS:}exitcode=23:print_suppressions=0:report_objects=1" |
72 | 74 | php run-tests.php -j$(nproc) --show-diff --asan -d extension=datadog-profiling.so phpt |
| 75 | +
|
| 76 | + prof-ubsan: |
| 77 | + name: PHP 8.5 ${{ matrix.php-build }} UBSAN (${{ matrix.runner }}) |
| 78 | + runs-on: ${{ matrix.runner }} |
| 79 | + strategy: |
| 80 | + matrix: |
| 81 | + php-build: [nts, zts] |
| 82 | + runner: [arm-8core-linux, ubuntu-8-core-latest] |
| 83 | + env: |
| 84 | + CARGO_HOME: /rust/cargo |
| 85 | + RUSTUP_HOME: /rust/rustup |
| 86 | + CARGO_TARGET_DIR: /tmp/build-cargo |
| 87 | + UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1 |
| 88 | + container: |
| 89 | + image: datadog/dd-trace-ci:php-8.5_bookworm-8 |
| 90 | + options: --user root |
| 91 | + |
| 92 | + steps: |
| 93 | + - name: Checkout |
| 94 | + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 |
| 95 | + with: |
| 96 | + fetch-depth: 1 |
| 97 | + submodules: true |
| 98 | + |
| 99 | + - name: Cache Cargo dependencies |
| 100 | + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 |
| 101 | + with: |
| 102 | + path: | |
| 103 | + /rust/cargo/registry/index/ |
| 104 | + /rust/cargo/registry/cache/ |
| 105 | + /rust/cargo/registry/src/ |
| 106 | + /rust/cargo/git/db/ |
| 107 | + /rust/cargo/git/checkouts/ |
| 108 | + key: ${{ runner.os }}-${{ runner.arch }}-cargo-deps-c-ubsan-${{ hashFiles('**/Cargo.lock') }} |
| 109 | + |
| 110 | + - name: Cache Cargo target |
| 111 | + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 |
| 112 | + with: |
| 113 | + path: /tmp/build-cargo/ |
| 114 | + key: ${{ runner.os }}-${{ runner.arch }}-cargo-target-c-ubsan-8.5-${{ matrix.php-build }}-${{ github.sha }}-${{ hashFiles('.github/workflows/prof_asan.yml') }} |
| 115 | + |
| 116 | + - name: Build and install profiler |
| 117 | + run: | |
| 118 | + set -eux |
| 119 | + switch-php ${{ matrix.php-build }} |
| 120 | + cd profiling |
| 121 | + export CC=clang-20 |
| 122 | + export CXX=clang++-20 |
| 123 | + export CFLAGS='-fsanitize=undefined,local-bounds -fno-sanitize-recover=all -fno-omit-frame-pointer' |
| 124 | + export LDFLAGS='-fsanitize=undefined,local-bounds -fno-sanitize-recover=all' |
| 125 | + export RUSTC_LINKER=clang-20 |
| 126 | + export RUSTFLAGS='-C link-arg=-fsanitize=undefined,local-bounds -C link-arg=-fno-sanitize-recover=all' |
| 127 | + cargo build --profile profiler-release |
| 128 | + cp -v "$CARGO_TARGET_DIR/profiler-release/libdatadog_php_profiling.so" "$(php-config --extension-dir)/datadog-profiling.so" |
| 129 | +
|
| 130 | + - name: Run phpt tests |
| 131 | + run: | |
| 132 | + set -eux |
| 133 | + switch-php ${{ matrix.php-build }} |
| 134 | + cd profiling/tests |
| 135 | + cp -v $(php-config --prefix)/lib/php/build/run-tests.php . |
| 136 | + export DD_PROFILING_OUTPUT_PPROF=/tmp/pprof |
| 137 | + ubsan_runtime=$(clang-20 -print-file-name=libclang_rt.ubsan_standalone-$(uname -m).so) |
| 138 | + export LD_PRELOAD="$ubsan_runtime${LD_PRELOAD:+:$LD_PRELOAD}" |
| 139 | + php run-tests.php -j$(nproc) --show-diff -d extension=datadog-profiling.so phpt |
0 commit comments