sysAlloc is the only mem function called from Go.
LGTM=iant, khr
R=golang-codereviews, khr, 0intro, iant
CC=dvyukov, golang-codereviews, r
https://golang.org/cl/
139210043
#include "defs_GOOS_GOARCH.h"
#include "os_GOOS.h"
#include "malloc.h"
+#include "../../cmd/ld/textflag.h"
+#pragma textflag NOSPLIT
void*
runtime·sysAlloc(uintptr n, uint64 *stat)
{
#include "defs_GOOS_GOARCH.h"
#include "os_GOOS.h"
#include "malloc.h"
+#include "textflag.h"
enum
{
ENOMEM = 12,
};
+#pragma textflag NOSPLIT
void*
runtime·sysAlloc(uintptr n, uint64 *stat)
{
#include "defs_GOOS_GOARCH.h"
#include "os_GOOS.h"
#include "malloc.h"
+#include "textflag.h"
enum
{
ENOMEM = 12,
};
+#pragma textflag NOSPLIT
void*
runtime·sysAlloc(uintptr n, uint64 *stat)
{
#include "defs_GOOS_GOARCH.h"
#include "os_GOOS.h"
#include "malloc.h"
+#include "../../cmd/ld/textflag.h"
enum
{
return p;
}
+#pragma textflag NOSPLIT
void*
runtime·sysAlloc(uintptr n, uint64 *stat)
{
#include "defs_GOOS_GOARCH.h"
#include "os_GOOS.h"
#include "malloc.h"
+#include "../../cmd/ld/textflag.h"
enum
{
Debug = 0,
};
+#pragma textflag NOSPLIT
void*
runtime·sysAlloc(uintptr n, uint64 *stat)
{
#include "defs_GOOS_GOARCH.h"
#include "os_GOOS.h"
#include "malloc.h"
+#include "../../cmd/ld/textflag.h"
enum
{
ENOMEM = 12,
};
+#pragma textflag NOSPLIT
void*
runtime·sysAlloc(uintptr n, uint64 *stat)
{
#include "defs_GOOS_GOARCH.h"
#include "os_GOOS.h"
#include "malloc.h"
+#include "../../cmd/ld/textflag.h"
enum
{
ENOMEM = 12,
};
+#pragma textflag NOSPLIT
void*
runtime·sysAlloc(uintptr n, uint64 *stat)
{
#include "arch_GOARCH.h"
#include "malloc.h"
#include "os_GOOS.h"
+#include "../../cmd/ld/textflag.h"
extern byte runtime·end[];
static byte *bloc = { runtime·end };
}
bloc = (byte*)bl + nbytes;
runtime·unlock(&memlock);
- return (void*)bl;
-
+ return (void*)bl;
}
-void*
-runtime·sysAlloc(uintptr nbytes, uint64 *stat)
+static void
+sysalloc(void)
{
+ uintptr nbytes;
+ uint64 *stat;
void *p;
+ nbytes = g->m->scalararg[0];
+ stat = g->m->ptrarg[0];
+ g->m->scalararg[0] = 0;
+ g->m->ptrarg[0] = nil;
+
p = brk(nbytes);
if(p != nil)
runtime·xadd64(stat, nbytes);
+
+ g->m->ptrarg[0] = p;
+}
+
+#pragma textflag NOSPLIT
+void*
+runtime·sysAlloc(uintptr nbytes, uint64 *stat)
+{
+ void (*fn)(void);
+ void *p;
+
+ g->m->scalararg[0] = nbytes;
+ g->m->ptrarg[0] = stat;
+ fn = sysalloc;
+ runtime·onM(&fn);
+ p = g->m->ptrarg[0];
+ g->m->ptrarg[0] = nil;
return p;
}
#include "defs_GOOS_GOARCH.h"
#include "os_GOOS.h"
#include "malloc.h"
+#include "../../cmd/ld/textflag.h"
enum
{
ENOMEM = 12,
};
+#pragma textflag NOSPLIT
void*
runtime·sysAlloc(uintptr n, uint64 *stat)
{
#include "os_GOOS.h"
#include "defs_GOOS_GOARCH.h"
#include "malloc.h"
+#include "../../cmd/ld/textflag.h"
enum {
MEM_COMMIT = 0x1000,
extern void *runtime·VirtualFree;
extern void *runtime·VirtualProtect;
+#pragma textflag NOSPLIT
void*
runtime·sysAlloc(uintptr n, uint64 *stat)
{