[3/4] i386: Add _CET_ENDBR to assembly files without ENTRY
Commit Message
Add _CET_ENDBR to i386 assembly files which don't use ENTRY to add
ENDBR32 at function entries when CET is enabled.
---
sysdeps/i386/i386-mcount.S | 2 ++
sysdeps/i386/nptl/pthread_spin_lock.S | 2 ++
sysdeps/i386/nptl/pthread_spin_unlock.S | 3 +++
sysdeps/i386/pthread_spin_trylock.S | 2 ++
sysdeps/unix/sysv/linux/i386/_exit.S | 1 +
5 files changed, 10 insertions(+)
Comments
On 10/12/2019 17:47, H.J. Lu wrote:
> diff --git a/sysdeps/unix/sysv/linux/i386/_exit.S b/sysdeps/unix/sysv/linux/i386/_exit.S
> index d59c127501..a21d5f69b3 100644
> --- a/sysdeps/unix/sysv/linux/i386/_exit.S
> +++ b/sysdeps/unix/sysv/linux/i386/_exit.S
> @@ -21,6 +21,7 @@
> .type _exit,@function
> .global _exit
> _exit:
> + _CET_ENDBR
> movl 4(%esp), %ebx
>
> /* Try the new syscall first. */
>
Do we still need this for i386? I think the generic implementation
should suffice since __NR_exit_group is always support and
i386 does define ABORT_INSTRUCTION.
On Tue, Jan 7, 2020 at 2:05 PM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 10/12/2019 17:47, H.J. Lu wrote:
> > diff --git a/sysdeps/unix/sysv/linux/i386/_exit.S b/sysdeps/unix/sysv/linux/i386/_exit.S
> > index d59c127501..a21d5f69b3 100644
> > --- a/sysdeps/unix/sysv/linux/i386/_exit.S
> > +++ b/sysdeps/unix/sysv/linux/i386/_exit.S
> > @@ -21,6 +21,7 @@
> > .type _exit,@function
> > .global _exit
> > _exit:
> > + _CET_ENDBR
> > movl 4(%esp), %ebx
> >
> > /* Try the new syscall first. */
> >
>
> Do we still need this for i386? I think the generic implementation
> should suffice since __NR_exit_group is always support and
> i386 does define ABORT_INSTRUCTION.
_exit.S can re removed.
@@ -30,6 +30,7 @@
.type C_SYMBOL_NAME(_mcount), @function
.align ALIGNARG(4)
C_LABEL(_mcount)
+ _CET_ENDBR
/* Save the caller-clobbered registers. */
pushl %eax
pushl %ecx
@@ -58,6 +59,7 @@ weak_alias (_mcount, mcount)
.type C_SYMBOL_NAME(__fentry__), @function
.align ALIGNARG(4)
C_LABEL(__fentry__)
+ _CET_ENDBR
/* Save the caller-clobbered registers. */
pushl %eax
pushl %ecx
@@ -15,12 +15,14 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+#include <sysdep.h>
#include <lowlevellock.h>
.globl pthread_spin_lock
.type pthread_spin_lock,@function
.align 16
pthread_spin_lock:
+ _CET_ENDBR
mov 4(%esp), %eax
1: LOCK
decl 0(%eax)
@@ -16,10 +16,13 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+#include <sysdep.h>
+
.globl pthread_spin_unlock
.type pthread_spin_unlock,@function
.align 16
pthread_spin_unlock:
+ _CET_ENDBR
movl 4(%esp), %eax
movl $1, (%eax)
xorl %eax, %eax
@@ -16,6 +16,7 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+#include <sysdep.h>
#include <pthread-errnos.h>
@@ -29,6 +30,7 @@
.type pthread_spin_trylock,@function
.align 16
pthread_spin_trylock:
+ _CET_ENDBR
movl 4(%esp), %edx
movl $1, %eax
xorl %ecx, %ecx
@@ -21,6 +21,7 @@
.type _exit,@function
.global _exit
_exit:
+ _CET_ENDBR
movl 4(%esp), %ebx
/* Try the new syscall first. */