On Wed, Sep 14, 2016 at 3:23 PM, Jack Howarth
<howarth.mailing.li...@gmail.com> wrote:
> On Wed, Sep 14, 2016 at 1:53 PM, Jeremy Huddleston Sequoia
> <jerem...@gmail.com> wrote:
>>
>>> On Sep 14, 2016, at 09:51, Jack Howarth <howarth.mailing.li...@gmail.com> 
>>> wrote:
>>>
>>> Jeremy,
>>>      There is a major thinko in how you built XQuartz 2.7.10-rc2. The 
>>> files...
>>>
>>> $ otool -L /opt/X11/lib/flat_namespace/libXt.6.dylib
>>> /opt/X11/lib/flat_namespace/libXt.6.dylib:
>>> /opt/X11/lib/libXt.6.dylib (compatibility version 7.0.0, current version 
>>> 7.0.0)
>>> /opt/X11/lib/libSM.6.dylib (compatibility version 7.0.0, current version 
>>> 7.1.0)
>>> /opt/X11/lib/libICE.6.dylib (compatibility version 10.0.0, current
>>> version 10.0.0)
>>> /opt/X11/lib/libX11.6.dylib (compatibility version 10.0.0, current
>>> version 10.0.0)
>>> /opt/X11/lib/libxcb.1.dylib (compatibility version 3.0.0, current version 
>>> 3.0.0)
>>> /opt/X11/lib/libXau.6.dylib (compatibility version 7.0.0, current version 
>>> 7.0.0)
>>> /opt/X11/lib/libXdmcp.6.dylib (compatibility version 7.0.0, current
>>> version 7.0.0)
>>> /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
>>> version 1225.1.1)
>>>
>>> and
>>>
>>> $ otool -L /opt/X11/lib/flat_namespace/libXt.7.dylib
>>> /opt/X11/lib/flat_namespace/libXt.7.dylib:
>>> /opt/X11/lib/libXt.6.dylib (compatibility version 7.0.0, current version 
>>> 7.0.0)
>>> /opt/X11/lib/libSM.6.dylib (compatibility version 7.0.0, current version 
>>> 7.1.0)
>>> /opt/X11/lib/libICE.6.dylib (compatibility version 10.0.0, current
>>> version 10.0.0)
>>> /opt/X11/lib/libX11.6.dylib (compatibility version 10.0.0, current
>>> version 10.0.0)
>>> /opt/X11/lib/libxcb.1.dylib (compatibility version 3.0.0, current version 
>>> 3.0.0)
>>> /opt/X11/lib/libXau.6.dylib (compatibility version 7.0.0, current version 
>>> 7.0.0)
>>> /opt/X11/lib/libXdmcp.6.dylib (compatibility version 7.0.0, current
>>> version 7.0.0)
>>> /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
>>> version 1225.1.1)
>>>
>>> have the wrong install name path. So any binaries linked against those
>>> two flat-namespace shared libraries are going to load the two-level
>>> namespace ones instead.
>>
>> Nope, that is exactly correct.  Projects should NOT be linking against those 
>> libraries.  They are being shipped for runtime usage only.  Parties that are 
>> interested in using those instead of the ones we ship by default can copy 
>> them into location or use DYLD_LIBRARY_PATH as suggested earlier.
>>
>> Any developer trying to link against those binaries should instead invest 
>> time in fixing Motif.  There's no reason anyone should be linking against 
>> those directly.
>
> I am pretty certain that there is no way to fix this that doesn't
> break the motif ABI with pre-existing binaries because the crux of the
> problem is a name-space collision with libXt. My understanding was
> that linux doesn't tickle this problem because their weak symbol
> handling allows the overlapping symbols from motif to dominate over
> those from libXt.
>

