The pkg-config (libpq.pc file) was added in PostgreSQL 9.3. This adds a
common setup M4 macro PHP_SETUP_PGSQL to find client PostgreSQL library
libpq on the system with pkg-config. If not found, check falls back to
pg_config to find the libpq and its headers in common locations as
before.
The PGSQL_CFLAGS and PGSQL_LIBS environment variables can override the
libpq installation paths:
./configure --with-pgsql --with-pdo-pgsql \
PGSQL_CFLAGS=-I/path/to/libpq \
PGSQL_LIBS="-L/path/to/libpq -lpq"
Passing manual, non-standard PostgreSQL installation path can be done
with configure option arguments:
./configure \
--with-pgsql=/any/path/to/postgresql \
--with-pdo-postgresql=/any/path/to/postgresql
If this DIR argument (PostgreSQL installation directory or path to the
pg_config) is passed, it takes precedence over the pkg-config, when
installed on the system.
This also removes the unused HAVE_LIBPQ symbol and passing the
PGSQL_INCLUDE and PGSQL_LIBDIR environment variable to configure in
favor of PGSQL_CFLAGS and PGSQL_LIBS.
Instead of the obsolete backticks the recommended $(...) is used when
invoking the pg_config.
Follow-up of GH-4235 (Use PKG_CHECK_MODULES to detect the pq library)
This enables the zlib library (https://zlib.net/) from a single place to
match the minimum required version across the php-src. This provides a
possible simpler version bump in the future. Macro's 2nd and 3rd
arguments can pass additional actions whether zlib library is found or
not for the possible future adjustments in the ext/standard where also
zlib might be required.
Support for pkg-config was introduced in 1.2.3.1.
The minimum zlib version has been bumped to 1.2.3.1
* Bump minimum zlib version to 1.2.11
This is aligned with CentOS 8, which has 1.2.11 in the default packages.
* [skip ci] Move zlib version change to UPGRADING
This matches the OpenSSL style version change notice already done in
this file.
This is necessary because `zend_get_attribute_object()` will use the persistent
string with the parameter name as the index for a newly created non-persistent
HashTable, which is not legal.
As parameter names are expected to be short-ish, reasonably common terms and
need to sit around in memory anyways, we might as well make them an interned
string, circumstepping the issue without needing to duplicate the parameter
name into a non-persistent string.
If OpenSSL is not found, the PKG_CHECK_MODULES errors out already. To
not introduce too big of a BC break with possible PECL extensions using
this macro, it is perhaps simpler to remove this non-working argument.
Redundant macro arguments are ignored by Autoconf anyway.
Instead of the PHP_SUBST_OLD, which also adds redundant variables to the
generated Makefile, these two can be done with AC_SUBST to be
substituted in the generated main/build-defs.h header and
scripts/php-config script.
- This checks for a type cookie_io_functions_t and defines the
HAVE_FOPENCOOKIE based on type check result and the fopencookie()
function presence.
- Fixed -Wunused... warnings in config.log on stricter compiler
configurations
- The run check for off64_t is wrapped into AC_CACHE_CHECK for having
the php_cv_type_cookie_off64_t cache variable available to customize
possible cross-compilation edge cases
- Comment about glibcs 2.1.2 removed because also some other earlier
versions provided this type already
This was once used on GNU Make from versions 3.59 to 3.63 (released in
1994) to not export all variables, otherwise a system limit may be
exceeded. This was the case for the obsolete UNIX System V (SysV) and is
on current systems not applicable anymore, with such target ignored.
0242577b33 partly fixed the detection of external constant lists referenced on Predefined Constants pages, but changing the file search regex is needed too in order to fully fix the underlying issue in case of cURL constants.
Some constants are extracted from Predefined Constants pages (e.g. https://github.com/php/doc-en/pull/3413), which should alsobe checked when verifying the manual.
This fixes the incompatible pointer type warnings when checking for
reentrant functions declaractions (-Wincompatible-pointer-types) in
config.log. These were not declared on some obsolete systems if
_REENTRANT was not defined. The check is for now left in the code base
but can be transitioned to newer code without checking for missing
declarations or using these otherwise in the future.
Closes GH-14315.
By default compilers may not treat attribute warnings as errors when
encountering an unknown __attribute__, unless some error option is
provided (-Werror=attributes, -Werror=unknown-attributes, -Werror...).
This fixes the check and wraps it into a separate M4 macro to be
extendable in the future if needed. It checks if conftest.err file was
generated by the compilation check when warnings appear. Also, PHP check
is a bit customized by using __alignof__ keyword, so it is left in there
for now to not break existing checks.
* Fix check for newer versions of ICU
The previous test would always trigger, even if the version of ICU
installed didn't require C++17. This was because it incorrectly used
the `test` program, which broke the build on systems without a C++17
compiler.
Tested with macOS 14 and i 7.2.
* Fix broken ICU version check for definition
Same as the previous fix for C++17.
---------
Co-authored-by: Peter Kokot <peterkokot@gmail.com>
This is addon to the GH-13727 bug fix. When configuring the build with:
./configure CFLAGS=-Werror=strict-prototypes
libtool check for parsing nm command would fail:
checking command to parse /usr/bin/nm -B output from cc object... failed
Upstream libtool has this specific check already fixed. Note that this
works only with Autoconf version 2.72 and later and is preparation for
future compilers that might have this error enabled by default.
This is a backport of commit 03f15534a1 to
PHP-8.2 due to GH-14002 and fixes the PHP_CXX_COMPILE_STDCXX check in
ext/intl whether the specified C++ standard is mandatory or optional.
The `dnl` (Discard to Next Line) M4 macro in this combination of `m4_if`
macros and arguments isn't properly replaced and a literal `dnl` string
is appended in the configure script. The `[]dnl` works ok.
This adds all root build directories in one call. PEAR directory is
created only when enabled and duplicated Zend directory creation is
removed, because it was intended for the zend_config.h when building
out-of-source or using the config.status manually before the
PHP_ADD_BUILD_DIR was introduced in the build system.
Bumps the minimum required OpenSSL version from 1.0.2 to 1.1.1.
OpenSSL 1.1.1 is an LTS release, but has reached[^1] EOL from upstream. However, Linux distro/OS vendors
continue to ship OpenSSL 1.1.1, so 1.1.1 was picked as the minimum. The current minimum 1.0.2 reached
EOL in 2018.
Bumping the minimum required OpenSSL version makes it possible for ext-openssl to remove a bunch of
conditional code, and assume that TLS 1.3 (shipped with OpenSSL 1.1.1) will be supported everywhere.
- Debian buster: 1.1.1[^2]
- Ubuntu 20.04: 1.1.1[^3]
- CentOS/RHEL 7: 1.0.2
- RHEL 8/Rocky 8/EL 8: 1.1.1
- Fedora 38: 3.0.9 (`openssl11` provides OpenSSL 1.1 as well)
RHEL/CentOS 7 reaches EOL mid 2024, so for PHP 8.4 scheduled towards the end of this year, we can safely
bump the minimum OpenSSL version.
[^1]: https://www.openssl.org/blog/blog/2023/03/28/1.1.1-EOL/index.html
[^2]: https://packages.debian.org/buster/libssl-dev
[^3]: https://packages.ubuntu.com/focal/libssl-dev
Shared objects of extensions during the *nix build are copied to the
`modules` directory. It is a practice established since the early days
of the PHP build system. Other build systems may have similar concept of
"library destination directory". On Windows, they are put into the root
build directory. Such directory simplifies collection of the shared
extensions during testing, or when running the cli executable at the end
of the build process.
This change ensures that the directory is consistently created in a
single location, for both the primary PHP build process and when
utilizing `phpize` within community extensions.
The AC_CONFIG_COMMANDS_PRE is executed at the end of the configuration
phase, before creating the config.status script, where also build
directories and global Makefile are created.
The pwd is executed using the recommended $(...) instead of the obsolete
backticks. Autoconf automatically locates the proper shell and
re-executes the configure script if such case is found that $(...) is
not supported (the initial /bin/sh on Solaris 10, for example).
Basically all constants are now declared via stubs. The rest of the constants are either deprecated (`SID` or `MHASH_*`) or out of interest (`__COMPILER_HALT_OFFSET__` and `PHP_CLI_PROCESS_TITLE`).
- Declared compatibility expectations of stub files are now enforced by a ZEND_STATIC_ASSERT call at the top of arginfo files
- Property registration for PHP 7 is fixed: function zend_declare_property_ex() is used again instead of zend_declare_typed_property(). This has been a regression since I added support for exposing doc comments.
- As a defensive measure, deep cloning is performed before newer features (type declarations, attributes etc.) are discarded before generating legacy arginfo files. Until now, some of the objects were forgotten to be taken care of. These omissions may have resulted in some weird bugs in theory (but probably they didn't have much impact in practice).
- PHP version related conditions inside *non-legacy arginfo files* used to possibly check for the 70000 version iD until now if compatibility with PHP 7.0 was declared in a stub. This was not 100% correct, since non-legacy arginfo files are only for PHP 8.0+. Now, I made sure that at least PHP version ID 80000 is used in the preprocessor conditions. The solution was a bit tricky though...
autoconf/libtool generating code to test features missed `void` for
C calls prototypes w/o arguments.
Note that specific changes related to libtool have to be upstreamed.
Co-authored-by: Peter Kokot <petk@php.net>
close GH-13732
In the same time, let's not verify implementation aliases since they may now legitimately differ from their aliased function/method counterparts (think about the ext/dom refactoring where e.g. many return type declarations have changed). Additionally, unnecessary `@no-verify` tags are cleaned up.
The PHP_CHECK_GCC_ARG has been already removed in PHP 8.0 and this also
removes the error emitting wrapper.
Patches for the solr and vld extensions have been sent upstream.
The AC_CHECK_FUNCS checks whether the linker sees the function in the
usual libraries, in this case libc. This is a simple trick to also check
existence of belonging headers, since the code uses HAVE_PRCTL and
HAVE_PROCCTL to include headers and call functions.
Git can track executable (0755) and non-executable (0644) file modes.
This is a minor file permissions sync across the php-src Git repository.
- build/config.guess (0755 as done upstream)
- build/config.sub (0755 as done upstream)
- ext/*/?*.stub.php (0644)
- ext/mbstring/libmbfl/mbfl/mk_eaw_tbl.awk (0755 due to shebang usage)
The `dnl` (delete to next line) directive in this combination of `m4_if`
macros and arguments isn't properly replaced and a literal dnl string is
appended in the configure script. The `[]dnl` works ok.
Instead of the project macro, the sockaddr_storage and sockaddr.sa_len
can be checked with the AC_CHECK_TYPES and AC_CHECK_MEMBERS by including
the sys/socket.h. Some systems (~1988) didn't include the sys/types.h in
the socket.h (obsolete on current systems).
These macros by default define the HAVE_STRUCT_SOCKADDR_STORAGE and
HAVE_STRUCT_SOCKADDR_SA_LEN.
The struct flock is defined in fcntl.h, if system has it. This removes
redundant PHP_STRUCT_FLOCK M4 macro in favor of the AC_CHECK_TYPES,
which by default defines symbol HAVE_STRUCT_FLOCK.
This macro is obsolete in favor of the PHP_ARG_WITH macro. It was once
used in combination with the AC_ARG_WITH macro to determine, whether the
extension has been configured as shared.
PHP_DEFINE was introduced with the PHP 5 build system
9d9d39a0de and then refactored via
350de12bc2.
This was once used to put defined constants into a single file to have
more fine-graned dependencies (atomic includes). Since no known PHP
extension is using this and it makes very little sense to use this, this
M4 macro can be removed in favor of the Autoconf native way using
AC_DEFINE and the usual included files php_config.h and config.h.
- Generated unused include directory removed
- Remove include dir from DEFS
- Remove also include dir from PDO checks
SunOS 4.1.4 from 1994 didn't have fclose declared in standard header
stdio.h. This doesn't need to be checked anymore, as fclose is part of
the C89+ standard and declaration is present on Solaris 10 (SunOS 5.10)
and later.
Global --tag=CC defined in configure.ac is not correct in all cases. For example
linking objects that were compiled from C++ sources needs to be done with C++
compiler, however for link mode libtool will prefer compiler indicated with
--tag.
Fixes GH-12349
The fastcgi code was refactored in
18cf4e0a8a and in_addr_t is no longer
used. The PHP_CHECK_IN_ADDR_T is also obsolete and not recommended way
to discover availability of the type. If needed in the future, the
AC_CHECK_TYPES can be used instead.
Now that we have class aliases (DOMNode -> DOM\Node), it has become important to add them to the class map so that it will be possible to generate class synopses for them.
Additionally, let's make sure that we don't try to process the stub files in the
manual target directory. This comes with a slight performance benefit.
* IR update
* Use folding to allow constant folding and common subexpression elimination
* Implement IR JIT for INIT_FCALL, INIT_FCALL_BY_NAME and INIT_NS_FCALL_BY_NAME
* Implement IR JIT for SEND_VAL and SEND_VAL_EX
* Implement IR JIT for SEND_REF
* Implement IR JIT for SEND_VAR* instructions (incompltere - few tests failures)
* Implement IR JIT for CHECK_FUNC_ARG
* Implement IR JIT for CHECK_UNDEF_ARGS
* Implement IR JIT for ROPE_INIT, ROPE_ADD and ROPE_END
* Implement IR JIT for FREE, FE_FREE, ECHO, STRLEN and COUNT
* Implement IR JIT for IN_ARRAY
* Implement IR JIT support for separate VM stack overflow check
* Implement IR JIT for INIT_DYNAMIC_CALL
* Implemenr IR JIT for INIT_METHOD_CALL
* Fix IR JIT for IN_ARRAY and COUNT
* Implement IR JIT for VERIFY_RETURN_TYPE
* Force C compiler to store preserved registers to allow JIT using them
* Implement IR JIT for DO_FCALL, DO_UCALL, DO_ICALL and DO_FCALL_BY_NAME
* Implement IR JIT for FETCH_CONSTANT
* Fix (reverse) guard conditions
* Implement IR JIT for RECV and RECV_INIT
* Implement IR JIT for RETURN
* Implement IR JIT for BIND_GLOBAL
* Fix guard for: int++ => double
* Fix exception handling
* Allow deoptimization of zval type only (if some register is spilled by the IR engine)
* Fix overflow handling
* Implement IR JIT for FE_RESET_R and FE_FETCH_R
* Eliminate extra temporary register
* Better registers usage
* Implement IR JIT for FETCH_DIM_* and ISSET_DIM
* Implement IR JIT for ASSIGN_DIM and ASSIGN_DIM_OP
* cleanup
* Generae IR that produces a better x86[_64] code
* Allow trace register allocation for live ranges terminated before entering a called function
* Remove following END->BEGIN nodes during IR construction
* Remove useless (duplicate) guard
* Avoid useless exception check
* Prevent duplicate store
* Eliminate repatable re-assignment of stack zval types
* Enable combination of some instructions with the following SEND_VAL for IR JIT
* Avoid generation of useless RLOADs
* Eliminatare refcouting in a sequence of FETCH_DIM_R
* Fix assertion
* Remove ZREG_ZVAL_ADDREF flag from an element of abstract stack
* Implement IR JIT for FETCH_OBJ_*
* Implement IR JIT for ASSIGN_OBJ
* Implement IR JIT for ASSIGN_OBJ_OP
* cleanup
* Implement IR JIT for (PRE/POST)_(INC/DEC)_OBJ
* ws
* cleanup
* Fix IR JIT for constructor call
* Fix opcache.jit=1201 IR JIT.
With opcache.jit=1201 we still have to generate code for follow and target basic blocks with single exiting VM instruction. We mat just omit the entry point.
* Fix IR construction for the case when both IF targets are the same
* Avoid PHP LEAVE code duplication in function IR JIT.
* Reload operands from memeory when overflow (this improves hot code)
* Implement IR JIT for SWITCH_LONG, SWITCH_STRING and MATCH
* Initialize result to IS_UNDEF
* Fix JIT integraion with observer (Zend/tests/gh10346.phpt failure)
* Fix incorrect compilation of FE_FETCH with predicted empty array
* Fix register allocation
* Use sign extension inxted of zero
* Fix trace register allocator
* cleanp
* Fix address sanitizer warning
* Calculate JIT trace prologue sixe on startup (to avoid magic constants).
* Add cgecks for merge arrays overflow (this should be refactored using lists)
* Cache TLS access to perform corresponding read once per basic block
* cleanup unused variable
* Fix IR JIT support for CLANG build (CALL VM without global register variables)
* Fix IR JIT for CALL VM with global register variables
* Allow %rpb ysage in JIT for CALL VM (we save and restore it in prologue/epilogue anyway)
* cleanup
* Allocate enough fixed stack to keep preserved registers
* We don't have to care about x29 and x30
* cleanup (JMPZ/NZ_EX work fine)
* Revert "cleanup (JMPZ/NZ_EX work fine)"
This reverts commit cf8dd74a040e225d290d8ac4f5e33df638e6f8b8.
* Don't allocate register for PHP variables that are loaded from memory and used once
* Eliminate redundand deoptimization stores
* cleanup
* cleanup
* cleanup
* Optimization for constant comparison
* Cleanup and elimination of dead deoptimization stores
* Eliminate duplicate constant loading
* Set proper initial SP offset info for GDB backtraces
This doesn't take into account the following SP/FP modifications
* Add spill stores
* Remove low limit on number of deoptimization constants
* Emit dead code only when it's really necessary for IR graph
* cleanup
* cleanup
* Prefer loading long constants from memory (instead of loading immediate value)
* Regiter disasm labels using macros (add missing helpers)
* Make IR franework to care about GUARD JMP reordering
* Avoid reloading
* Improve register allocation for IR tracing JIT
* Add comment
* Fix deoptimization on result type guard of FETCH_DIM_R and FETCH_OBJ_R
* If HYBRID VM can't provide some stack space for JIT code in "red zone" then JIT has to reserve stack space itself
* Dump IR for stubs only if disassembling of stubs is requested
* Revert "Dump IR for stubs only if disassembling of stubs is requested"
This reverts commit d8b56bec129bc23c2b16f1f3c6367190181b6fdb.
* Dump IR for stubs only if disassembling of stubs is requested (another approach)
* Improve overflow deoptimization for ADD(_,1) and SUB(_,1)
Now we deoptimize to the next instruction, load constant result, and remove op1 from SNAPSHOT
* Switch to IR Builder API
* Switch to new IR builder macros
* Fix jit_set_Z_TYPE_INFO() call. op3 is a simple constant (not a ir_ref).
* Generate better code
* Enable empty ENTRY block merging
* Improve code generated for array separation/creation before an update
(ASSIGN_DIM, ASSING_DIM_OP, etc)
* Fix incorrect deleteion of PHI source (op1 is used for control link)
* Load constant once
* cleanup
* Improve control-flow to avoid two IS_ARRAY checks for REFERENCEs
* Update comments
* cleanup
* Clenup comments
* Fix AAarch 64 build (disable stack adjustment auto-detection)
* Add filename and line number to closure names
* Reserve stack for parameter passing
* Increase size of CPU stack reserved for JIT-ed code
* Fix addess sanitizer warnings
* Clenup: introduce OPTIMIZE_FOR_SIZE macro (disabled by default)
* Port 08e7591206 to IR JIT
Fix (at lease part of the) #GH-10635: ARM64 function JIT causes impossible assertion
* cleanup
* Preload constant and use tests that may be compiled into better code
* Convert helpers to stubs
* Introduce a helper data structure (ir_refs) to collect references for the following use in (MERGE/PHI)_N
* Use ir_refs
* Improve code generated by zend_jit_zval_copy_deref()
* Use "cold" attribute to influence IR block scheduler and achieve better code layout
* Keep info collected by recursion analyzer
* Use HTTPS URL to allow fetching without a SSH key
* Update IR
* Update IR
* Add IR JIT support for Wondows (Win64 support is incomplete)
* Update IR
* Update IR
* Fix support for Windows ZTS build
* Fix stack alignment
* Cleanup ir_ctx.control usage
* Fixed support for irreducable (incomplete) and merged loops
* Revert "Fixed support for irreducable (incomplete) and merged loops"
This reverts commit 672b5b89f47e8b81745fb73c86e0bcb0937daf16.
* Generate better code for RECV_ENTRies
* Use simpler and more efficient checks
* Switch to new ENTRY node concept
* Limit register usage across the OSR ENTRY point
* Upate MEM type only if we write to memory
* Use LOOP_END without a reference edge
* Use new ir_init() prototype
* Delay LOAD for better LOAD fusion
* Fix RECV/RECV_INIT compilation with opcache.jit=1235
* iPtoperly compile fake closures (they mau be called as regular functions)
* Fix reabase
* Fix rebase and add --with-capstone support for IR JIT
* Replace zend_uchar -> uint8_t
* IR JIT support for delayed destructor for zend_assign_to_typed_ref/prop
* Handle zend_execute_internal in IR JIT
* Fix readonly+clone IR JIT issues
* Switch to ir_ctx.mflags
* Ckeanup "inputs_count" access
* Disable CSE for nodes bound to PHP local varibles
The stack slots for temporaty variables may be reused and in case of
spilling this may cause clobbering of the value.
(ext/standard/tests/strings/htmlentities20.phpt on x86 with tracing JIT)
* Fix deoptimization code when link traces
See ext/zlib/tests/bug75273.phpt failure
* Fix missing type store
This fixes ext/openssl/tests/openssl_error_string_basic_openssl3.phpt
* Fix tracing JIT for overflowing INC/DEC
Fixes tests/lang/operators/preinc_basiclong_64bit.phpt
* Remove ir_remove_unreachable_blocks() call. Now it's called by ir_build_cfg(), when necessary.
* IR JIT: Fixed inaccurate range inference usage for UNDEF/NULL/FALSE
* IR JIT: Fixed GH-11127 (JIT fault)
* Avoid allocation of unused exit point
* Don't record already stored PHP variables in SNAPSHOTs
* Delay variable load
* Disable CSE across ENTRY
* Fixed disabling CSE
* Fix deoptimization
* Fixed deoptimization
* Disable incorrect register allocation
* Fix JIT for INDENTICAL+JMPZ_EX
* Add comments
* Fixed missed type stores
* IR JIT: added support for CLDEMOTE
* Fixed incorrect constant usage
* Disable compilation of PHP functions with irreducible CGF
* Fixed liveness check
* Fixed code for constant conditional jump
* Add type store to avoid use-after-free
* Fixed liveness analyses
* Gnerate SNAPSHOT for virtual method calls
* More accurate search for staticaly inferred info about a trace SSA vaiable
* Fix incorrect result use type_info
* Fix JMPZ/NZ_EX support and missing type store
* Fixed trace type inference and missing type store
* Store type of unused CV to prevent possible following use after free
* Fixed deoptimizaton info
* Fixed stack layout
* Implemented support for veneers on AArch64
* Dsable CSE to avoid over-optimization
* Don't bind nodes for TMP PHP variables
* Re-enable CSE for temporary variables as we don't bind them anymore
* Switch to CPU stack spill slots
* Add codegen info dump
* Initialize CV variables through FP (this enables some folding optimizatios)
* Use zero-extension that can be eliminated
* Avoid generation of dead PHIs
* Increase preallocated spill stack size
* Enable IR based JIT by default
* Fixed build with -disable-opcache-jit
* Use explicit type conversion & force load values to registerts
* Fix IR build
* Checkout submodules in github actions
* Fixed Windows build
* Fixed Windows build
* Fixed reattach to IR JIT SHM
* Update IR
* Checkout submodules in nightly CI
* Fix MACOS ZTS in IR JIT
* Update ir
* Fixed incorrect register allocation
* Fixed incorect code generation
* Fixed tracing jit for BIND_INIT_STATIC_OR_JMP
* Update README
* Typos
* Revert JIT disabling for run-tests.php workers
* Fixed code review issues
* Update IR
* Update IR
* Update IR
* Allow exit_point duplication, when the deoptimization info differs because of spilling
* Use bound spill slots for CV (once again)
* Improve error handling
* Removed IR submodule
* Remove IR submodule from workflows
* Embed IR
IR commit: 8977307f4e96ee03847d7f2eb809b3080f9ed662
* Add .gitignore
* Fixed according to feedback
* Force C saving preserved registers only for HYBRID VM
* Update IR
IR commit: a2f8452b3d35a756cba38924f5c51a48a7207494
* cleanup
* Replace ZEND_ASSERT(0) by ZEND_UNREACHABLE()
* Update IR and remove unused IR files
IR commit: 399a38771393c202a741336643118991290b4b1b
* Fixed inconsistency between IR code-generation and register-allocation
* Update IR
IR commit: 86685504274b0c71d9985b3c926dccaca2cacf9b
* Update ir_PHI*() according to IR construction API changes
* Fixed 32-bit build
* Update IR
IR commit: d0686408e20cd8c8640e37ed52ab81403a2383cb
* Support for ir_TAILCALL() prototype changes
* Update IR
IR commit: d72ae866e09d17e879378767aceb91d51894818c
* Fixed incorrect extension (ZEXT->SEXT)
* Fix SSA dominance
* Update IR
IR commit: d60d92516dc5f89b93cdf1df7a54141e83226b07
* Fixed support ir_ctx.ret_type
As noted in glibc, the cookie_io_functions_t should be used instead of
internal _IO_cookie_io_functions_t.
The _IO_cookie_io_functions_t was once used as a convenience for not
having the cookie_io_functions_t available (glibc <=2.1.1) as noted in
67bb9d1ae2.
Check in the build system was also always setting the
COOKIE_IO_FUNCTIONS_T to cookie_io_functions_t due to a typo. There is
unused variable have_IO_cookie_io_functions_t vs.
have_cookie_io_functions_t.
- COOKIE_IO_FUNCTIONS_T removed
Closes GH-12236
We are experiencing an issue when building PHP with DTrace enabled with
SystemTap (see GH-11847).† The issue is caused by inappropriate use C
preprocessor detected by GNU Autoconf in our “configure” script. C
preprocessor configuration found by AC_PROG_CPP macro is portable only
to run on files with “.c” extension.‡ However, statically-defined tracing
is described by D programs with “.d” extension which causes the issue.
We experience this even on typical Linux distribution with GNU Compiler
Collection (GCC) unless we override the defaults detected by our
“configure” script.
Many major Linux distributions use SystemTap to provide “dtrace”
utility. It relies on both external C preprocessor and external C
compiler. C preprocessor can be customized via CPP environment variable.
Similarly, C compiler can be customized via CC environment variable. It
also allows customization of C compiler flags via CFLAGS environment
variable. We have recently aligned both CPP and CC environment variable
with C preprocessor and C compiler we use to build regular C source code
as provided by our “configure” script (see GH-11643).* We wanted to
allow cross-compilation on Linux for which this was the only blocker. C
compiler flags from CFLAGS_CLEAN macro have already been in place since
versions 5.4.20 and 5.5.4 from 2013-09-18.
We had modified all “dtrace” invocations in the same way to make it look
consistent. However, only the C compiler (CC environment variable) is
necessary to for cross-compilation. There have never been any reported
issue with the C preprocessor. We acknowledge it would be great to allow
C preprocessor customization as well. However, the implementation would
require a lot of effort to do correctly given the limitations of
AC_PROG_CPP macro from GNU Autoconf. This would be further complicated
by the fact that all DTrace implementations, not just SystemTap, allow C
preprocessor customization but Oracle DTrace, Open DTrace, and their
forks do it differently. Nevertheless, they all default to “cpp” utility
and they all have or had been working fine. Therefore, we believe simply
removing CPP stabilizes “dtrace” invocation on Linux systems with
SystemTap and aligns it with other system configurations on other
platforms, until someone comes with complete solution with custom “m4”
and “make” macros, while our build system on Linux with SystemTap
supports cross-compilation.
Fixes GH-11847
Closes GH-12083
† https://github.com/php/php-src/issues/11847
‡ https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.71/autoconf.html#index-AC_005fPROG_005fCPP-1
* https://github.com/php/php-src/issues/11643
With DTrace support enabled during ./configure, our custom Autoconf
macro PHP_INIT_DTRACE creates make rules to generate header and object
files using dtrace utility. SystemTap† implementation of dtrace relies
on other utilities to provide header preprocessing and final object file
compilation. These utilities are configured by common environment
variables with common defaults:‡
* preprocessor from CPP defaults to “cpp”
* compiler from CC defaults to “gcc”
* compiler arguments can be expanded with CFLAGS
This has been in SystemTap since version 1.5 released on 2011-05-23. We
have been setting CFLAGS for dtrace since 717b367 released in versions
5.4.20 and 5.5.4 on 2013-09-18. This change fixed build against
SystemTap. It fixes majority of cases since practically all free Linux
distributions use SystemTap for DTrace-like dynamic tracing and
practically all of them use GCC or compatible compiler suite. However,
this becomes an issue when cross-compiling using GCC because utility
names contain target triplets. Autoconf already handles
cross-compilation well —setting correct CC and CPP make macros
(variables).
Therefore, we simply set CC and CPP environment variables using
respective macros when executing dtrace. Although SystemTap dtrace does
not always use CC nor CPP, we set it every time. SystemTap documentation
does not talk about this at all¶, so it is safer to always set it. We
also follow how we set CFLAGS every time in the past.
Original (or ported) DTrace mainly used on Oracle Linux, Solaris and
macOS ignores these and does not support cross compilation.§
† Well-known dynamic tracing infrastructure for Linux compatible with
statically-defined tracing from DTrace.
‡ https://sourceware.org/git/?p=systemtap.git;a=blob;f=dtrace.in;h=73a6f22e2de072773c692e3fea05c4b8cf814e43;hb=ebb424eee5599fcc131901c0d82d0bfc0d2f57ab
¶ https://sourceware.org/systemtap/man/dtrace.1.html
§ https://docs.oracle.com/cd/E88353_01/html/E72487/dtrace-8.html
Closes GH-11643
The next generation of C compilers is going to enforce the C standard
more strictly:
https://wiki.gentoo.org/wiki/Modern_C_porting
One warning that will soon become an error is -Wstrict-prototypes.
This is relatively easy to catch in most code (it will fail to
compile), but inside of autoconf tests it can go unnoticed because
many feature-test compilations fail by design. For example,
$ export CFLAGS="$CFLAGS -Werror=strict-prototypes"
$ ./configure
...
checking if iconv supports errno... no
configure: error: iconv does not support errno
(this is on a system where iconv *does* support errno). If errno
support were optional, that test would have "silently" disabled
it. The underlying issue here, from config.log, is
conftest.c:211:5: error: function declaration isn't a prototype
[-Werror=strict-prototypes]
211 | int main() {
This commit goes through all of our autoconf tests, replacing main()
with main(void). Up to equivalent types and variable renamings, that's
one of the two valid signatures, and satisfies the compiler (gcc-12 in
this case).
Fixes GH-10751
(I agree that null should come last, but then it should rather throw with a proper message than emit an undefined key warning.)
Signed-off-by: Bob Weinand <bobwei9@hotmail.com>
Extended docblock types, according to psalm or phpstan conventions may include array shapes, callable signatures etc.. These are now ignored by ignoring any nested parenthesized expression (followed by optional :type) at the end of the type.
1. Implementation based on https://github.com/WojciechMula/base64simd
2. Only runtime path is added to reduce the complexity of SIMD variants.
3. Expand test case to cover SIMD implementation.
Signed-off-by: Frank Du <frank.du@intel.com>
The release VMs already enforced this, but PHP's configure script did
not.
re2c 0.13.5, which timelib's date/time parser requires is no longer
compatible with the current version of Zend/zend_language_scanner.l, as
it starts spinning in a loop.
As with other SIMD-accelerated functions in php-src, the new UTF-16
encoding and decoding routines can be compiled either with AVX2
acceleration "always on", "always off", or else with runtime detection
of AVX2 support.
With the new UTF-16 decoder/encoder, conversion of extremely short
strings (as in several bytes) has the same performance as before,
and conversion of medium-length (~100 character) strings is about 65%
faster, but conversion of long (~10,000 character) strings is around
6 times faster.
Many other mbstring functions will also be faster now when handling
UTF-16; for example, mb_strlen is almost 3 times faster on medium
strings, and almost 9 times faster on long strings. (Why does mb_strlen
benefit more from AVX2 acceleration than mb_convert_encoding? It's
because mb_strlen only needs to decode, but not re-encode, the input
string, and the UTF-16 decoder benefits much more from SIMD
acceleration than the UTF-16 encoder.)
As an example:
should be translated to:
ZVAL_LONG(&attribute_Attribute_class_test_arg0, ZEND_ATTRIBUTE_TARGET_FUNCTION | ZEND_ATTRIBUTE_TARGET_METHOD);
These are mandatory in C99, so it's a pointless waste of time to check
for them.
(Actually, the fixed-size integer types are not mandatory, but if they
are really not available on some theoretical system, PHP's fallbacks
won't work either, so nothing is gained from this check.)
Until https://github.com/php/php-src/pull/10098 default constructors were sometimes documented, sometimes omitted. The above PR made adding documentation for constructor of all non-abstract classes required. However, this is not desired when such a class inherits a constructor from its parent. The current PR fixes the behavior the following way:
- documents inherited constructors (along with destructors)
- makes it possible to generate/replace the methodsynopsis of implicit default constructors which don't have a stub counterpart
* PHP-8.2:
Replace another root XML element format to the "canonical" one
Remove the superfluous closing parentheses from class synopsis page includes
Always include the constructor on the class manual pages
Backport methodsynopsis role attributes changes from master
Currently, the role attribute is mainly used to differentiate OO and procedural "aliases" when they are documented on the same page (e.g. https://www.php.net/manual/en/datetime.diff.php). However, these function-method counterparts are not always aliases in fact according to the stubs (#9491). That's why sometimes the usage of the role attribute is ambiguous, thus syncing the manual with the stubs results in false positive diffs.
This change fixes the problem by a very obtrusive way: by changing the value of all role="oop" attributes to the actual class name, like role="DateTime", and by getting rid of all role="procedural" attributes as they became unnecessary. This way, class synopsis pages can clearly reference methods, and skip functions. Additionally, gen_stub.php will be able to generate the correct methodsynopsis role even though a single page describes multiple methods, like `DateTime/DateTimeImmutable/DateTimeInterface::diff()`.