mirror of
https://github.com/golang/go
synced 2024-11-22 15:14:53 -07:00
runtime: replace unions with structs
Unions can break precise GC. Update #5193. R=golang-dev, iant CC=golang-dev https://golang.org/cl/8456043
This commit is contained in:
parent
cfe336770b
commit
60682c4f59
@ -5,9 +5,9 @@
|
||||
#include "runtime.h"
|
||||
#include "arch_GOARCH.h"
|
||||
|
||||
static union {
|
||||
static struct {
|
||||
Lock l;
|
||||
byte pad [CacheLineSize];
|
||||
byte pad[CacheLineSize-sizeof(Lock)];
|
||||
} locktab[57];
|
||||
|
||||
#define LOCK(addr) (&locktab[((uintptr)(addr)>>3)%nelem(locktab)].l)
|
||||
|
@ -44,13 +44,13 @@ struct SemaRoot
|
||||
// Prime to not correlate with any user patterns.
|
||||
#define SEMTABLESZ 251
|
||||
|
||||
union semtable
|
||||
struct semtable
|
||||
{
|
||||
SemaRoot;
|
||||
uint8 pad[CacheLineSize];
|
||||
uint8 pad[CacheLineSize-sizeof(SemaRoot)];
|
||||
};
|
||||
#pragma dataflag 16 /* mark semtable as 'no pointers', hiding from garbage collector */
|
||||
static union semtable semtable[SEMTABLESZ];
|
||||
static struct semtable semtable[SEMTABLESZ];
|
||||
|
||||
static SemaRoot*
|
||||
semroot(uint32 *addr)
|
||||
|
Loading…
Reference in New Issue
Block a user