Message ID | 20200108161535.6141-4-hjl.tools@gmail.com |
---|---|
State | New |
Headers | show |
Series | V2 [PATCH 3/5] i386: Add _CET_ENDBR to assembly files without ENTRY | expand |
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 --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