[4/4] Add endbr32 to i386 assembly functions

Submitted by Joao Moreira on Oct. 19, 2020, 10:43 p.m.

Details

Message ID 20201019224342.53303-5-joao.moreira@intel.com
State New
Series "Add CET IBT Support to MUSL"
Headers show

Commit Message

Joao Moreira Oct. 19, 2020, 10:43 p.m.
Include ibt.s file in i386 assembly files. This file contains the macro
definitions for endbr32 instructions and is placed in the beginning of each
assembly function. If CET_IBT is not defined for compilation, the macro is
defined to nothing and the generated binary is not affected.

Signed-off-by: Joao Moreira <joao.moreira@intel.com>
---
 crt/i386/crti.s                     |  4 ++++
 crt/i386/crtn.s                     |  4 ++++
 src/fenv/i386/fenv.s                | 13 +++++++++++--
 src/ldso/i386/dlsym.s               |  3 +++
 src/ldso/i386/tlsdesc.s             |  4 ++++
 src/math/i386/acos.s                |  2 ++
 src/math/i386/acosf.s               |  3 +++
 src/math/i386/acosl.s               |  3 +++
 src/math/i386/asin.s                |  3 +++
 src/math/i386/asinf.s               |  3 +++
 src/math/i386/asinl.s               |  3 +++
 src/math/i386/atan.s                |  3 +++
 src/math/i386/atan2.s               |  3 +++
 src/math/i386/atan2f.s              |  3 +++
 src/math/i386/atan2l.s              |  3 +++
 src/math/i386/atanf.s               |  3 +++
 src/math/i386/atanl.s               |  2 ++
 src/math/i386/exp_ld.s              |  4 ++++
 src/math/i386/expl.s                |  2 ++
 src/math/i386/floor.s               | 11 +++++++++++
 src/math/i386/hypot.s               |  3 +++
 src/math/i386/hypotf.s              |  3 +++
 src/math/i386/log.s                 |  3 +++
 src/math/i386/log10.s               |  3 +++
 src/math/i386/log10f.s              |  3 +++
 src/math/i386/log10l.s              |  3 +++
 src/math/i386/log1p.s               |  3 +++
 src/math/i386/log1pf.s              |  3 +++
 src/math/i386/log1pl.s              |  3 +++
 src/math/i386/log2.s                |  3 +++
 src/math/i386/log2f.s               |  3 +++
 src/math/i386/log2l.s               |  3 +++
 src/math/i386/logf.s                |  3 +++
 src/math/i386/logl.s                |  3 +++
 src/math/i386/remquo.s              |  5 +++++
 src/math/i386/scalbn.s              |  5 +++++
 src/math/i386/scalbnf.s             |  5 +++++
 src/math/i386/scalbnl.s             |  5 +++++
 src/process/i386/vfork.s            |  3 +++
 src/setjmp/i386/longjmp.s           |  3 +++
 src/setjmp/i386/setjmp.s            |  3 +++
 src/signal/i386/restore.s           |  4 ++++
 src/signal/i386/sigsetjmp.s         |  3 +++
 src/string/i386/memcpy.s            |  3 +++
 src/string/i386/memmove.s           |  3 +++
 src/string/i386/memset.s            |  7 +++++--
 src/thread/i386/__set_thread_area.s |  3 +++
 src/thread/i386/__unmapself.s       |  3 +++
 src/thread/i386/clone.s             |  3 +++
 src/thread/i386/syscall_cp.s        |  3 +++
 src/thread/i386/tls.s               |  3 +++
 51 files changed, 181 insertions(+), 4 deletions(-)

Patch hide | download patch | download mbox

diff --git a/crt/i386/crti.s b/crt/i386/crti.s
index d2682a20..9db4dd9c 100644
--- a/crt/i386/crti.s
+++ b/crt/i386/crti.s
@@ -1,9 +1,13 @@ 
+.include "ibt.s"
+
 .section .init
 .global _init
 _init:
+	ENDBRANCH32
 	sub $12,%esp
 
 .section .fini
 .global _fini
 _fini:
+	ENDBRANCH32
 	sub $12,%esp
diff --git a/crt/i386/crtn.s b/crt/i386/crtn.s
index f3b61e01..6010ec16 100644
--- a/crt/i386/crtn.s
+++ b/crt/i386/crtn.s
@@ -1,7 +1,11 @@ 
+.include "ibt.s"
+
 .section .init
+	ENDBRANCH32
 	add $12,%esp
 	ret
 
 .section .fini
+	ENDBRANCH32
 	add $12,%esp
 	ret
diff --git a/src/fenv/i386/fenv.s b/src/fenv/i386/fenv.s
index e7f7932a..1da507a5 100644
--- a/src/fenv/i386/fenv.s
+++ b/src/fenv/i386/fenv.s
@@ -1,8 +1,11 @@ 
+.include "ibt.s"
+
 .hidden __hwcap
 
 .global feclearexcept
 .type feclearexcept,@function
-feclearexcept:	
+feclearexcept:
+	ENDBRANCH32
 	mov 4(%esp),%ecx
 	and $0x3f,%ecx
 	fnstsw %ax
@@ -49,7 +52,8 @@  feclearexcept:
 
 .global feraiseexcept
 .type feraiseexcept,@function
-feraiseexcept:	
+feraiseexcept
+	ENDBRANCH32
 	mov 4(%esp),%eax
 	and $0x3f,%eax
 	sub $32,%esp
@@ -64,6 +68,7 @@  feraiseexcept:
 .hidden __fesetround
 .type __fesetround,@function
 __fesetround:
+	ENDBRANCH32
 	mov 4(%esp),%ecx
 	push %eax
 	xor %eax,%eax
@@ -88,6 +93,7 @@  __fesetround:
 .global fegetround
 .type fegetround,@function
 fegetround:
+	ENDBRANCH32
 	push %eax
 	fnstcw (%esp)
 	pop %eax
@@ -97,6 +103,7 @@  fegetround:
 .global fegetenv
 .type fegetenv,@function
 fegetenv:
+	ENDBRANCH32
 	mov 4(%esp),%ecx
 	xor %eax,%eax
 	fnstenv (%ecx)
@@ -116,6 +123,7 @@  fegetenv:
 .global fesetenv
 .type fesetenv,@function
 fesetenv:
+	ENDBRANCH32
 	mov 4(%esp),%ecx
 	xor %eax,%eax
 	inc %ecx
@@ -149,6 +157,7 @@  fesetenv:
 .global fetestexcept
 .type fetestexcept,@function
 fetestexcept:
+	ENDBRANCH32
 	mov 4(%esp),%ecx
 	and $0x3f,%ecx
 	fnstsw %ax
diff --git a/src/ldso/i386/dlsym.s b/src/ldso/i386/dlsym.s
index 097e30ce..5dfa182d 100644
--- a/src/ldso/i386/dlsym.s
+++ b/src/ldso/i386/dlsym.s
@@ -1,8 +1,11 @@ 
+.include "ibt.s"
+
 .text
 .global dlsym
 .hidden __dlsym
 .type dlsym,@function
 dlsym:
+	ENDBRANCH32
 	push (%esp)
 	push 12(%esp)
 	push 12(%esp)
diff --git a/src/ldso/i386/tlsdesc.s b/src/ldso/i386/tlsdesc.s
index 32c81766..09f6474e 100644
--- a/src/ldso/i386/tlsdesc.s
+++ b/src/ldso/i386/tlsdesc.s
@@ -1,8 +1,11 @@ 
+.include "ibt.s"
+
 .text
 .global __tlsdesc_static
 .hidden __tlsdesc_static
 .type __tlsdesc_static,@function
 __tlsdesc_static:
+	ENDBRANCH32
 	mov 4(%eax),%eax
 	ret
 
@@ -10,6 +13,7 @@  __tlsdesc_static:
 .hidden __tlsdesc_dynamic
 .type __tlsdesc_dynamic,@function
 __tlsdesc_dynamic:
+	ENDBRANCH32
 	mov 4(%eax),%eax
 	push %edx
 	mov %gs:4,%edx
diff --git a/src/math/i386/acos.s b/src/math/i386/acos.s
index af423a2f..f3a975b5 100644
--- a/src/math/i386/acos.s
+++ b/src/math/i386/acos.s
@@ -1,8 +1,10 @@ 
+.include "ibt.s"
 # use acos(x) = atan2(fabs(sqrt((1-x)*(1+x))), x)
 
 .global acos
 .type acos,@function
 acos:
+	ENDBRANCH32
 	fldl 4(%esp)
 	fld %st(0)
 	fld1
diff --git a/src/math/i386/acosf.s b/src/math/i386/acosf.s
index d2cdfdbf..697b1255 100644
--- a/src/math/i386/acosf.s
+++ b/src/math/i386/acosf.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global acosf
 .type acosf,@function
 acosf:
+	ENDBRANCH32
 	flds 4(%esp)
 	fld %st(0)
 	fld1
diff --git a/src/math/i386/acosl.s b/src/math/i386/acosl.s
index 599c8230..d455a9a9 100644
--- a/src/math/i386/acosl.s
+++ b/src/math/i386/acosl.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global acosl
 .type acosl,@function
 acosl:
+	ENDBRANCH32
 	fldt 4(%esp)
 	fld %st(0)
 	fld1
diff --git a/src/math/i386/asin.s b/src/math/i386/asin.s
index 2bc8356f..bec105d1 100644
--- a/src/math/i386/asin.s
+++ b/src/math/i386/asin.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global asin
 .type asin,@function
 asin:
+	ENDBRANCH32
 	fldl 4(%esp)
 	mov 8(%esp),%eax
 	add %eax,%eax
diff --git a/src/math/i386/asinf.s b/src/math/i386/asinf.s
index 05909753..28b59e61 100644
--- a/src/math/i386/asinf.s
+++ b/src/math/i386/asinf.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global asinf
 .type asinf,@function
 asinf:
+	ENDBRANCH32
 	flds 4(%esp)
 	mov 4(%esp),%eax
 	add %eax,%eax
diff --git a/src/math/i386/asinl.s b/src/math/i386/asinl.s
index e973fc85..d1a0a0ae 100644
--- a/src/math/i386/asinl.s
+++ b/src/math/i386/asinl.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global asinl
 .type asinl,@function
 asinl:
+	ENDBRANCH32
 	fldt 4(%esp)
 	fld %st(0)
 	fld1
diff --git a/src/math/i386/atan.s b/src/math/i386/atan.s
index 2c57f6b3..caf27242 100644
--- a/src/math/i386/atan.s
+++ b/src/math/i386/atan.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global atan
 .type atan,@function
 atan:
+	ENDBRANCH32
 	fldl 4(%esp)
 	mov 8(%esp),%eax
 	add %eax,%eax
diff --git a/src/math/i386/atan2.s b/src/math/i386/atan2.s
index 8bc441b1..fc8ac07a 100644
--- a/src/math/i386/atan2.s
+++ b/src/math/i386/atan2.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global atan2
 .type atan2,@function
 atan2:
+	ENDBRANCH32
 	fldl 4(%esp)
 	fldl 12(%esp)
 	fpatan
diff --git a/src/math/i386/atan2f.s b/src/math/i386/atan2f.s
index 3908c86d..6e52276a 100644
--- a/src/math/i386/atan2f.s
+++ b/src/math/i386/atan2f.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global atan2f
 .type atan2f,@function
 atan2f:
+	ENDBRANCH32
 	flds 4(%esp)
 	flds 8(%esp)
 	fpatan
diff --git a/src/math/i386/atan2l.s b/src/math/i386/atan2l.s
index adf6e10a..34640836 100644
--- a/src/math/i386/atan2l.s
+++ b/src/math/i386/atan2l.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global atan2l
 .type atan2l,@function
 atan2l:
+	ENDBRANCH32
 	fldt 4(%esp)
 	fldt 16(%esp)
 	fpatan
diff --git a/src/math/i386/atanf.s b/src/math/i386/atanf.s
index c2cbe2e0..a9064b2c 100644
--- a/src/math/i386/atanf.s
+++ b/src/math/i386/atanf.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global atanf
 .type atanf,@function
 atanf:
+	ENDBRANCH32
 	flds 4(%esp)
 	mov 4(%esp),%eax
 	add %eax,%eax
diff --git a/src/math/i386/atanl.s b/src/math/i386/atanl.s
index c508bc46..4200304f 100644
--- a/src/math/i386/atanl.s
+++ b/src/math/i386/atanl.s
@@ -1,6 +1,8 @@ 
+.include "ibt.s"
 .global atanl
 .type atanl,@function
 atanl:
+	ENDBRANCH32
 	fldt 4(%esp)
 	fld1
 	fpatan
diff --git a/src/math/i386/exp_ld.s b/src/math/i386/exp_ld.s
index 99cba01f..93256fac 100644
--- a/src/math/i386/exp_ld.s
+++ b/src/math/i386/exp_ld.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global expm1l
 .type expm1l,@function
 expm1l:
+	ENDBRANCH32
 	fldt 4(%esp)
 	fldl2e
 	fmulp
@@ -38,6 +41,7 @@  expm1l:
 .type exp2l,@function
 exp2l:
 __exp2l:
+	ENDBRANCH32
 	fldt 4(%esp)
 1:	sub $12,%esp
 	fld %st(0)
diff --git a/src/math/i386/expl.s b/src/math/i386/expl.s
index b5124e8f..6e6b8814 100644
--- a/src/math/i386/expl.s
+++ b/src/math/i386/expl.s
@@ -1,3 +1,4 @@ 
+.include "ibt.s"
 # exp(x) = 2^hi + 2^hi (2^lo - 1)
 # where hi+lo = log2e*x with 128bit precision
 # exact log2e*x calculation depends on nearest rounding mode
@@ -6,6 +7,7 @@ 
 .global expl
 .type expl,@function
 expl:
+	ENDBRANCH32
 	fldt 4(%esp)
 
 		# interesting case: 0x1p-32 <= |x| < 16384
diff --git a/src/math/i386/floor.s b/src/math/i386/floor.s
index 46ba88db..d5360a95 100644
--- a/src/math/i386/floor.s
+++ b/src/math/i386/floor.s
@@ -1,18 +1,23 @@ 
+.include "ibt.s"
+
 .global floorf
 .type floorf,@function
 floorf:
+	ENDBRANCH32
 	flds 4(%esp)
 	jmp 1f
 
 .global floorl
 .type floorl,@function
 floorl:
+	ENDBRANCH32
 	fldt 4(%esp)
 	jmp 1f
 
 .global floor
 .type floor,@function
 floor:
+	ENDBRANCH32
 	fldl 4(%esp)
 1:	mov $0x7,%al
 1:	fstcw 4(%esp)
@@ -27,6 +32,7 @@  floor:
 .global ceil
 .type ceil,@function
 ceil:
+	ENDBRANCH32
 	fldl 4(%esp)
 	mov $0xb,%al
 	jmp 1b
@@ -34,6 +40,7 @@  ceil:
 .global ceilf
 .type ceilf,@function
 ceilf:
+	ENDBRANCH32
 	flds 4(%esp)
 	mov $0xb,%al
 	jmp 1b
@@ -41,6 +48,7 @@  ceilf:
 .global ceill
 .type ceill,@function
 ceill:
+	ENDBRANCH32
 	fldt 4(%esp)
 	mov $0xb,%al
 	jmp 1b
@@ -48,6 +56,7 @@  ceill:
 .global trunc
 .type trunc,@function
 trunc:
+	ENDBRANCH32
 	fldl 4(%esp)
 	mov $0xf,%al
 	jmp 1b
@@ -55,6 +64,7 @@  trunc:
 .global truncf
 .type truncf,@function
 truncf:
+	ENDBRANCH32
 	flds 4(%esp)
 	mov $0xf,%al
 	jmp 1b
@@ -62,6 +72,7 @@  truncf:
 .global truncl
 .type truncl,@function
 truncl:
