[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Debian patch for PHP on ARM



Thanks peter for the details review. I've asked upstream to merge hunk #2 (invalid code to error change) in any case.

At the moment they aren't interested in the rest of the patch since it fixes a problem on an old hardware.I wouldn't ask them to reconsider without a good reason. If even Debian doesn't use this hardware, I don't see the point of trying to push this. In any case, the removal of the patch will be documented for future reference if needed.

Waiting for Martin's feedback before doing the change in Debian.

Kaplan


On Fri, Oct 4, 2013 at 8:12 PM, peter green <plugwash@p10link.net> wrote:

    I think the patch does make sense, but only for doing floating point
    arithmetic in PHP on very old hardware.

Lets take a look, there are three hunks in the patch.

The first hunk is clearly altering a block of logic that determines floating point format details of the system that the code is being built for. The third hunk is responding to new defintions from the first hunk. The second hunk is an improvement in error reporting (replacing invalid code with a proper #error)

The first step in determining what is going on is to go through the defines that are looked at by the code (both the old code and the new code) and determine their meanings (a lot of information taken from https://wiki.debian.org/ArmEabiPort ).

__arm__ is defined by both armel and armhf
__thumb__ is defined when building for thunb (in debian armhf does this by default armel doesn't but command line switches can be used to turn thumb on or off in both cases)
__VFP_FP__ is defined by default on both armel and armhf. However from stuff I have read on the wiki it appears that it is not defined when building for armel with a maverick FPU. Afaict building for armel with a maverick FPU requires a patched compiler.
__MAVERICK__ is not defined by default on either debian armel or debian armhf but it is apparently defined when building armel packages for a maverick FPU. From a floating point POV it seems to mean much the same as __VFP_FP__, that is that "natrually" ordered floating point numbers are in use.
__ARMEL__ is apparently defined on all little endian arm systems including old abi ones which use the mixed endian floats

Tracing through the hunks with this information we see that the version of the hunk in the patch makes a number of changes to the logic.

1: Without the patch __MAVERICK__ is ignored which would result in php incorrectly assuming that the system was using mixed endian floats when building armel packges for the maverick FPU.
2: Without the patch the system basically assumes that big endian arm systems don't exist. With the patch it appears to handle them in a sane way.
3: It treats __thumb__ as equivilent to __arm__, I presume this is a response to some older compiler that didn't define __arm__ when building thumb code.

None of these fixes are required for the settings debian currently build under. Having said that just because debian doesn't currently build with those settings does not mean that people may not want to build with them in the future. Removing logic to correctly handle build configurations such that people who want to build for those configurations have to rediscover why things are misbehaving in strange ways does not seem like a nice thing to do to me. IMO this patch should have been upstreamed ages ago.

I'm ccing martin guy because he still appears to be involved with debian stuff for maverick, at least he is still editing the wiki page relating to it.


Reply to: