Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20121108224032.GY20323@brightrain.aerifal.cx>
Date: Thu, 8 Nov 2012 17:40:32 -0500
From: Rich Felker <dalias@...ifal.cx>
To: musl@...ts.openwall.com
Subject: Re: [ANN] sabotage 0.9.7 milestone (x86[_64]) release

On Thu, Nov 08, 2012 at 02:29:49PM -0800, Isaac Dunham wrote:
> On Wed, 7 Nov 2012 20:31:04 -0500
> Rich Felker <dalias@...ifal.cx> wrote:
> 
> > 
> > > > > Is there a reason Opera would not work with this release?  Its only
> > > > > external dependencies are X11 and freetype/fontconfig.
> > > >
> > > > And glibc.
> 
> And libstdc++.

If it's using a shared libstdc++, then it would either need to be run
with a different library path pointing at the glibc libstdc++.so, or
musl will need to provide a sufficiently compatible ABI, in the C++
sense, for the musl-built libstdc++ to satisfy the needs of a
glibc-linked binary.

> > I'm not clear on whether any of the issues affect Opera, but for such
> > a large program I'd be fairly surprised if they don't (albeit happily
> > surprised, of course).
> Here's what I got (using a somewhat out-of-date libc.so; I know at
> least one function has since been added, but this gives a general
> idea of the scope):
> $ /opt/musl/lib/libc.so lib/opera/opera 
> Error relocating /usr/lib/libstdc++.so.6: __nl_langinfo_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __strftime_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: strtold_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __wctype_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __wcsftime_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __towupper_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __strxfrm_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __strtod_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __wcsxfrm_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __uselocale: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __freelocale: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __strcoll_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __towlower_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __iswctype_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __strtof_l: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __duplocale: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __newlocale: symbol not found
> Error relocating /usr/lib/libstdc++.so.6: __wcscoll_l: symbol not found

All of these would be fixed if we could use a musl-built libstdc++.so
instead of the glibc-built one.

> Error relocating /lib/libgcc_s.so.1: dl_iterate_phdr: symbol not found

Fixed.

> Error relocating lib/opera/opera: __pthread_register_cancel: symbol not found

Interesting. I had not really thought about what could be done to
satisfy the glibc thread-cancellation ABI. For musl-linked programs,
we use the ancient (glibc 2.1 era) cancellation push/pop functions
which are much cleaner and don't need special GCC hacks. But there
should be some way to provide at least an ABI layer for the glibc way.

> Error relocating lib/opera/opera: memmem: symbol not found

Also fixed; we have memmem now.

> Error relocating lib/opera/opera: __res_ninit: symbol not found

This could probably be stubbed out. musl's resolver is completely
stateless.

> Error relocating lib/opera/opera: __pthread_unregister_cancel: symbol not found
> Error relocating lib/opera/opera: qsort_r: symbol not found

Should be easy to add.

> Error relocating lib/opera/opera: __sigsetjmp: symbol not found

This is just another symbol alias.

Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.