Re: glibc updated

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2017-07-18 4:26 PM, John David Anglin wrote:
On 2017-07-18 3:39 PM, Rolf Eike Beer wrote:
John David Anglin wrote:
On 2017-07-18 11:13 AM, Rolf Eike Beer wrote:
Am 2017-07-18 16:32, schrieb John David Anglin:
On 2017-07-17 12:33 PM, John David Anglin wrote:
I would like to know if the gentoo folks would consider fixing the
__gmon_start__ bug:
https://sourceware.org/bugzilla/show_bug.cgi?id=19170

There is some risk in applying the patch as rebuilding a library
package may break other
packages which depend on the library.  This could break critical
tools such as binutils and
gcc.  In which case, some manual intervention may be needed.
However, the transition
on Debian went fairly smoothly.  As a result, we no longer have the
external symbol
__gmon_start exposed and we have correct library dependencies.

The issues with _init referred to in the BZ report are fixed. It is
now PIC; and PIE applications
work on hppa thanks to Alan Modra.
Helge: we need to add PIE load address to the kernel TODO list if it's
not already there.

Although not ideal, we could keep the __gmon_start__ patch in Debian.
The other approach is to install the __gmon_start__ patch and let
gentoo revert it.  I'm starting
to think this is best.
I don't think there will be a big problem for Gentoo to accept it, as
long as there is a working upgrade path like "build glibc with flag
-special-foo, rebuild system, remove flag and rebuild glibc again".
And of course a hint in the release notes so it will be obvious to the
packagers what they have to take care of. That flag thing is something
that Gentoo probably can add to their build scripts, something that
e.g. keeps the symbol in the lib without exporting it during linking,
so it would be resolvable first and the reference goes away on
rebuild. Or whatever ;)
I'm not sure you fully understand the issue.  It doesn't involve doing
anything special in building glibc.

The issue is this code in glibc's crtn.S:

/* Note that we cannot have a weak undefined __gmon_start__, because
     that would require this to be PIC, and the linker is currently not
     able to generate a proper procedure descriptor for _init.  Sad but
     true.  Anyway, HPPA is one of those horrible architectures where
making the comparison and indirect call is quite expensive (see the
     comment in sysdeps/generic/initfini.c). */
          .text
          .align 4
          .weak   __gmon_start__
          .type    __gmon_start__,@function
__gmon_start__:
          .proc
          .callinfo
          .entry
          bv,n %r0(%r2)
          .exit
          .procend

The above hunk of code results in a weak __gmon_start__ function in
every shared library.
The function needs to be removed.

As can be seen, the function does nothing.  It is called once when a
shared library is loaded.

In an application link, __gmon_start__ is resolved to one of the shared
libraries used by the application.
So, this would be a problem if the application only links to glibc (and it's libraries), no? The problem is not rebuilding, Gentoo is actually totally about rebuilding your system every now and then ;) The point is: what must be done to have an upgrade path from the old glibc to the new one that will not
break the system on the way.
It's not a problem for applications that only link against libc, but for other libraries. I'm not aware of any way to avoid some breakage other than retaining the old behavior. The new glibc doesn't break anything directly. The breakage occurs when libraries are linked with
the new crt* files.

One could build up a minimal system in a chroot. When you are sure that it works, then these tools could be used to get past any breakage. I don't know the gentoo build system
so I don't know how easy this would be.
The patch will not be applied until after the 2.26 branch is created so there is plenty of time to
consider what needs to be done.

There is one addition issue to consider. Linuxthreads is now removed and hppa uses the generic nptl thread support. So, old linuxthread applications will no longer work. Changes to nptl broke 2.25 on hppa and no doubt the code that tried to handle both methodologies
was buggy.  Most architectures dropped linuxthreads years ago.

Dave

--
John David Anglin  dave.anglin@xxxxxxxx

--
To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux