On Mon, Oct 25 2021, Mark Kettenis <mark.kette...@xs4all.nl> wrote: >> Date: Mon, 25 Oct 2021 12:37:41 +0200 (CEST) >> From: Mark Kettenis <mark.kette...@xs4all.nl> >> >> > Date: Mon, 25 Oct 2021 12:01:11 +0200 >> > From: Patrick Wildt <patr...@blueri.se> >> > >> > Hi, >> > >> > mortimer@ has this diff in his tree for LLVM 13. I actually haven't >> > tried to see if it works fine with LLVM 11, but I feel it needs to be >> > sent out and not just be blindly committed. >> > >> > If someone wants to take care of this, it would be nice, so I can take >> > care of the remaining parts of sending out the LLVM 13 diff. >> >> > diff --git a/lib/libc/arch/amd64/sys/brk.S b/lib/libc/arch/amd64/sys/brk.S >> > index ce69679e389..ee1c11f7643 100644 >> > --- a/lib/libc/arch/amd64/sys/brk.S >> > +++ b/lib/libc/arch/amd64/sys/brk.S >> > @@ -48,7 +48,6 @@ __minbrk: >> > END(__minbrk) >> > .type __minbrk,@object >> > >> > - .weak brk >> > ENTRY(brk) >> > cmpq %rdi,__minbrk(%rip) >> > jb 1f >> > diff --git a/lib/libc/arch/amd64/sys/sbrk.S >> > b/lib/libc/arch/amd64/sys/sbrk.S >> > index 8d7d68909b2..db53a6bb643 100644 >> > --- a/lib/libc/arch/amd64/sys/sbrk.S >> > +++ b/lib/libc/arch/amd64/sys/sbrk.S >> > @@ -53,7 +53,6 @@ __curbrk: >> > END(__curbrk) >> > .type __curbrk,@object >> > >> > - .weak sbrk >> > ENTRY(sbrk) >> > movq __curbrk(%rip),%rax >> > movslq %edi,%rsi >> >> These functions are supposed to be weak, like they are on >> architectures that use a C implementation. I suppose the .weak >> directive needs to come *after* the .global emitted by ENTRY(). >> Putting it after the END() works. > > So I think the diff below is what we want here.
There are others left: russell /usr/src/lib/libc$ grep -B 1 -R ^ENTRY | grep -A 1 weak arch/i386/sys/brk.S- .weak brk arch/i386/sys/brk.S:ENTRY(brk) arch/i386/sys/sbrk.S- .weak sbrk arch/i386/sys/sbrk.S:ENTRY(sbrk) arch/riscv64/sys/sbrk.S- .weak sbrk arch/riscv64/sys/sbrk.S:ENTRY(sbrk) arch/riscv64/sys/brk.S- .weak brk arch/riscv64/sys/brk.S:ENTRY(brk) (and a few others where grep -B 1 isn't enough) > ok? I checked that the resulting .*o files are the same on amd64, sparc64 and riscv64. ok jca@ Here's the diff for the other architectures. I didn't touch m88k, which won't use clang anytime soon. Also ok? Index: arch/arm/sys/brk.S =================================================================== RCS file: /cvs/src/lib/libc/arch/arm/sys/brk.S,v retrieving revision 1.10 diff -u -p -r1.10 brk.S --- arch/arm/sys/brk.S 21 Nov 2017 19:08:36 -0000 1.10 +++ arch/arm/sys/brk.S 25 Oct 2021 13:48:05 -0000 @@ -44,8 +44,6 @@ __minbrk: .word _C_LABEL(_end) END(__minbrk) - .weak brk - /* * Change the data segment size */ @@ -96,3 +94,4 @@ ENTRY(brk) .Lcurbrk: .word PIC_SYM(__curbrk, GOT) END(brk) + .weak brk Index: arch/arm/sys/sbrk.S =================================================================== RCS file: /cvs/src/lib/libc/arch/arm/sys/sbrk.S,v retrieving revision 1.10 diff -u -p -r1.10 sbrk.S --- arch/arm/sys/sbrk.S 21 Nov 2017 19:08:36 -0000 1.10 +++ arch/arm/sys/sbrk.S 25 Oct 2021 13:48:05 -0000 @@ -45,7 +45,6 @@ __curbrk: .word _C_LABEL(_end) END(__curbrk) - .weak sbrk /* * Change the data segment size */ @@ -85,3 +84,4 @@ ENTRY(sbrk) .Lcurbrk: .word PIC_SYM(__curbrk, GOT) END(sbrk) + .weak sbrk Index: arch/i386/sys/brk.S =================================================================== RCS file: /cvs/src/lib/libc/arch/i386/sys/brk.S,v retrieving revision 1.13 diff -u -p -r1.13 brk.S --- arch/i386/sys/brk.S 19 Aug 2017 18:24:06 -0000 1.13 +++ arch/i386/sys/brk.S 25 Oct 2021 13:48:05 -0000 @@ -42,7 +42,6 @@ __minbrk: END(__minbrk) .type __minbrk,@object - .weak brk ENTRY(brk) #ifdef __PIC__ movl 4(%esp),%ecx @@ -82,3 +81,4 @@ ENTRY(brk) SET_ERRNO() ret END(brk) + .weak brk Index: arch/i386/sys/sbrk.S =================================================================== RCS file: /cvs/src/lib/libc/arch/i386/sys/sbrk.S,v retrieving revision 1.13 diff -u -p -r1.13 sbrk.S --- arch/i386/sys/sbrk.S 19 Aug 2017 18:24:06 -0000 1.13 +++ arch/i386/sys/sbrk.S 25 Oct 2021 13:48:05 -0000 @@ -42,7 +42,6 @@ __curbrk: .long _end END(__curbrk) .type __curbrk,@object - .weak sbrk ENTRY(sbrk) #ifdef __PIC__ movl 4(%esp),%ecx @@ -76,3 +75,4 @@ ENTRY(sbrk) SET_ERRNO() ret END(sbrk) + .weak sbrk Index: arch/powerpc/sys/brk.S =================================================================== RCS file: /cvs/src/lib/libc/arch/powerpc/sys/brk.S,v retrieving revision 1.15 diff -u -p -r1.15 brk.S --- arch/powerpc/sys/brk.S 26 Oct 2020 22:07:05 -0000 1.15 +++ arch/powerpc/sys/brk.S 25 Oct 2021 13:48:05 -0000 @@ -30,8 +30,6 @@ .extern __curbrk .extern _C_LABEL(_end) - .weak brk - ENTRY(brk) /* check >= _end, if not make the call for _end */ @@ -77,3 +75,4 @@ ENTRY(brk) mr 3, 0 /* # return 0 */ blr END(brk) + .weak brk Index: arch/powerpc/sys/sbrk.S =================================================================== RCS file: /cvs/src/lib/libc/arch/powerpc/sys/sbrk.S,v retrieving revision 1.14 diff -u -p -r1.14 sbrk.S --- arch/powerpc/sys/sbrk.S 26 Oct 2020 22:07:05 -0000 1.14 +++ arch/powerpc/sys/sbrk.S 25 Oct 2021 13:48:05 -0000 @@ -36,8 +36,6 @@ __curbrk: END(__curbrk) .type __curbrk,@object - .weak sbrk - .text ENTRY(sbrk) @@ -74,3 +72,4 @@ ENTRY(sbrk) mr 3, 5 /* # remember, 5=old_curbrk */ blr END(sbrk) + .weak sbrk Index: arch/riscv64/sys/brk.S =================================================================== RCS file: /cvs/src/lib/libc/arch/riscv64/sys/brk.S,v retrieving revision 1.1 diff -u -p -r1.1 brk.S --- arch/riscv64/sys/brk.S 4 May 2021 04:17:53 -0000 1.1 +++ arch/riscv64/sys/brk.S 25 Oct 2021 13:48:05 -0000 @@ -26,7 +26,6 @@ __minbrk: .dword _C_LABEL(_end) - .weak brk ENTRY(brk) RETGUARD_SETUP(brk, t6) lla t1, _C_LABEL(__minbrk) @@ -56,3 +55,4 @@ ENTRY(brk) RETGUARD_CHECK(brk, t6); ret END(brk) + .weak brk Index: arch/riscv64/sys/sbrk.S =================================================================== RCS file: /cvs/src/lib/libc/arch/riscv64/sys/sbrk.S,v retrieving revision 1.1 diff -u -p -r1.1 sbrk.S --- arch/riscv64/sys/sbrk.S 4 May 2021 04:17:53 -0000 1.1 +++ arch/riscv64/sys/sbrk.S 25 Oct 2021 13:48:05 -0000 @@ -28,7 +28,6 @@ __curbrk: .dword _C_LABEL(_end) END(__curbrk) - .weak sbrk ENTRY(sbrk) RETGUARD_SETUP(sbrk, t6) @@ -48,3 +47,4 @@ ENTRY(sbrk) RETGUARD_CHECK(sbrk, t6); ret END(sbrk) + .weak sbrk Index: arch/sparc64/sys/brk.S =================================================================== RCS file: /cvs/src/lib/libc/arch/sparc64/sys/brk.S,v retrieving revision 1.7 diff -u -p -r1.7 brk.S --- arch/sparc64/sys/brk.S 5 Sep 2015 06:22:47 -0000 1.7 +++ arch/sparc64/sys/brk.S 25 Oct 2021 13:48:05 -0000 @@ -41,8 +41,6 @@ .globl __curbrk .globl _C_LABEL(_end) - .weak brk - .data .align 8 __minbrk: @@ -85,3 +83,4 @@ ENTRY(brk) stx %o2, [%g1 + %lo(__curbrk)] #endif END(brk) + .weak brk Index: arch/sparc64/sys/sbrk.S =================================================================== RCS file: /cvs/src/lib/libc/arch/sparc64/sys/sbrk.S,v retrieving revision 1.5 diff -u -p -r1.5 sbrk.S --- arch/sparc64/sys/sbrk.S 5 Sep 2015 06:22:47 -0000 1.5 +++ arch/sparc64/sys/sbrk.S 25 Oct 2021 13:48:05 -0000 @@ -50,8 +50,6 @@ __curbrk: OTYPE(__curbrk) .text - .weak sbrk - ENTRY(sbrk) #ifdef __PIC__ PIC_PROLOGUE(%o5,%o4) @@ -83,3 +81,4 @@ ENTRY(sbrk) stx %o4, [%o2 + %lo(__curbrk)] #endif END(sbrk) + .weak sbrk -- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE