Turn ___brk_addr into a compat symbol
Commit Message
At least since GCC 2.95 the ___brk_addr symbol has only been needed on
i386-linux. The architectures added later do not need to define it any
more. This includes all current users of .../generic/brk.c, plus ia64 and
microblaze. GCC 3.1 finally removed that reference even for i386-linux.
---
sysdeps/unix/sysv/linux/generic/brk.c | 5 ++++-
sysdeps/unix/sysv/linux/ia64/brk.S | 5 ++++-
sysdeps/unix/sysv/linux/microblaze/brk.c | 5 ++++-
3 files changed, 12 insertions(+), 3 deletions(-)
Comments
On Tue, Nov 24, 2020 at 5:35 AM Andreas Schwab <schwab@suse.de> wrote:
>
> At least since GCC 2.95 the ___brk_addr symbol has only been needed on
> i386-linux. The architectures added later do not need to define it any
> more. This includes all current users of .../generic/brk.c, plus ia64 and
> microblaze. GCC 3.1 finally removed that reference even for i386-linux.
Do any targets, except for i386-linux, ever reference this symbol?
On Nov 24 2020, H.J. Lu wrote:
> Do any targets, except for i386-linux, ever reference this symbol?
See gcc commit bced43dd6ca.
Andreas.
On Tue, Nov 24, 2020 at 6:46 AM Andreas Schwab <schwab@suse.de> wrote:
>
> On Nov 24 2020, H.J. Lu wrote:
>
> > Do any targets, except for i386-linux, ever reference this symbol?
>
> See gcc commit bced43dd6ca.
>
> Andreas.
>
I don't see references to ___brk_addr for ia64 nor microblaze since they were
added after
commit d0f8fcea2689a8c9c32648370c14e0ce40288bfa
Author: Richard Kenner <kenner@gcc.gnu.org>
Date: Fri Jun 28 14:08:53 1996 -0400
(init_dummy): Only i386-linux (at most) needs ___brk_addr hack.
I think ___brk_addr should be removed for ia64 and microblaze.
On Nov 24 2020, H.J. Lu via Libc-alpha wrote:
> I think ___brk_addr should be removed for ia64 and microblaze.
That's exactly what I do.
Andreas.
On Tue, Nov 24, 2020 at 7:43 AM Andreas Schwab <schwab@suse.de> wrote:
>
> On Nov 24 2020, H.J. Lu via Libc-alpha wrote:
>
> > I think ___brk_addr should be removed for ia64 and microblaze.
>
> That's exactly what I do.
>
You added
#include <shlib-compat.h>
...
compat_symbol (libc, __curbrk, ___brk_addr, GLIBC_2_0);
to ia64 and microblaze.
On Nov 24 2020, H.J. Lu via Libc-alpha wrote:
> On Tue, Nov 24, 2020 at 7:43 AM Andreas Schwab <schwab@suse.de> wrote:
>>
>> On Nov 24 2020, H.J. Lu via Libc-alpha wrote:
>>
>> > I think ___brk_addr should be removed for ia64 and microblaze.
>>
>> That's exactly what I do.
>>
>
> You added
>
> #include <shlib-compat.h>
> ...
> compat_symbol (libc, __curbrk, ___brk_addr, GLIBC_2_0);
>
> to ia64 and microblaze.
Yes, and?
Andreas.
On Tue, Nov 24, 2020 at 8:13 AM Andreas Schwab <schwab@suse.de> wrote:
>
> On Nov 24 2020, H.J. Lu via Libc-alpha wrote:
>
> > On Tue, Nov 24, 2020 at 7:43 AM Andreas Schwab <schwab@suse.de> wrote:
> >>
> >> On Nov 24 2020, H.J. Lu via Libc-alpha wrote:
> >>
> >> > I think ___brk_addr should be removed for ia64 and microblaze.
> >>
> >> That's exactly what I do.
> >>
> >
> > You added
> >
> > #include <shlib-compat.h>
> > ...
> > compat_symbol (libc, __curbrk, ___brk_addr, GLIBC_2_0);
> >
> > to ia64 and microblaze.
>
> Yes, and?
>
There is no need for that. ___brk_addr should be simply removed from ia64
and microblaze.
On Nov 24 2020, H.J. Lu wrote:
> There is no need for that. ___brk_addr should be simply removed from ia64
> and microblaze.
It is part of the ABI.
Andreas.
* Andreas Schwab:
> At least since GCC 2.95 the ___brk_addr symbol has only been needed on
> i386-linux. The architectures added later do not need to define it any
> more. This includes all current users of .../generic/brk.c, plus ia64 and
> microblaze. GCC 3.1 finally removed that reference even for i386-linux.
Is the intent of this patch that __brk_addr should turn into a compat
symbol on i386, too?
Thanks,
Florian
On Dez 02 2020, Florian Weimer wrote:
> Is the intent of this patch that __brk_addr should turn into a compat
> symbol on i386, too?
You objected.
Andreas.
@@ -19,14 +19,17 @@
#include <errno.h>
#include <unistd.h>
#include <sysdep.h>
+#include <shlib-compat.h>
/* This must be initialized data because commons can't have aliases. */
void *__curbrk = 0;
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_33)
/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt
to work around different old braindamage in the old Linux ELF dynamic
linker. */
-weak_alias (__curbrk, ___brk_addr)
+compat_symbol (libc, __curbrk, ___brk_addr, GLIBC_2_0);
+#endif
int
__brk (void *addr)
@@ -19,6 +19,7 @@
<https://www.gnu.org/licenses/>. */
#include <sysdep.h>
+#include <shlib-compat.h>
#include <asm/errno.h>
@@ -30,7 +31,9 @@
__curbrk:
data8 0
-weak_alias (__curbrk, ___brk_addr)
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_33)
+compat_symbol (libc, __curbrk, ___brk_addr, GLIBC_2_0)
+#endif
LEAF(__brk)
.regstk 1, 0, 0, 0
@@ -18,14 +18,17 @@
#include <errno.h>
#include <unistd.h>
#include <sysdep.h>
+#include <shlib-compat.h>
/* This must be initialized data because commons can't have aliases. */
void *__curbrk = 0;
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_33)
/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt
to work around different old braindamage in the old Linux ELF dynamic
linker. */
-weak_alias (__curbrk, ___brk_addr)
+compat_symbol (libc, __curbrk, ___brk_addr, GLIBC_2_0);
+#endif
int
__brk (void *addr)