abseil / abseil/abseil-cpp

Symbolize.SymbolizeWithMultipleMaps fails in absl_symbolize_test on s390x with LTO

Đang mở
#1,133 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
bug priority: p3
Ngôn ngữ chính
C++
Star
18.1k
Fork
3.2k
Merge trung bình
20 giờ 36 phút
Pull request đã merge (30 ngày)
1

Mô tả

**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.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

The failing test is in absl/debugging/symbolize_test.cc around lines 315 and 349, checking symbolization of 'kPadding1'. The issue is specific to s390x architecture with LTO enabled. Start by reproducing the failure in a s390x environment with LTO, examine the symbolize implementation in absl/debugging/symbolize.cc, and understand how LTO affects symbol visibility on s390x. Look at the build log for compiler flags and consider interactions with GCC's LTO on big-endian systems.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
cmake, cpp, linux
Lĩnh vực
backend, compilers, testing
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.