diff mbox

V2 [PATCH 3/5] i386: Add _CET_ENDBR to assembly files without ENTRY

Message ID 20200108161535.6141-4-hjl.tools@gmail.com
State Committed
Headers show

Commit Message

H.J. Lu Jan. 8, 2020, 4:15 p.m. UTC
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 ++
 4 files changed, 9 insertions(+)

Comments

Adhemerval Zanella Jan. 9, 2020, 9:13 p.m. UTC | #1
On 08/01/2020 13:15, H.J. Lu wrote:
> 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 ++
>  4 files changed, 9 insertions(+)
> 
> diff --git a/sysdeps/i386/i386-mcount.S b/sysdeps/i386/i386-mcount.S
> index 9516265bcb..8b60bd20fe 100644
> --- a/sysdeps/i386/i386-mcount.S
> +++ b/sysdeps/i386/i386-mcount.S
> @@ -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

Ok, ENTRY will issue CALL_MCOUNT itself.

> diff --git a/sysdeps/i386/nptl/pthread_spin_lock.S b/sysdeps/i386/nptl/pthread_spin_lock.S
> index 5736c82078..7eb8f0e069 100644
> --- a/sysdeps/i386/nptl/pthread_spin_lock.S
> +++ b/sysdeps/i386/nptl/pthread_spin_lock.S
> @@ -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)

I think we can use ENTRY/END here instead.

> diff --git a/sysdeps/i386/nptl/pthread_spin_unlock.S b/sysdeps/i386/nptl/pthread_spin_unlock.S
> index e7757d0a03..dac730af1f 100644
> --- a/sysdeps/i386/nptl/pthread_spin_unlock.S
> +++ b/sysdeps/i386/nptl/pthread_spin_unlock.S
> @@ -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

Ditto.

> diff --git a/sysdeps/i386/pthread_spin_trylock.S b/sysdeps/i386/pthread_spin_trylock.S
> index dd08d38f8d..b3965a150f 100644
> --- a/sysdeps/i386/pthread_spin_trylock.S
> +++ b/sysdeps/i386/pthread_spin_trylock.S
> @@ -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
> 

Ditto.
diff mbox

Patch

diff --git a/sysdeps/i386/i386-mcount.S b/sysdeps/i386/i386-mcount.S
index 9516265bcb..8b60bd20fe 100644
--- a/sysdeps/i386/i386-mcount.S
+++ b/sysdeps/i386/i386-mcount.S
@@ -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
diff --git a/sysdeps/i386/nptl/pthread_spin_lock.S b/sysdeps/i386/nptl/pthread_spin_lock.S
index 5736c82078..7eb8f0e069 100644
--- a/sysdeps/i386/nptl/pthread_spin_lock.S
+++ b/sysdeps/i386/nptl/pthread_spin_lock.S
@@ -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)
diff --git a/sysdeps/i386/nptl/pthread_spin_unlock.S b/sysdeps/i386/nptl/pthread_spin_unlock.S
index e7757d0a03..dac730af1f 100644
--- a/sysdeps/i386/nptl/pthread_spin_unlock.S
+++ b/sysdeps/i386/nptl/pthread_spin_unlock.S
@@ -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
diff --git a/sysdeps/i386/pthread_spin_trylock.S b/sysdeps/i386/pthread_spin_trylock.S
index dd08d38f8d..b3965a150f 100644
--- a/sysdeps/i386/pthread_spin_trylock.S
+++ b/sysdeps/i386/pthread_spin_trylock.S
@@ -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