+	ENDBRANCH32
 	fldt 4(%esp)
 	mov $0xf,%al
 	jmp 1b
diff --git a/src/math/i386/hypot.s b/src/math/i386/hypot.s
index 299c2e18..c7859075 100644
--- a/src/math/i386/hypot.s
+++ b/src/math/i386/hypot.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global hypot
 .type hypot,@function
 hypot:
+	ENDBRANCH32
 	mov 8(%esp),%eax
 	mov 16(%esp),%ecx
 	add %eax,%eax
diff --git a/src/math/i386/hypotf.s b/src/math/i386/hypotf.s
index 068935e2..bf3162d7 100644
--- a/src/math/i386/hypotf.s
+++ b/src/math/i386/hypotf.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global hypotf
 .type hypotf,@function
 hypotf:
+	ENDBRANCH32
 	mov 4(%esp),%eax
 	mov 8(%esp),%ecx
 	add %eax,%eax
diff --git a/src/math/i386/log.s b/src/math/i386/log.s
index 08c59924..fadd46e8 100644
--- a/src/math/i386/log.s
+++ b/src/math/i386/log.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global log
 .type log,@function
 log:
+	ENDBRANCH32
 	fldln2
 	fldl 4(%esp)
 	fyl2x
diff --git a/src/math/i386/log10.s b/src/math/i386/log10.s
index 120e91ec..3facf5fc 100644
--- a/src/math/i386/log10.s
+++ b/src/math/i386/log10.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global log10
 .type log10,@function
 log10:
+	ENDBRANCH32
 	fldlg2
 	fldl 4(%esp)
 	fyl2x
diff --git a/src/math/i386/log10f.s b/src/math/i386/log10f.s
index b055493a..70b0c447 100644
--- a/src/math/i386/log10f.s
+++ b/src/math/i386/log10f.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global log10f
 .type log10f,@function
 log10f:
+	ENDBRANCH32
 	fldlg2
 	flds 4(%esp)
 	fyl2x
diff --git a/src/math/i386/log10l.s b/src/math/i386/log10l.s
index aaa44f2f..663227fd 100644
--- a/src/math/i386/log10l.s
+++ b/src/math/i386/log10l.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global log10l
 .type log10l,@function
 log10l:
+	ENDBRANCH32
 	fldlg2
 	fldt 4(%esp)
 	fyl2x
diff --git a/src/math/i386/log1p.s b/src/math/i386/log1p.s
index f3c95f83..681bda68 100644
--- a/src/math/i386/log1p.s
+++ b/src/math/i386/log1p.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global log1p
 .type log1p,@function
 log1p:
+	ENDBRANCH32
 	mov 8(%esp),%eax
 	fldln2
 	and $0x7fffffff,%eax
diff --git a/src/math/i386/log1pf.s b/src/math/i386/log1pf.s
index 9f13d95f..7bc9f87e 100644
--- a/src/math/i386/log1pf.s
+++ b/src/math/i386/log1pf.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global log1pf
 .type log1pf,@function
 log1pf:
+	ENDBRANCH32
 	mov 4(%esp),%eax
 	fldln2
 	and $0x7fffffff,%eax
diff --git a/src/math/i386/log1pl.s b/src/math/i386/log1pl.s
index a048ab6b..5e549af6 100644
--- a/src/math/i386/log1pl.s
+++ b/src/math/i386/log1pl.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global log1pl
 .type log1pl,@function
 log1pl:
+	ENDBRANCH32
 	mov 10(%esp),%eax
 	fldln2
 	and $0x7fffffff,%eax
diff --git a/src/math/i386/log2.s b/src/math/i386/log2.s
index 7eff0b61..c50525bd 100644
--- a/src/math/i386/log2.s
+++ b/src/math/i386/log2.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global log2
 .type log2,@function
 log2:
+	ENDBRANCH32
 	fld1
 	fldl 4(%esp)
 	fyl2x
diff --git a/src/math/i386/log2f.s b/src/math/i386/log2f.s
index b32fa2f7..06cf0063 100644
--- a/src/math/i386/log2f.s
+++ b/src/math/i386/log2f.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global log2f
 .type log2f,@function
 log2f:
+	ENDBRANCH32
 	fld1
 	flds 4(%esp)
 	fyl2x
diff --git a/src/math/i386/log2l.s b/src/math/i386/log2l.s
index c58f56fd..6d9d5217 100644
--- a/src/math/i386/log2l.s
+++ b/src/math/i386/log2l.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global log2l
 .type log2l,@function
 log2l:
+	ENDBRANCH32
 	fld1
 	fldt 4(%esp)
 	fyl2x
diff --git a/src/math/i386/logf.s b/src/math/i386/logf.s
index 4d0346a4..e846d3f6 100644
--- a/src/math/i386/logf.s
+++ b/src/math/i386/logf.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global logf
 .type logf,@function
 logf:
+	ENDBRANCH32
 	fldln2
 	flds 4(%esp)
 	fyl2x
diff --git a/src/math/i386/logl.s b/src/math/i386/logl.s
index d4e3339b..1cb52139 100644
--- a/src/math/i386/logl.s
+++ b/src/math/i386/logl.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global logl
 .type logl,@function
 logl:
+	ENDBRANCH32
 	fldln2
 	fldt 4(%esp)
 	fyl2x
diff --git a/src/math/i386/remquo.s b/src/math/i386/remquo.s
index 598e7549..6bb69298 100644
--- a/src/math/i386/remquo.s
+++ b/src/math/i386/remquo.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global remquof
 .type remquof,@function
 remquof:
+	ENDBRANCH32
 	mov 12(%esp),%ecx
 	flds 8(%esp)
 	flds 4(%esp)
@@ -11,6 +14,7 @@  remquof:
 .global remquol
 .type remquol,@function
 remquol:
+	ENDBRANCH32
 	mov 28(%esp),%ecx
 	fldt 16(%esp)
 	fldt 4(%esp)
@@ -21,6 +25,7 @@  remquol:
 .global remquo
 .type remquo,@function
 remquo:
+	ENDBRANCH32
 	mov 20(%esp),%ecx
 	fldl 12(%esp)
 	fldl 4(%esp)
diff --git a/src/math/i386/scalbn.s b/src/math/i386/scalbn.s
index 8bf302f2..188f2ede 100644
--- a/src/math/i386/scalbn.s
+++ b/src/math/i386/scalbn.s
@@ -1,16 +1,21 @@ 
+.include "ibt.s"
+
 .global ldexp
 .type ldexp,@function
 ldexp:
+	ENDBRANCH32
 	nop
 
 .global scalbln
 .type scalbln,@function
 scalbln:
+	ENDBRANCH32
 	nop
 
 .global scalbn
 .type scalbn,@function
 scalbn:
+	ENDBRANCH32
 	mov 12(%esp),%eax
 	add $0x3ffe,%eax
 	cmp $0x7ffd,%eax
diff --git a/src/math/i386/scalbnf.s b/src/math/i386/scalbnf.s
index 9cb9ef5f..5d23bbe1 100644
--- a/src/math/i386/scalbnf.s
+++ b/src/math/i386/scalbnf.s
@@ -1,16 +1,21 @@ 
+.include "ibt.s"
+
 .global ldexpf
 .type ldexpf,@function
 ldexpf:
+	ENDBRANCH32
 	nop
 
 .global scalblnf
 .type scalblnf,@function
 scalblnf:
+	ENDBRANCH32
 	nop
 
 .global scalbnf
 .type scalbnf,@function
 scalbnf:
+	ENDBRANCH32
 	mov 8(%esp),%eax
 	add $0x3fe,%eax
 	cmp $0x7fd,%eax
diff --git a/src/math/i386/scalbnl.s b/src/math/i386/scalbnl.s
index 54414c2e..5f1d78de 100644
--- a/src/math/i386/scalbnl.s
+++ b/src/math/i386/scalbnl.s
@@ -1,16 +1,21 @@ 
+.include "ibt.s"
+
 .global ldexpl
 .type ldexpl,@function
 ldexpl:
