@@ -1,4 +1,4 @@
-a070de932857
+c031aa767edf
The first line of this file holds the Mercurial revision number of the
last merge done from the master library sources.
@@ -221,6 +221,7 @@
toolexeclibgoexpdir = $(toolexeclibgodir)/exp
toolexeclibgoexp_DATA = \
+ exp/cookiejar.gox \
exp/ebnf.gox \
exp/html.gox \
$(exp_inotify_gox) \
@@ -251,6 +252,7 @@
go/ast.gox \
go/build.gox \
go/doc.gox \
+ go/format.gox \
go/parser.gox \
go/printer.gox \
go/scanner.gox \
@@ -1194,6 +1196,9 @@
go/encoding/xml/typeinfo.go \
go/encoding/xml/xml.go
+go_exp_cookiejar_files = \
+ go/exp/cookiejar/jar.go \
+ go/exp/cookiejar/storage.go
go_exp_ebnf_files = \
go/exp/ebnf/ebnf.go \
go/exp/ebnf/parser.go
@@ -1284,6 +1289,8 @@
go/go/doc/filter.go \
go/go/doc/reader.go \
go/go/doc/synopsis.go
+go_go_format_files = \
+ go/go/format/format.go
go_go_parser_files = \
go/go/parser/interface.go \
go/go/parser/parser.go
@@ -1384,6 +1391,7 @@
go_mime_multipart_files = \
go/mime/multipart/formdata.go \
go/mime/multipart/multipart.go \
+ go/mime/multipart/quotedprintable.go \
go/mime/multipart/writer.go
go_net_http_files = \
@@ -1456,6 +1464,7 @@
go_os_user_files = \
go/os/user/user.go \
+ go/os/user/lookup.go \
go/os/user/lookup_unix.go
go_path_filepath_files = \
@@ -1822,6 +1831,7 @@
encoding/json.lo \
encoding/pem.lo \
encoding/xml.lo \
+ exp/cookiejar.lo \
exp/ebnf.lo \
exp/html.lo \
exp/html/atom.lo \
@@ -1836,6 +1846,7 @@
go/ast.lo \
go/build.lo \
go/doc.lo \
+ go/format.lo \
go/parser.lo \
go/printer.lo \
go/scanner.lo \
@@ -2658,6 +2669,15 @@
@$(CHECK)
.PHONY: encoding/xml/check
+@go_include@ exp/cookiejar.lo.dep
+exp/cookiejar.lo.dep: $(go_exp_cookiejar_files)
+ $(BUILDDEPS)
+exp/cookiejar.lo: $(go_exp_cookiejar_files)
+ $(BUILDPACKAGE)
+exp/cookiejar/check: $(CHECK_DEPS)
+ @$(CHECK)
+.PHONY: exp/cookiejar/check
+
@go_include@ exp/ebnf.lo.dep
exp/ebnf.lo.dep: $(go_exp_ebnf_files)
$(BUILDDEPS)
@@ -2802,6 +2822,15 @@
@$(CHECK)
.PHONY: go/doc/check
+@go_include@ go/format.lo.dep
+go/format.lo.dep: $(go_go_format_files)
+ $(BUILDDEPS)
+go/format.lo: $(go_go_format_files)
+ $(BUILDPACKAGE)
+go/format/check: $(CHECK_DEPS)
+ @$(CHECK)
+.PHONY: go/format/check
+
@go_include@ go/parser.lo.dep
go/parser.lo.dep: $(go_go_parser_files)
$(BUILDDEPS)
@@ -3450,6 +3479,8 @@
encoding/xml.gox: encoding/xml.lo
$(BUILDGOX)
+exp/cookiejar.gox: exp/cookiejar.lo
+ $(BUILDGOX)
exp/ebnf.gox: exp/ebnf.lo
$(BUILDGOX)
exp/html.gox: exp/html.lo
@@ -3482,6 +3513,8 @@
$(BUILDGOX)
go/doc.gox: go/doc.lo
$(BUILDGOX)
+go/format.gox: go/format.lo
+ $(BUILDGOX)
go/parser.gox: go/parser.lo
$(BUILDGOX)
go/printer.gox: go/printer.lo
@@ -3681,6 +3714,7 @@
encoding/json/check \
encoding/pem/check \
encoding/xml/check \
+ exp/cookiejar/check \
exp/ebnf/check \
exp/html/check \
exp/html/atom/check \
@@ -3696,6 +3730,7 @@
go/ast/check \
$(go_build_check_omitted_since_it_calls_6g) \
go/doc/check \
+ go/format/check \
go/parser/check \
go/printer/check \
go/scanner/check \
@@ -197,7 +197,7 @@
runtime_lock(c);
// TODO(dvyukov): add similar instrumentation to select.
if(raceenabled)
- runtime_racereadpc(c, pc);
+ runtime_racereadpc(c, pc, runtime_chansend);
if(c->closed)
goto closed;
@@ -1271,7 +1271,7 @@
}
if(raceenabled) {
- runtime_racewritepc(c, runtime_getcallerpc(&c));
+ runtime_racewritepc(c, runtime_getcallerpc(&c), runtime_closechan);
runtime_racerelease(c);
}
@@ -949,6 +949,7 @@
dumpspan(spanidx);
}
}
+
void
runtime_gchelper(void)
{
@@ -1025,16 +1026,21 @@
mstats.stacks_sys = stacks_sys;
}
+// Structure of arguments passed to function gc().
+// This allows the arguments to be passed via reflect_call.
+struct gc_args
+{
+ int32 force;
+};
+
+static void gc(struct gc_args *args);
+
void
runtime_gc(int32 force)
{
M *m;
- int64 t0, t1, t2, t3;
- uint64 heap0, heap1, obj0, obj1;
const byte *p;
- GCStats stats;
- M *m1;
- uint32 i;
+ struct gc_args a, *ap;
// The atomic operations are not atomic if the uint64s
// are not aligned on uint64 boundaries. This has been
@@ -1074,12 +1080,37 @@
if(gcpercent < 0)
return;
+ // Run gc on a bigger stack to eliminate
+ // a potentially large number of calls to runtime_morestack.
+ // But not when using gccgo.
+ a.force = force;
+ ap = &a;
+ gc(ap);
+
+ if(gctrace > 1 && !force) {
+ a.force = 1;
+ gc(&a);
+ }
+}
+
+static void
+gc(struct gc_args *args)
+{
+ M *m;
+ int64 t0, t1, t2, t3;
+ uint64 heap0, heap1, obj0, obj1;
+ GCStats stats;
+ M *m1;
+ uint32 i;
+
runtime_semacquire(&runtime_worldsema);
- if(!force && mstats.heap_alloc < mstats.next_gc) {
+ if(!args->force && mstats.heap_alloc < mstats.next_gc) {
runtime_semrelease(&runtime_worldsema);
return;
}
+ m = runtime_m();
+
t0 = runtime_nanotime();
m->gcing = 1;
@@ -1181,9 +1212,6 @@
// give the queued finalizers, if any, a chance to run
if(finq != nil)
runtime_gosched();
-
- if(gctrace > 1 && !force)
- runtime_gc(1);
}
void runtime_ReadMemStats(MStats *)
@@ -20,8 +20,8 @@
void runtime_racefree(void *p);
void runtime_racegostart(int32 goid, void *pc);
void runtime_racegoend(int32 goid);
-void runtime_racewritepc(void *addr, void *pc);
-void runtime_racereadpc(void *addr, void *pc);
+void runtime_racewritepc(void *addr, void *callpc, void *pc);
+void runtime_racereadpc(void *addr, void *callpc, void *pc);
void runtime_racefingo(void);
void runtime_raceacquire(void *addr);
void runtime_raceacquireg(G *gp, void *addr);