php / php/php-src

Build fails on 32-bit Linux and FreeBSD with Clang

Đang mở
#14,467 4 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Bug Category: Build System Status: Verified
Ngôn ngữ chính
C
Star
40.4k
Fork
8.2k
Merge trung bình
2 ngày 15 giờ
Pull request đã merge (30 ngày)
103

Mô tả

Description

The following code:

./buildconf
./configure
make

Resulted in this output on FreeBSD 14 32-bit with Clang 16.0.6 (default compiler selected by the system):

ld: error: relocation R_386_32 cannot be used against local symbol; recompile with -fPIC
>>> defined in ext/opcache/.libs/zend_accelerator_debug.o
>>> referenced by zend_accelerator_debug.c:58 (ext/opcache/zend_accelerator_debug.c:58)
>>>               ext/opcache/.libs/zend_accelerator_debug.o:(zend_accel_error_va_args)

make: stopped in .../php-src

But I expected this output instead:

# builds successfullly

On Debian 32-bit with Clang this happens:

ext/standard/base64.o: unsupported non-PIC call to IFUNC `php_base64_encode_ex'
/usr/bin/ld: failed to set dynamic section sizes: bad value
/usr/bin/ld: /usr/bin/ld: ext/standard/base64.o: unsupported non-PIC call to IFUNC `ext/standard/base64.ophp_base64_encode_ex: unsupported non-PIC call to IFUNC `'php_base64_encode_ex

When using GCC it works ok. Issue is that there is a check to disable PIC mode for shared extensions on 32-bit Linux and FreeBSD: https://github.com/php/php-src/blob/bbbe56eecc6ff6b3971ba4f924d51c9aa11955c5/configure.ac#L242-L257

(Probably solution would be to skip the non-PIC mode for Clang on 32-bit)

PHP Version

PHP 8.2, 8.3 and 8.4-dev

Operating System

32-bit Linux and FreeBSD

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

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

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Tái hiện lỗi bằng ./buildconf, ./configure và make trên Linux 32-bit hoặc FreeBSD bằng Clang. Bắt đầu bằng cách kiểm tra configure.ac quanh các dòng 242-257 và output build bị ảnh hưởng của ext/opcache và ext/standard. Được coi là hoàn tất khi mã nguồn PHP build thành công bằng Clang trên các hệ thống 32-bit được báo cáo mà không có lỗi relocation hoặc non-PIC.

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

Đánh giá

Công nghệ
c
Lĩnh vực
build-system, operating-systems
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
Khá 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.