+	ENDBRANCH32
 	nop
 
 .global scalblnl
 .type scalblnl,@function
 scalblnl:
+	ENDBRANCH32
 	nop
 
 .global scalbnl
 .type scalbnl,@function
 scalbnl:
+	ENDBRANCH32
 	mov 16(%esp),%eax
 	add $0x3ffe,%eax
 	cmp $0x7ffd,%eax
diff --git a/src/process/i386/vfork.s b/src/process/i386/vfork.s
index 3d0e6d6b..a055623a 100644
--- a/src/process/i386/vfork.s
+++ b/src/process/i386/vfork.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global vfork
 .type vfork,@function
 vfork:
+	ENDBRANCH32
 	pop %edx
 	mov $190,%eax
 	int $128
diff --git a/src/setjmp/i386/longjmp.s b/src/setjmp/i386/longjmp.s
index 8188f06b..f0b54db4 100644
--- a/src/setjmp/i386/longjmp.s
+++ b/src/setjmp/i386/longjmp.s
@@ -1,9 +1,12 @@ 
+.include "ibt.s"
+
 .global _longjmp
 .global longjmp
 .type _longjmp,@function
 .type longjmp,@function
 _longjmp:
 longjmp:
+	ENDBRANCH32
 	mov  4(%esp),%edx
 	mov  8(%esp),%eax
 	cmp       $1,%eax
diff --git a/src/setjmp/i386/setjmp.s b/src/setjmp/i386/setjmp.s
index 4d19cf87..76cd58be 100644
--- a/src/setjmp/i386/setjmp.s
+++ b/src/setjmp/i386/setjmp.s
@@ -1,3 +1,5 @@ 
+.include "ibt.s"
+
 .global ___setjmp
 .hidden ___setjmp
 .global __setjmp
@@ -10,6 +12,7 @@  ___setjmp:
 __setjmp:
 _setjmp:
 setjmp:
+	ENDBRANCH32
 	mov 4(%esp), %eax
 	mov    %ebx, (%eax)
 	mov    %esi, 4(%eax)
diff --git a/src/signal/i386/restore.s b/src/signal/i386/restore.s
index ccc94307..6f668b9a 100644
--- a/src/signal/i386/restore.s
+++ b/src/signal/i386/restore.s
@@ -1,7 +1,10 @@ 
+.include "ibt.s"
+
 .global __restore
 .hidden __restore
 .type __restore,@function
 __restore:
+	ENDBRANCH32
 	popl %eax
 	movl $119, %eax
 	int $0x80
@@ -10,5 +13,6 @@  __restore:
 .hidden __restore_rt
 .type __restore_rt,@function
 __restore_rt:
+	ENDBRANCH32
 	movl $173, %eax
 	int $0x80
diff --git a/src/signal/i386/sigsetjmp.s b/src/signal/i386/sigsetjmp.s
index 690b251c..ed69432c 100644
--- a/src/signal/i386/sigsetjmp.s
+++ b/src/signal/i386/sigsetjmp.s
@@ -1,9 +1,12 @@ 
+.include "ibt.s"
+
 .global sigsetjmp
 .global __sigsetjmp
 .type sigsetjmp,@function
 .type __sigsetjmp,@function
 sigsetjmp:
 __sigsetjmp:
+	ENDBRANCH32
 	mov 8(%esp),%ecx
 	jecxz 1f
 
diff --git a/src/string/i386/memcpy.s b/src/string/i386/memcpy.s
index 0608dd83..9650d880 100644
--- a/src/string/i386/memcpy.s
+++ b/src/string/i386/memcpy.s
@@ -1,8 +1,11 @@ 
+.include "ibt.s"
+
 .global memcpy
 .global __memcpy_fwd
 .hidden __memcpy_fwd
 .type memcpy,@function
 memcpy:
+	ENDBRANCH32
 __memcpy_fwd:
 	push %esi
 	push %edi
diff --git a/src/string/i386/memmove.s b/src/string/i386/memmove.s
index 2a6a504b..36dfd2c9 100644
--- a/src/string/i386/memmove.s
+++ b/src/string/i386/memmove.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global memmove
 .type memmove,@function
 memmove:
+	ENDBRANCH32
 	mov 4(%esp),%eax
 	sub 8(%esp),%eax
 	cmp 12(%esp),%eax
diff --git a/src/string/i386/memset.s b/src/string/i386/memset.s
index d00422c4..3067fc63 100644
--- a/src/string/i386/memset.s
+++ b/src/string/i386/memset.s
@@ -1,6 +1,9 @@ 
+.include "ibt.s"
+
 .global memset
 .type memset,@function
 memset:
+	ENDBRANCH32
 	mov 12(%esp),%ecx
 	cmp $62,%ecx
 	ja 2f
@@ -47,7 +50,7 @@  memset:
 	mov %edx,(-1-2-4-8-8)(%eax,%ecx)
 	mov %edx,(-1-2-4-8-4)(%eax,%ecx)
 
-1:	ret 	
+1:	ret
 
 2:	movzbl 8(%esp),%eax
 	mov %edi,12(%esp)
@@ -63,7 +66,7 @@  memset:
 	mov 4(%esp),%eax
 	mov 12(%esp),%edi
 	ret
-	
+
 2:	xor %edx,%edx
 	sub %edi,%edx
 	and $15,%edx
diff --git a/src/thread/i386/__set_thread_area.s b/src/thread/i386/__set_thread_area.s
index aa6852be..5bddb956 100644
--- a/src/thread/i386/__set_thread_area.s
+++ b/src/thread/i386/__set_thread_area.s
@@ -1,8 +1,11 @@ 
+.include "ibt.s"
+
 .text
 .global __set_thread_area
 .hidden __set_thread_area
 .type   __set_thread_area,@function
 __set_thread_area:
+	ENDBRANCH32
 	push %ebx
 	push $0x51
 	push $0xfffff
diff --git a/src/thread/i386/__unmapself.s b/src/thread/i386/__unmapself.s
index d6569594..0b1feb2e 100644
--- a/src/thread/i386/__unmapself.s
+++ b/src/thread/i386/__unmapself.s
@@ -1,7 +1,10 @@ 
+.include "ibt.s"
+
 .text
 .global __unmapself
 .type   __unmapself,@function
 __unmapself:
+	ENDBRANCH32
 	movl $91,%eax
 	movl 4(%esp),%ebx
 	movl 8(%esp),%ecx
diff --git a/src/thread/i386/clone.s b/src/thread/i386/clone.s
index e237d3c6..79050643 100644
--- a/src/thread/i386/clone.s
+++ b/src/thread/i386/clone.s
@@ -1,8 +1,11 @@ 
+.include "ibt.s"
+
 .text
 .global __clone
 .hidden __clone
 .type   __clone,@function
 __clone:
+	ENDBRANCH32
 	push %ebp
 	mov %esp,%ebp
 	push %ebx
diff --git a/src/thread/i386/syscall_cp.s b/src/thread/i386/syscall_cp.s
index 7dce1eb3..7a5f0f98 100644
--- a/src/thread/i386/syscall_cp.s
+++ b/src/thread/i386/syscall_cp.s
@@ -1,3 +1,5 @@ 
+.include "ibt.s"
+
 .text
 .global __cp_begin
 .hidden __cp_begin
@@ -10,6 +12,7 @@ 
 .hidden __syscall_cp_asm
 .type   __syscall_cp_asm,@function
 __syscall_cp_asm:
+	ENDBRANCH32
 	mov 4(%esp),%ecx
 	pushl %ebx
 	pushl %esi
diff --git a/src/thread/i386/tls.s b/src/thread/i386/tls.s
index 6e4c4cb9..fdd2278a 100644
--- a/src/thread/i386/tls.s
+++ b/src/thread/i386/tls.s
@@ -1,7 +1,10 @@ 
+.include "ibt.s"
+
 .text
 .global ___tls_get_addr
 .type ___tls_get_addr,@function
 ___tls_get_addr:
+	ENDBRANCH32
 	mov %gs:4,%edx
 	mov (%eax),%ecx
 	mov 4(%eax),%eax