Symbolize.SymbolizeWithMultipleMaps fails in absl_symbolize_test on s390x with LTO
- 主要言語
- C++
- スター
- 18.1k
- フォーク
- 3.2k
- 平均マージ
- 20時間 36分
- マージ済み PR(30日)
- 1
説明
**Describe the bug**
In the Fedora Linux [distribution package](https://src.fedoraproject.org/rpms/abseil-cpp/) for `abseil-cpp`, we find that `Symbolize.SymbolizeWithMultipleMaps` in `absl_symbolize_test` fails on the `s390x` architecture. When the test fails, a message like
```
/builddir/build/BUILD/abseil-cpp-20210324.2/absl/debugging/symbolize_test.cc:315: Failure
Expected equality of these values:
"kPadding1"
buf
Which is: ""
/builddir/build/BUILD/abseil-cpp-20210324.2/absl/debugging/symbolize_test.cc:349: Failure
Expected equality of these values:
expected[i]
Which is: "kPadding1"
buf
Which is: ""
/builddir/build/BUILD/abseil-cpp-20210324.2/absl/debugging/symbolize_test.cc:349: Failure
Expected equality of these values:
expected[i]
Which is: "kPadding1"
buf
Which is: ""
```
is printed.
When LTO is disabled in the build, the test does not fail.
**Steps to reproduce the bug**
The error can be observed in the RPM build infrastructure for Fedora Linux, but there is nothing particularly special about how we are building the library, and there are no significant downstream patches involved. I expect that this error can probably be reproduced on any `s390x` system when combined with LTO.
**What version of Abseil are you using?**
20111102.0
**What operating system and version are you using**
Fedora Linux Rawhide/37 (development version)
**What compiler and version are you using?**
```
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/12/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-12.0.1-20220308/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none --without-cuda-driver --enable-offload-defaulted --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.0.1 20220308 (Red Hat 12.0.1-0) (GCC)
```
**What build system are you using?**
```
cmake version 3.23.0-rc2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
```
**Additional context**
We are using https://github.com/abseil/abseil-cpp/archive/20111102.0/abseil-cpp-20111102.0.tar.gz with:
- CMake build system (using `ninja` backend)
- System copies of `gtest`/`gmock` 1.11.0
- A [small patch](https://src.fedoraproject.org/rpms/abseil-cpp/blob/c43daf75e50307a61f4a64f7d44b9e5ddff8a0d4/f/abseil-cpp-20211102.0-gtest-unreleased-features.patch) for #1063
- System compiler GCC 12.0.1
While I don’t have convenient interactive access to real `s390x` hardware, I can easily test patches or try experiments on real hardware by submitting “scratch” RPM builds.
I have attached a [complete failing build log](https://github.com/abseil/abseil-cpp/files/8255334/build.log) including compiler flags.
No other architectures (of `x86_64`, `i686`, `aarch64`, and `ppc64le`) are affected.
コントリビューションガイド
調査の方向性
失敗しているテストは absl/debugging/symbolize_test.cc の315行目付近と349行目付近にあり、'kPadding1' のシンボル化を確認しています。この問題は、LTOを有効にした場合のs390xアーキテクチャに特有です。まず、LTOを使用するs390x環境で失敗を再現し、absl/debugging/symbolize.cc のシンボル化実装を調べ、LTOがs390x上のシンボルの可視性にどのような影響を与えるかを理解してください。ビルドログでコンパイラフラグを確認し、ビッグエンディアンシステムにおけるGCCのLTOとの相互作用を検討してください。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- cmake, cpp, linux
- 領域
- backend, compilers, testing
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 35/100