aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Tocar <ilya.tocar@intel.com>2015-10-20 14:52:08 +0300
committerKeith Randall <khr@golang.org>2015-10-20 15:48:49 +0000
commit7d2c6eb3f53d4fa54587ff52ecb739bd4b13f9ab (patch)
tree85e6a07df90bba7bd7900aa8cc57d2418579bcfd
parent77b1fef27e736764395633413fc13c14d8fed712 (diff)
downloadgo-7d2c6eb3f53d4fa54587ff52ecb739bd4b13f9ab.tar.xz
cmd/internal/obj/x86: align functions with trap instruction
Align functions with 0xCC (INT $3) - breakpoint instruction, instead of 0x00, which can disassemble into valid instruction. Change-Id: Ieda191886efc4aacb86f58bea1169fd1b3b57636 Reviewed-on: https://go-review.googlesource.com/16102 Run-TryBot: Ilya Tocar <ilya.tocar@intel.com> Reviewed-by: Gregory Shimansky <gregory.shimansky@intel.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
-rw-r--r--src/cmd/internal/obj/x86/asm6.go11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/cmd/internal/obj/x86/asm6.go b/src/cmd/internal/obj/x86/asm6.go
index f3be6cdfc7..8159e5934f 100644
--- a/src/cmd/internal/obj/x86/asm6.go
+++ b/src/cmd/internal/obj/x86/asm6.go
@@ -1754,7 +1754,16 @@ func span6(ctxt *obj.Link, s *obj.LSym) {
c = naclpad(ctxt, s, c, -c&31)
}
- c += -c & (FuncAlign - 1)
+ // Pad functions with trap instruction, to catch invalid jumps
+ if c&(FuncAlign-1) != 0 {
+ v = -c & (FuncAlign - 1)
+ obj.Symgrow(ctxt, s, int64(c)+int64(v))
+ for i := c; i < c+v; i++ {
+ // 0xCC is INT $3 - breakpoint instruction
+ s.P[i] = uint8(0xCC)
+ }
+ c += v
+ }
s.Size = int64(c)
if false { /* debug['a'] > 1 */