On Mon, Oct 25 2021, Mark Kettenis <[email protected]> wrote:
>> Date: Mon, 25 Oct 2021 12:37:41 +0200 (CEST)
>> From: Mark Kettenis <[email protected]>
>>
>> > Date: Mon, 25 Oct 2021 12:01:11 +0200
>> > From: Patrick Wildt <[email protected]>
>> >
>> > 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