bitwiseworks / libc

LIBC Next (kLIBC fork)
9 stars 4 forks source link

Build fails with E2174 from Watcom linker #93

Closed dmik closed 3 years ago

dmik commented 3 years ago

Trying to make a New Year release of LIBC, I suddenly faced this build break at link stage:

gcc -o D:/Coding/libc/master-build/opt/omf/libcn0.dll -Zomf -g -Zomf -Zmap -Zstack 1024 -Zhigh-mem  -Zdll -nostdlib  \
    D:/Coding/libc/master-build/opt/omf/libc.def \
    D:/Coding/libc/master-build/opt/omf/src/lib/startup/386/dll0hi.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/libcfork.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/sharedpm.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/__initdll.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/_heapvoting.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/FastInfoBlocks.obj D:/Coding/libc/master-build/opt/omf/src/lib/process/fmutex.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/DosCreateEventSemEx.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/DosEx.obj D:/Coding/libc/master-build/opt/omf/src/lib/str/386/bzero.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/386/__init_environ.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/_hmalloc.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/_hinitheap.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/heaphigh.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/DosAllocMemEx.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/ucreate2.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/iaddmem.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/imisc.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/uopen.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/DosOpenEventSemEx.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/umalloc.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/ialloc.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/filehandles.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/_hcalloc.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/ucalloc.obj D:/Coding/libc/master-build/opt/omf/src/lib/startup/dllinit.obj D:/Coding/libc/master-build/opt/omf/src/lib/startup/startup.obj D:/Coding/libc/master-build/opt/omf/src/lib/startup/ctor1.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/tcpipver.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/tcpipver43.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/pathrewrite.obj D:/Coding/libc/master-build/opt/omf/src/lib/app/getenv.obj D:/Coding/libc/master-build/opt/omf/src/lib/str/386/strlen.obj D:/Coding/libc/master-build/opt/omf/src/lib/str/strncmp.obj D:/Coding/libc/master-build/opt/omf/src/lib/app/stdio.obj D:/Coding/libc/master-build/opt/omf/src/lib/process/fmutex2.obj D:/Coding/libc/master-build/opt/omf/src/lib/io/_tmp.obj D:/Coding/libc/master-build/opt/omf/src/lib/process/thread_internals.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/b_threadInit.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/malloc.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/initr.obj D:/Coding/libc/master-build/opt/omf/src/lib/malloc/_linitheap.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/uflags.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/sbrk.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/heap.obj D:/Coding/libc/master-build/opt/omf/src/lib/sys/__init.obj \
    D:/Coding/libc/master-build/opt/omf/libc_s.lib D:/Coding/libc/master-build/opt/omf/libc_app.lib D:/Coding/libc/master-build/opt/omf/libc_omf386.lib \
    D:/Coding/libc/master-build/opt/omf/libc_alias.lib D:/Coding/libc/master-build/opt/omf-lazy/libos2_unicode_lazy.lib D:/Coding/libc/master-build/opt/omf/libend.lib D:/Coding/libc/master-build/opt/omf/liblazyimp.lib D:/Coding/libc/master-build/opt/omf/libos2.lib \
    -LD:/Coding/libc/master-build/opt/omf -lstdc++ -lgcc -lgcc_eh -Zlinker "OPTION STUB=D:/Coding/libc/master-build/opt/omf/os2stub.bin"
Error! E2174: file D:\Coding\libc\master-build\opt\omf\src\lib\str\386\bzero.obj(D:\Temp\ccRMfb3e.s): Missing thread definition for type 0 relocation for 0001:0000bc90
Error! E2174: file D:\Coding\libc\master-build\opt\omf\src\lib\str\386\bzero.obj(D:\Temp\ccRMfb3e.s): Missing thread definition for type 0 relocation for 0001:0000bc90
Error! E2174: file D:\Coding\libc\master-build\opt\omf\src\lib\startup\ctor1.obj(D:\Coding\libc\master\src\emx\src\lib\startup\ctor1.c): Missing thread definition for type 0 relocation for 0001:00010d20
Error! E2174: file D:\Coding\libc\master-build\opt\omf\src\lib\startup\ctor1.obj(D:\Coding\libc\master\src\emx\src\lib\startup\ctor1.c): Missing thread definition for type 0 relocation for 0001:00010d20
Error! E2174: file D:\Coding\libc\master-build\opt\omf\src\lib\str\386\strlen.obj(D:\Temp\ccISYKgr.s): Missing thread definition for type 0 relocation for 0001:00017210
Error! E2174: file D:\Coding\libc\master-build\opt\omf\src\lib\str\386\strlen.obj(D:\Temp\ccISYKgr.s): Missing thread definition for type 0 relocation for 0001:00017210
Error! E2174: file D:\Coding\libc\master-build\opt\omf\src\lib\str\strncmp.obj(D:\Coding\libc\master\src\emx\src\lib\str\strncmp.c): Missing thread definition for type 0 relocation for 0001:00017230
Error! E2174: file D:\Coding\libc\master-build\opt\omf\src\lib\str\strncmp.obj(D:\Coding\libc\master\src\emx\src\lib\str\strncmp.c): Missing thread definition for type 0 relocation for 0001:00017230
Error! E2174: file D:\Coding\libc\master-build\opt\omf\libc_s.lib(mcountstub.obj): Missing thread definition for type 0 relocation for 0001:0001fd90
Error! E2174: file D:\Coding\libc\master-build\opt\omf\libc_s.lib(mcountstub.obj): Missing thread definition for type 0 relocation for 0001:0001fd90
Error! E2174: file D:\Coding\libc\master-build\opt\omf\libc_s.lib(bt_conv.obj): Missing thread definition for type 0 relocation for 0001:0002bba0
Error! E2174: file D:\Coding\libc\master-build\opt\omf\libc_s.lib(bt_conv.obj): Missing thread definition for type 0 relocation for 0001:0002bba0
Error! E2174: file D:\Coding\libc\master-build\opt\omf\libc_s.lib(dtor1.obj): Missing thread definition for type 0 relocation for 0001:000303f0
Error! E2174: file D:\Coding\libc\master-build\opt\omf\libc_s.lib(dtor1.obj): Missing thread definition for type 0 relocation for 0001:000303f0
Error! E2174: file D:\Coding\libc\master-build\opt\omf\libc_s.lib(s_isfinite.obj): Missing thread definition for type 0 relocation for 0001:000343f0
Error! E2174: file D:\Coding\libc\master-build\opt\omf\libc_s.lib(s_isfinite.obj): Missing thread definition for type 0 relocation for 0001:000343f0

This makes no sense to me. I've never seen this error in my entire practice. Last time I had a complete build of LIBC is for 0.1.5 RPM and it was on 22.06.2020. I have no idea what could change since then to make it break. On 23.06.2020 I released a new GCC 9.2.0 OS/2 beta 3 but there was just one change (https://github.com/bitwiseworks/gcc-os2/issues/14) that should not be related in any way here as no response files are used. I'm puzzled.

dmik commented 3 years ago

Ok, I sorted it out. My dirty hack of EMXOMF was on the way see (https://github.com/bitwiseworks/libc/issues/82#issuecomment-638450071). Removing it solves the problem.

StevenLevine commented 3 years ago

As you determined, there is something unexpected about the object file format. We have seen something similar to this in the past, although the linker error differed.

FTR, the error triggered at:

obj2supp.c:256 case FIX_FRAME_SEG: if( !frame->u.sdata ) { LnkMsg( LOC+ERR+MSG_FIXUP_MISSING_THREAD, "dA", frame->type, tgt_addr ); // 2020-06-21 SHL break; }

which is handling relocation records. The error triggered because, u.sdata was never populated. As some point, we need to make emxomf a bit smarter about which debug data it strips.

dmik commented 3 years ago

@StevenLevine yeah thanks for the comment! And there is a chance we will have a NY set of RPMs then. I’m having various other problems though, totally unrelated (happened when cooking LIBC RPMs), but may be you have something to say about it as well:

ECA5C21C-ABD5-4E15-B872-7481B7981956

StevenLevine commented 3 years ago

A bit more FTR. This error used to result in a trap. The message:

lnkerror.msg:345 // 2020-06-21 SHL pick( MSG_FIXUP_MISSING_THREAD, "Missing thread definition for type %d relocation for %A" , "Missing thread definition for type %d relocation for %A" )

was added at the same time the NULL pointer check was added to resolve #72.

StevenLevine commented 3 years ago

That's a nasty cascading exception IPE. The gory details are:

000FED9B: _trapQueryRegister+3A 000FED9B panic_FED9B: ; CODE XREF: _trapQueryRegist 000FED9B call __panicHIGH32 000FED9B ;──────────────────────────────────────────────────────────────────── 000FEDA0 dw 9084 000FEDA2 dw 60002 000FEDA2 _trapQueryRegister endp 000FEDA4

The IPE triggered because while processing an exception, a query client register request failed because the control information that provides access the the register was marked invalid. This typically indicates that kernel memory is corrupted, but it requires a system dump to say more.