Opened 13 years ago

Closed 13 years ago

#255 closed defect (fixed)

libc064 gives SIGSEGV when closing some processes due to being linked with IBM linker not wlink

Reported by: psmedley Owned by: bird
Priority: highest Milestone: libc-0.6.5
Component: libc Version: 0.6.4
Severity: critical Keywords:
Cc: Steven Levine, dryeo

Description (last modified by bird)

Many applications I've built (httpd, lyx, postgres to name 3) are giving the following SIGSEGV when the application either closes, or attempts to close:

Killed by SIGSEGV
pid=0xb3db ppid=0xb3d5 tid=0x0001 slot=0x00a2 pri=0x0200 mc=0x0001
E:\PGSQL\BIN\POSTGRES.EXE
LIBC064 0:000f0242
cs:eip=005b:1f600242      ss:esp=d62f:00417992      ebp=004179e8
 ds=d62f      es=d62f      fs=150b      gs=0000     efl=00010206
eax=0000d62f ebx=004179c0 ecx=00417e9c edx=0000150b edi=00417c9c 
esi=00000000

Registers differ, but the address (LIBC064 0:000f0242) is always the same.

Steven Levine's observations are below: I have to suspect a libc064 link error. I loaded libc064 into memory and took a look with Theseus and this is what it has to say.

1C560220 (0020)8C D2                *..*      mov      edx,ss 1C560222
(0022)81 E2 F8 FF 00 00    *......*  and      edx,FFF8 1C560228 (0028)C1
E2 0D             *...*     shl/sal  edx,0D 1C56022B (002B)66 8B D4            
*f..*     O16:mov      dx,sp
1C56022E (002E)B8 2F 9D 00 00       *./...*   mov      eax,9D2F 1C560233
(0033)8E D0                *..*      mov      ss,ax 1C560235 (0035)8B E2               
*..*      mov      esp,edx
1C560237 (0037)8E D8                *..*      mov      ds,ax
1C560239 (0039)8E C0                *..*      mov      es,ax
1C56023B (003B)BA 0B 15 00 00       *.....*   mov      edx,150B 1C560240
(0040)8E E2                *..*      mov      fs,dx 1C560242 (0042)0F B7
44 24 22       *..D$"*   movzx    eax,[esp+22]

This is the same code that traps for you, but loaded at the location where libc064 happens to load on my system. The mov at 1c56022e is hosed.

Well I've seen the exact same crash location from a bunch of different binaries now

I saw the messages. The seg:offset is the same, but the segment register contents differ and I can guess why.

so either GCC is doing something funky (I'll rebuild postgresql with 3.3.5

I recommend you rebuild with libc063. Best I can tell it does not share the defect. Unfortunately, I cannot view the code in libc063 with Theseus. The pages that contain the code in question are not available.

or something is screwed up with libc064.

This is my best guess at the moment.

BTW, Knut linked libc063 with wlink and libc064 with the IBM linker, so we may be dealing with a linker defect.

the btw looks to be correct, as I built libc-0.6 from svn using wlink, and rebuilt postgresql against libc064x and I can now close postgres without the SIGSEGV

Change History (5)

comment:1 by Steven Levine, 13 years ago

Cc: Steven Levine added

comment:2 by Silvan Scherrer, 13 years ago

please try the following file ftp://ftp.netlabs.org/pub/odin/test/libc064_test_1.zip

this is a new linked libc064 done by Dmitriy. it should work flawless and fix the above problems. i still hope Knut will one day delivery a official version.

comment:3 by dryeo, 13 years ago

Cc: dryeo added

comment:4 by bird, 13 years ago

Component: emxlibc
Description: modified (diff)
Status: newaccepted
Version: 0.6.4

We know.

comment:5 by bird, 13 years ago

Resolution: fixed
Status: acceptedclosed

I've change my local build environment to use WLINK instead of ILINK. It produced a build. Will fix this together with a bunch of other things and release it as 0.6.5. 0.6.4 will not be re-released.

Note: See TracTickets for help on using tickets.