HEADSUP: Python 2.7 upgrade

szgyg szgyg@ludens.elte.hu
Sat Jan 26 23:22:00 GMT 2013


On 1/26/2013 6:50 AM, marco atzeri wrote:
> On 1/26/2013 1:08 AM, szgyg wrote:
>> Strip copies the whole .reloc section, including entries for removed
>> debug sections. This is documented in rebase/README. Rebase checks for
>> this condition in Relocations::relocate and silently ignores wrong
>> entries. Well, except in Marco's dict_snowball.dll.
>
> probably the FixImage does no work as rebase is not applied
> to the stripped dll, but after the addittion of the
> .gnu_debuglink section. The section is small and usually
> it is not likely to be covered by the reloc table.
> Postgresql has 77 dll's and only 1 hit the problem.

Indeed. Rebase checks whether the base address in a relocation block 
points into an existing section. It does, because there is 
.gnu_debuglink, but this section is only 0x200 bytes while a relocation 
block covers 0x1000 bytes, so rebase segfaults if we have a relocation 
in this gap.

> I also noted that using "gcc -shared" instead of "dllwrap" produce
> a dict_snowball.dll without the reloc table covering the ".debug_*"
>
> As workaround I will deploy a postgresql release without
> debug symbols.
>
> Changing the build system to not use dllwrap will
> take some additional time, specially for the testing all
> the 77 dll's behaviour.

Another workaround would be fixing .reloc between stripping and adding 
.gnu_debuglink. Running `make rebase.exe' in rebase/imagehelper creates 
a rebase which have an -f flag for this. (But it inserts a zero 
terminator block instead of changing VirtualSize, so it may or may not 
work.)

szgyg



More information about the Cygwin-apps mailing list