One thing that might be worth trying (which I haven't puzzled out yet)
is changing the symbols...

# nm libXm.4.dylib | grep vendorShell
00000000002023f0 D _vendorShellClassRec
0000000000202510 D _vendorShellWidgetClass

from 'D' to 'd' with the appropriate invocation of
__attribute__((weak_import)). So far I haven't found the proper place
to insert that to get the symbol converted into a weak_import.

>>
>> As an alternative, I could just ship a separate Motif compatibility package 
>> which lays those down in /opt/X11/lib, but I fear that doing so might cause 
>> people to install it that don't really need it.
>>
>>
>>>        Jack
>>>
>>>
>>> On Tue, Sep 13, 2016 at 4:12 PM, Jeremy Huddleston Sequoia
>>> <jerem...@gmail.com> wrote:
>>>>
>>>>> On Sep 13, 2016, at 05:50, Jack Howarth <howarth.mailing.li...@gmail.com> 
>>>>> wrote:
>>>>>
>>>>> On Fri, Sep 9, 2016 at 1:06 AM, Jeremy Huddleston Sequoia
>>>>> <jerem...@apple.com> wrote:
>>>>>> Hey all,
>>>>>>
>>>>>> I'd like to announce that XQuartz 2.7.10_rc1 is available.  Full changes 
>>>>>> since 2.7.9 can be seen in the release notes:
>>>>>>
>>>>>>   https://www.xquartz.org/releases/XQuartz-2.7.10_rc1.html
>>>>>>
>>>>>> The main change since 2.7.10_beta2 is around the libXt compatibility 
>>>>>> hack for Motif.  Because of issues with applications that use both Motif 
>>>>>> and libXaw, I've abandoned the previous approach of shipping 
>>>>>> /opt/X11/lib/libXt.6.dylib as flat_namespace and 
>>>>>> /opt/X11/lib/libXt.7.dylib as the two-level namespace version.  Now, 
>>>>>> /opt/X11/lib/libXt.6.dylib is two-level namespace, and 
>>>>>> /opt/X11/lib/libXt.7.dylib is provided as a symlink to it for 
>>>>>> compatibility.  This means that Motif based applications will fail to 
>>>>>> launch by default unless this bug is fixed in Motif.
>>>>>>
>>>>>> As a workaround, we're shipping the flat namespace dylib hack at 
>>>>>> /opt/X11/lib/flat_namespace/libXt.6.dylib.  Users who require that 
>>>>>> version have two options:
>>>>>> 1) Replace the two-level namespace version with it (sudo cp 
>>>>>> /opt/X11/lib/flat_namespace/libXt.6.dylib /opt/X11/lib/libXt.6.dylib)
>>>>>> 2) Launch your Motif applications using 
>>>>>> DYLD_LIBRARY_PATH=/opt/X11/lib/flat_namespace
>>>>>
>>>>> That really isn't a viable solution since using DYLD_LIBRARY_PATH will
>>>>> require users to disable rootless on 10.11 and later.
>>>>
>>>> No, that's certainly not the case.  DYLD_LIBRARY_PATH is ignored for 
>>>> system executables.  There are no system executables that require Motif, 
>>>> so that's not relevant.
>>>>
>>>>>> This should not be seen as a long-term solution.  Hopefully someone will 
>>>>>> step up to fix Motif to not require this hack.
>>>>>
>>>>> That is impossible to achieve. The underlying problem is a namespace
>>>>> conflict for at least one symbol in motif. Any proper fix for this
>>>>> would require motif to rename those symbols and break all legacy motif
>>>>> binaries.
>>>>
>>>> Nope.  You can see the change that I made to libXaw and libXaw3d for this 
>>>> purpose.  It does not break binary compatibility for those libraries.
>>>>
>>>>>> Please give this a try and comment on the effectiveness of this approach 
>>>>>> if you use Motif-based applications.
>>>>>
>>>>> Is the breakage in 2.7.9 *really* that bad?
>>>>
>>>> Yes.  The issue is that the structs are actually sized differently and 
>>>> Motif and libXaw were overrunning the allocated memory, causing memory 
>>>> corruption.  This fixes the problem correctly for clients of libXaw and 
>>>> libXaw3d.  Motif just needs a similar change.
>>>>
>>>>> It seems better to revert
>>>>> this change in 2.7.10 and leave things as they are in 2.7.9 relative
>>>>> to the motif support. At least legacy binaries still work there and if
>>>>> users rebuild rigorously against the two-level namespace
>>>>> libXt.7.dylib, there shouldn't be issues with newly built binaries.
>>>>
>>>> The solution in 2.7.9 was not working for legacy executables that were 
>>>> including both libXt.6.dylib (through libXm.dylib) and libXt.7.dylib 
>>>> (through libXaw.dylib or libXaw3d.dylib).  An alternative would be to bump 
>>>> both libXt and everything else that linked against it.  That falls apart 
>>>> quite quickly.
>>>>
>>>> ---
>>>>
>>>> The solution as it is basically allows users to choose memory corruption 
>>>> and OpenMotif compatibility (by using the ones in the flat_namespace 
>>>> subdirectory) or security and reliability (by using what we ship by 
>>>> default).
>>>>
>>>> --Jeremy
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Xquartz-dev mailing list
>>>> Xquartz-dev@lists.macosforge.org
>>>> https://lists.macosforge.org/mailman/listinfo/xquartz-dev
>>>>
>>>
>>> _______________________________________________
>>> Xquartz-dev mailing list
>>> Xquartz-dev@lists.macosforge.org
>>> https://lists.macosforge.org/mailman/listinfo/xquartz-dev
>>>
>>
>>
>>
>> _______________________________________________
>> Xquartz-dev mailing list
>> Xquartz-dev@lists.macosforge.org
>> https://lists.macosforge.org/mailman/listinfo/xquartz-dev
>>

_______________________________________________
Xquartz-dev mailing list
Xquartz-dev@lists.macosforge.org
https://lists.macosforge.org/mailman/listinfo/xquartz-dev

Reply via email to