mirror of
https://github.com/golang/go
synced 2024-11-19 23:14:47 -07:00
519474451a
This is a subset of https://golang.org/cl/20022 with only the copyright header lines, so the next CL will be smaller and more reviewable. Go policy has been single space after periods in comments for some time. The copyright header template at: https://golang.org/doc/contribute.html#copyright also uses a single space. Make them all consistent. Change-Id: Icc26c6b8495c3820da6b171ca96a74701b4a01b0 Reviewed-on: https://go-review.googlesource.com/20111 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
77 lines
2.0 KiB
ArmAsm
77 lines
2.0 KiB
ArmAsm
// Copyright 2015 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build msan
|
|
|
|
#include "go_asm.h"
|
|
#include "go_tls.h"
|
|
#include "funcdata.h"
|
|
#include "textflag.h"
|
|
|
|
// This is like race_amd64.s, but for the msan calls.
|
|
// See race_amd64.s for detailed comments.
|
|
|
|
#ifdef GOOS_windows
|
|
#define RARG0 CX
|
|
#define RARG1 DX
|
|
#define RARG2 R8
|
|
#define RARG3 R9
|
|
#else
|
|
#define RARG0 DI
|
|
#define RARG1 SI
|
|
#define RARG2 DX
|
|
#define RARG3 CX
|
|
#endif
|
|
|
|
// func runtime·domsanread(addr unsafe.Pointer, sz uintptr)
|
|
// Called from msanread.
|
|
TEXT runtime·domsanread(SB), NOSPLIT, $0-16
|
|
MOVQ addr+0(FP), RARG0
|
|
MOVQ size+8(FP), RARG1
|
|
// void __msan_read_go(void *addr, uintptr_t sz);
|
|
MOVQ $__msan_read_go(SB), AX
|
|
JMP msancall<>(SB)
|
|
|
|
// func runtime·msanwrite(addr unsafe.Pointer, sz uintptr)
|
|
// Called from instrumented code.
|
|
TEXT runtime·msanwrite(SB), NOSPLIT, $0-16
|
|
MOVQ addr+0(FP), RARG0
|
|
MOVQ size+8(FP), RARG1
|
|
// void __msan_write_go(void *addr, uintptr_t sz);
|
|
MOVQ $__msan_write_go(SB), AX
|
|
JMP msancall<>(SB)
|
|
|
|
// func runtime·msanmalloc(addr unsafe.Pointer, sz uintptr)
|
|
TEXT runtime·msanmalloc(SB), NOSPLIT, $0-16
|
|
MOVQ addr+0(FP), RARG0
|
|
MOVQ size+8(FP), RARG1
|
|
// void __msan_malloc_go(void *addr, uintptr_t sz);
|
|
MOVQ $__msan_malloc_go(SB), AX
|
|
JMP msancall<>(SB)
|
|
|
|
// func runtime·msanfree(addr unsafe.Pointer, sz uintptr)
|
|
TEXT runtime·msanfree(SB), NOSPLIT, $0-16
|
|
MOVQ addr+0(FP), RARG0
|
|
MOVQ size+8(FP), RARG1
|
|
// void __msan_free_go(void *addr, uintptr_t sz);
|
|
MOVQ $__msan_free_go(SB), AX
|
|
JMP msancall<>(SB)
|
|
|
|
// Switches SP to g0 stack and calls (AX). Arguments already set.
|
|
TEXT msancall<>(SB), NOSPLIT, $0-0
|
|
get_tls(R12)
|
|
MOVQ g(R12), R14
|
|
MOVQ g_m(R14), R13
|
|
// Switch to g0 stack.
|
|
MOVQ SP, R12 // callee-saved, preserved across the CALL
|
|
MOVQ m_g0(R13), R10
|
|
CMPQ R10, R14
|
|
JE call // already on g0
|
|
MOVQ (g_sched+gobuf_sp)(R10), SP
|
|
call:
|
|
ANDQ $~15, SP // alignment for gcc ABI
|
|
CALL AX
|
|
MOVQ R12, SP
|
|
RET
|