1
0
mirror of https://github.com/golang/go synced 2024-10-02 14:38:33 -06:00

runtime: include constants and defs_*_*.h types in generated Go defs

I had to rename Kevent and Sigaction to avoid the functions of the
same (lowercase) name.

LGTM=iant, r
R=golang-codereviews, r, iant, aram.h
CC=dvyukov, golang-codereviews, khr
https://golang.org/cl/140740043
This commit is contained in:
Russ Cox 2014-08-29 16:00:31 -04:00
parent 7f2e68e982
commit 9a75c74836
31 changed files with 91 additions and 77 deletions

View File

@ -317,9 +317,9 @@ godefvar(Sym *s)
switch(t->etype) {
case TENUM:
if(!typefd[t->etype])
Bprint(&outbuf, "const %U = %lld\n", s->name, s->vconst);
Bprint(&outbuf, "const %s = %lld\n", s->name, s->vconst);
else
Bprint(&outbuf, "const %U = %f\n;", s->name, s->fconst);
Bprint(&outbuf, "const %s = %f\n;", s->name, s->fconst);
break;
case TFUNC:

View File

@ -346,6 +346,10 @@ mkzruntimedefs(char *dir, char *file)
"\n"
);
// Do not emit constant definitions for these.
vadd(&seen, "true");
vadd(&seen, "false");
vadd(&seen, "raceenabled");
// Run 6c -D GOOS_goos -D GOARCH_goarch -I workdir -q -n -o workdir/runtimedefs
// on each of the runtimedefs C files.
@ -375,15 +379,15 @@ mkzruntimedefs(char *dir, char *file)
splitlines(&lines, bstr(&in));
for(i=0; i<lines.len; i++) {
p = lines.p[i];
// Drop comment, func, and const lines.
if(hasprefix(p, "//") || hasprefix(p, "const") || hasprefix(p, "func"))
// Drop comment and func lines.
if(hasprefix(p, "//") || hasprefix(p, "func"))
continue;
// Note beginning of type or var decl, which can be multiline.
// Remove duplicates. The linear check of seen here makes the
// whole processing quadratic in aggregate, but there are only
// about 100 declarations, so this is okay (and simple).
if(hasprefix(p, "type ") || hasprefix(p, "var ")) {
if(hasprefix(p, "type ") || hasprefix(p, "var ") || hasprefix(p, "const ")) {
splitfields(&fields, p);
if(fields.len < 2)
continue;
@ -394,6 +398,17 @@ mkzruntimedefs(char *dir, char *file)
}
vadd(&seen, fields.p[1]);
}
// Const lines are printed in original case (usually upper). Add a leading _ as needed.
if(hasprefix(p, "const ")) {
if('A' <= p[6] && p[6] <= 'Z')
bwritestr(&out, "const _");
else
bwritestr(&out, "const ");
bwritestr(&out, p+6);
continue;
}
if(skip) {
if(hasprefix(p, "}"))
skip = 0;

View File

@ -12,3 +12,4 @@
#include "race.h"
#include "chan.h"
#include "mprof.h"
#include "defs_GOOS_GOARCH.h"

View File

@ -124,7 +124,7 @@ typedef struct MachHeader MachHeader;
typedef struct MachNDR MachNDR;
typedef struct MachPort MachPort;
typedef struct StackT StackT;
typedef struct Sigaction Sigaction;
typedef struct SigactionT SigactionT;
typedef struct Siginfo Siginfo;
typedef struct Timeval Timeval;
typedef struct Itimerval Itimerval;
@ -142,7 +142,7 @@ typedef struct FloatState32 FloatState32;
typedef struct ExceptionState32 ExceptionState32;
typedef struct Mcontext32 Mcontext32;
typedef struct Ucontext Ucontext;
typedef struct Kevent Kevent;
typedef struct KeventT KeventT;
#pragma pack on
@ -182,7 +182,7 @@ struct StackT {
};
typedef byte Sighandler[4];
struct Sigaction {
struct SigactionT {
byte __sigaction_u[4];
void *sa_tramp;
uint32 sa_mask;
@ -379,7 +379,7 @@ struct Ucontext {
Mcontext32 *uc_mcontext;
};
struct Kevent {
struct KeventT {
uint32 ident;
int16 filter;
uint16 flags;

View File

@ -124,7 +124,7 @@ typedef struct MachHeader MachHeader;
typedef struct MachNDR MachNDR;
typedef struct MachPort MachPort;
typedef struct StackT StackT;
typedef struct Sigaction Sigaction;
typedef struct SigactionT SigactionT;
typedef struct Siginfo Siginfo;
typedef struct Timeval Timeval;
typedef struct Itimerval Itimerval;
@ -142,7 +142,7 @@ typedef struct FloatState32 FloatState32;
typedef struct ExceptionState32 ExceptionState32;
typedef struct Mcontext32 Mcontext32;
typedef struct Ucontext Ucontext;
typedef struct Kevent Kevent;
typedef struct KeventT KeventT;
#pragma pack on
@ -183,7 +183,7 @@ struct StackT {
};
typedef byte Sighandler[8];
struct Sigaction {
struct SigactionT {
byte __sigaction_u[8];
void *sa_tramp;
uint32 sa_mask;
@ -382,7 +382,7 @@ struct Ucontext {
Mcontext64 *uc_mcontext;
};
struct Kevent {
struct KeventT {
uint64 ident;
int16 filter;
uint16 flags;

View File

@ -94,7 +94,7 @@ typedef struct Ucontext Ucontext;
typedef struct Timespec Timespec;
typedef struct Timeval Timeval;
typedef struct Itimerval Itimerval;
typedef struct Kevent Kevent;
typedef struct KeventT KeventT;
#pragma pack on
@ -185,7 +185,7 @@ struct Itimerval {
Timeval it_value;
};
struct Kevent {
struct KeventT {
uint32 ident;
int16 filter;
uint16 flags;

View File

@ -94,7 +94,7 @@ typedef struct Ucontext Ucontext;
typedef struct Timespec Timespec;
typedef struct Timeval Timeval;
typedef struct Itimerval Itimerval;
typedef struct Kevent Kevent;
typedef struct KeventT KeventT;
#pragma pack on
@ -195,7 +195,7 @@ struct Itimerval {
Timeval it_value;
};
struct Kevent {
struct KeventT {
uint64 ident;
int16 filter;
uint16 flags;

View File

@ -98,7 +98,7 @@ typedef struct Ucontext Ucontext;
typedef struct Timespec Timespec;
typedef struct Timeval Timeval;
typedef struct Itimerval Itimerval;
typedef struct Kevent Kevent;
typedef struct KeventT KeventT;
#pragma pack on
@ -200,7 +200,7 @@ struct Itimerval {
Timeval it_value;
};
struct Kevent {
struct KeventT {
uint32 ident;
int16 filter;
uint16 flags;

View File

@ -98,7 +98,7 @@ typedef struct Ucontext Ucontext;
typedef struct Timespec Timespec;
typedef struct Timeval Timeval;
typedef struct Itimerval Itimerval;
typedef struct Kevent Kevent;
typedef struct KeventT KeventT;
#pragma pack on
@ -211,7 +211,7 @@ struct Itimerval {
Timeval it_value;
};
struct Kevent {
struct KeventT {
uint64 ident;
int16 filter;
uint16 flags;

View File

@ -98,7 +98,7 @@ typedef struct Ucontext Ucontext;
typedef struct Timespec Timespec;
typedef struct Timeval Timeval;
typedef struct Itimerval Itimerval;
typedef struct Kevent Kevent;
typedef struct KeventT KeventT;
#pragma pack on
@ -173,7 +173,7 @@ struct Itimerval {
Timeval it_value;
};
struct Kevent {
struct KeventT {
uint32 ident;
int16 filter;
uint16 flags;

View File

@ -95,7 +95,7 @@ typedef struct Xmmreg Xmmreg;
typedef struct Fpstate Fpstate;
typedef struct Timespec Timespec;
typedef struct Timeval Timeval;
typedef struct Sigaction Sigaction;
typedef struct SigactionT SigactionT;
typedef struct Siginfo Siginfo;
typedef struct Sigaltstack Sigaltstack;
typedef struct Sigcontext Sigcontext;
@ -144,7 +144,7 @@ struct Timeval {
int32 tv_sec;
int32 tv_usec;
};
struct Sigaction {
struct SigactionT {
void *k_sa_handler;
uint32 sa_flags;
void *sa_restorer;

View File

@ -88,7 +88,7 @@ enum {
typedef struct Timespec Timespec;
typedef struct Timeval Timeval;
typedef struct Sigaction Sigaction;
typedef struct SigactionT SigactionT;
typedef struct Siginfo Siginfo;
typedef struct Itimerval Itimerval;
typedef struct EpollEvent EpollEvent;
@ -103,7 +103,7 @@ struct Timeval {
int64 tv_sec;
int64 tv_usec;
};
struct Sigaction {
struct SigactionT {
void *sa_handler;
uint64 sa_flags;
void *sa_restorer;

View File

@ -151,8 +151,8 @@ struct Siginfo {
uint8 _sifields[4];
};
typedef struct Sigaction Sigaction;
struct Sigaction {
typedef struct SigactionT SigactionT;
struct SigactionT {
void *sa_handler;
uint32 sa_flags;
void *sa_restorer;

View File

@ -91,7 +91,7 @@ typedef struct Timeval Timeval;
typedef struct Itimerval Itimerval;
typedef struct McontextT McontextT;
typedef struct UcontextT UcontextT;
typedef struct Kevent Kevent;
typedef struct KeventT KeventT;
#pragma pack on
@ -143,7 +143,7 @@ struct UcontextT {
int32 __uc_pad[4];
};
struct Kevent {
struct KeventT {
uint32 ident;
uint32 filter;
uint32 flags;

View File

@ -91,7 +91,7 @@ typedef struct Timeval Timeval;
typedef struct Itimerval Itimerval;
typedef struct McontextT McontextT;
typedef struct UcontextT UcontextT;
typedef struct Kevent Kevent;
typedef struct KeventT KeventT;
#pragma pack on
@ -147,7 +147,7 @@ struct UcontextT {
McontextT uc_mcontext;
};
struct Kevent {
struct KeventT {
uint64 ident;
uint32 filter;
uint32 flags;

View File

@ -91,7 +91,7 @@ typedef struct Timeval Timeval;
typedef struct Itimerval Itimerval;
typedef struct McontextT McontextT;
typedef struct UcontextT UcontextT;
typedef struct Kevent Kevent;
typedef struct KeventT KeventT;
#pragma pack on
@ -147,7 +147,7 @@ struct UcontextT {
int32 __uc_pad[2];
};
struct Kevent {
struct KeventT {
uint32 ident;
uint32 filter;
uint32 flags;

View File

@ -89,7 +89,7 @@ typedef struct StackT StackT;
typedef struct Timespec Timespec;
typedef struct Timeval Timeval;
typedef struct Itimerval Itimerval;
typedef struct Kevent Kevent;
typedef struct KeventT KeventT;
#pragma pack on
@ -155,7 +155,7 @@ struct Itimerval {
Timeval it_value;
};
struct Kevent {
struct KeventT {
uint32 ident;
int16 filter;
uint16 flags;

View File

@ -89,7 +89,7 @@ typedef struct StackT StackT;
typedef struct Timespec Timespec;
typedef struct Timeval Timeval;
typedef struct Itimerval Itimerval;
typedef struct Kevent Kevent;
typedef struct KeventT KeventT;
#pragma pack on
@ -166,7 +166,7 @@ struct Itimerval {
Timeval it_value;
};
struct Kevent {
struct KeventT {
uint64 ident;
int16 filter;
uint16 flags;

View File

@ -105,7 +105,7 @@ typedef struct Sigaltstack Sigaltstack;
typedef struct Sigset Sigset;
typedef struct StackT StackT;
typedef struct Siginfo Siginfo;
typedef struct Sigaction Sigaction;
typedef struct SigactionT SigactionT;
typedef struct Fpregset Fpregset;
typedef struct Mcontext Mcontext;
typedef struct Ucontext Ucontext;
@ -149,7 +149,7 @@ struct Siginfo {
int32 si_pad;
byte __data[240];
};
struct Sigaction {
struct SigactionT {
int32 sa_flags;
byte Pad_cgo_0[4];
byte _funcptr[8];

View File

@ -22,15 +22,13 @@ const (
pageSize = 1 << pageShift
pageMask = pageSize - 1
gcBits = 4
wordsPerBitmapByte = 8 / gcBits
bitsPerPointer = 2
bitsMask = 1<<bitsPerPointer - 1
pointersPerByte = 8 / bitsPerPointer
bitPtrMask = bitsMask << 2
maxGCMask = 64
bitsDead = 0
bitsPointer = 2
bitsPerPointer = 2
bitsMask = 1<<bitsPerPointer - 1
pointersPerByte = 8 / bitsPerPointer
bitPtrMask = bitsMask << 2
maxGCMask = 64
bitsDead = 0
bitsPointer = 2
bitBoundary = 1
bitMarked = 2

View File

@ -11,7 +11,7 @@
// Integrated network poller (kqueue-based implementation).
int32 runtime·kqueue(void);
int32 runtime·kevent(int32, Kevent*, int32, Kevent*, int32, Timespec*);
int32 runtime·kevent(int32, KeventT*, int32, KeventT*, int32, Timespec*);
void runtime·closeonexec(int32);
static int32 kq = -1;
@ -30,7 +30,7 @@ runtime·netpollinit(void)
int32
runtime·netpollopen(uintptr fd, PollDesc *pd)
{
Kevent ev[2];
KeventT ev[2];
int32 n;
// Arm both EVFILT_READ and EVFILT_WRITE in edge-triggered mode (EV_CLEAR)
@ -72,7 +72,7 @@ G*
runtime·netpoll(bool block)
{
static int32 lasterr;
Kevent events[64], *ev;
KeventT events[64], *ev;
Timespec ts, *tp;
int32 n, i, mode;
G *gp;

View File

@ -488,7 +488,7 @@ runtime·memlimit(void)
void
runtime·setsig(int32 i, GoSighandler *fn, bool restart)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
sa.sa_flags = SA_SIGINFO|SA_ONSTACK;
@ -503,7 +503,7 @@ runtime·setsig(int32 i, GoSighandler *fn, bool restart)
GoSighandler*
runtime·getsig(int32 i)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
runtime·sigaction(i, nil, &sa);

View File

@ -25,8 +25,8 @@ typedef uint32 Sigset;
void runtime·sigprocmask(int32, Sigset*, Sigset*);
void runtime·unblocksignals(void);
struct Sigaction;
void runtime·sigaction(uintptr, struct Sigaction*, struct Sigaction*);
struct SigactionT;
void runtime·sigaction(uintptr, struct SigactionT*, struct SigactionT*);
struct StackT;
void runtime·sigaltstack(struct StackT*, struct StackT*);

View File

@ -240,12 +240,12 @@ typedef struct sigaction {
} __sigaction_u; /* signal handler */
int32 sa_flags; /* see signal options below */
Sigset sa_mask; /* signal mask to apply */
} Sigaction;
} SigactionT;
void
runtime·setsig(int32 i, GoSighandler *fn, bool restart)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
sa.sa_flags = SA_SIGINFO|SA_ONSTACK;
@ -264,7 +264,7 @@ runtime·setsig(int32 i, GoSighandler *fn, bool restart)
GoSighandler*
runtime·getsig(int32 i)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
runtime·sigaction(i, nil, &sa);

View File

@ -248,12 +248,12 @@ typedef struct sigaction {
} __sigaction_u; /* signal handler */
int32 sa_flags; /* see signal options below */
Sigset sa_mask; /* signal mask to apply */
} Sigaction;
} SigactionT;
void
runtime·setsig(int32 i, GoSighandler *fn, bool restart)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
sa.sa_flags = SA_SIGINFO|SA_ONSTACK;
@ -272,7 +272,7 @@ runtime·setsig(int32 i, GoSighandler *fn, bool restart)
GoSighandler*
runtime·getsig(int32 i)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
runtime·sigaction(i, nil, &sa);

View File

@ -293,7 +293,7 @@ extern void runtime·sigreturn(void); // calls rt_sigreturn, only used with SA_R
void
runtime·setsig(int32 i, GoSighandler *fn, bool restart)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
sa.sa_flags = SA_ONSTACK | SA_SIGINFO | SA_RESTORER;
@ -319,7 +319,7 @@ runtime·setsig(int32 i, GoSighandler *fn, bool restart)
GoSighandler*
runtime·getsig(int32 i)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
if(runtime·rt_sigaction(i, nil, &sa, sizeof(sa.sa_mask)) != 0)

View File

@ -8,8 +8,8 @@
int32 runtime·futex(uint32*, int32, uint32, Timespec*, uint32*, uint32);
int32 runtime·clone(int32, void*, M*, G*, void(*)(void));
struct Sigaction;
int32 runtime·rt_sigaction(uintptr, struct Sigaction*, void*, uintptr);
struct SigactionT;
int32 runtime·rt_sigaction(uintptr, struct SigactionT*, void*, uintptr);
void runtime·sigaltstack(Sigaltstack*, Sigaltstack*);
void runtime·sigpanic(void);

View File

@ -286,12 +286,12 @@ typedef struct sigaction {
} _sa_u; /* signal handler */
uint32 sa_mask[4]; /* signal mask to apply */
int32 sa_flags; /* see signal options below */
} Sigaction;
} SigactionT;
void
runtime·setsig(int32 i, GoSighandler *fn, bool restart)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
sa.sa_flags = SA_SIGINFO|SA_ONSTACK;
@ -310,7 +310,7 @@ runtime·setsig(int32 i, GoSighandler *fn, bool restart)
GoSighandler*
runtime·getsig(int32 i)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
runtime·sigaction(i, nil, &sa);

View File

@ -263,12 +263,12 @@ typedef struct sigaction {
} __sigaction_u; /* signal handler */
uint32 sa_mask; /* signal mask to apply */
int32 sa_flags; /* see signal options below */
} Sigaction;
} SigactionT;
void
runtime·setsig(int32 i, GoSighandler *fn, bool restart)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
sa.sa_flags = SA_SIGINFO|SA_ONSTACK;
@ -284,7 +284,7 @@ runtime·setsig(int32 i, GoSighandler *fn, bool restart)
GoSighandler*
runtime·getsig(int32 i)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
runtime·sigaction(i, nil, &sa);

View File

@ -267,7 +267,7 @@ extern void runtime·sigtramp(void);
void
runtime·setsig(int32 i, GoSighandler *fn, bool restart)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
sa.sa_flags = SA_SIGINFO|SA_ONSTACK;
@ -286,7 +286,7 @@ runtime·setsig(int32 i, GoSighandler *fn, bool restart)
GoSighandler*
runtime·getsig(int32 i)
{
Sigaction sa;
SigactionT sa;
runtime·memclr((byte*)&sa, sizeof sa);
runtime·sigaction(i, nil, &sa);
@ -530,7 +530,7 @@ runtime·setitimer(int32 which, Itimerval* value, Itimerval* ovalue)
}
/* int32 */ void
runtime·sigaction(int32 sig, struct Sigaction* act, struct Sigaction* oact)
runtime·sigaction(int32 sig, struct SigactionT* act, struct SigactionT* oact)
{
runtime·sysvicall3(libc·sigaction, (uintptr)sig, (uintptr)act, (uintptr)oact);
}

View File

@ -15,7 +15,7 @@ struct sigaction;
void runtime·sigpanic(void);
void runtime·setitimer(int32, Itimerval*, Itimerval*);
void runtime·sigaction(int32, struct Sigaction*, struct Sigaction*);
void runtime·sigaction(int32, struct SigactionT*, struct SigactionT*);
void runtime·sigaltstack(Sigaltstack*, Sigaltstack*);
void runtime·sigprocmask(int32, Sigset*, Sigset*);
void runtime·unblocksignals(void);