Skip to content

Commit 724bd61

Browse files
committed
add epoll_ctl
1 parent c3f86d6 commit 724bd61

3 files changed

Lines changed: 31 additions & 0 deletions

File tree

src/types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ enum arg_type_e
5656
TYPE_SOCKADDR,
5757
TYPE_RUSAGE,
5858
TYPE_IOVEC,
59+
TYPE_EPOLLEVENT,
5960
TYPE_SIGSET,
6061
TYPE_POLLFD,
6162
TYPE_ARGASSIZE,

user/config/config_syscall.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ const (
205205
TYPE_SOCKADDR
206206
TYPE_RUSAGE
207207
TYPE_IOVEC
208+
TYPE_EPOLLEVENT
208209
TYPE_SIGSET
209210
TYPE_POLLFD
210211
TYPE_ARGASSIZE
@@ -232,6 +233,7 @@ var UTSNAME = ArgType{TYPE_UTSNAME, TYPE_STRUCT, uint32(unsafe.Sizeof(syscall.Ut
232233
var SOCKADDR = ArgType{TYPE_SOCKADDR, TYPE_STRUCT, uint32(unsafe.Sizeof(syscall.RawSockaddrAny{}))}
233234
var RUSAGE = ArgType{TYPE_RUSAGE, TYPE_STRUCT, uint32(unsafe.Sizeof(syscall.Rusage{}))}
234235
var IOVEC = ArgType{TYPE_IOVEC, TYPE_STRUCT, uint32(unsafe.Sizeof(syscall.Iovec{}))}
236+
var EPOLLEVENT = ArgType{TYPE_EPOLLEVENT, TYPE_STRUCT, uint32(unsafe.Sizeof(syscall.EpollEvent{}))}
235237

236238
// 64 位下这个是 unsigned long sig[_NSIG_WORDS]
237239
// #define _NSIG 64
@@ -259,6 +261,7 @@ func init() {
259261
Register(&SArgs{9, PA("lgetxattr", []PArg{A("path", STRING), A("name", STRING), A("value", POINTER), A("size", INT)})})
260262
Register(&SArgs{10, PA("fgetxattr", []PArg{A("fd", INT), A("name", STRING), A("value", POINTER), A("size", INT)})})
261263
Register(&SArgs{17, PA("getcwd", []PArg{B("buf", STRING), A("size", UINT64)})})
264+
Register(&SArgs{21, PA("epoll_ctl", []PArg{A("epfd", INT), A("op", INT), A("fd", INT), A("event", EPOLLEVENT)})})
262265
Register(&SArgs{22, PA("epoll_pwait", []PArg{A("epfd", INT), A("events", POINTER), A("maxevents", INT), A("timeout", INT)})})
263266
Register(&SArgs{23, PA("dup", []PArg{A("oldfd", INT)})})
264267
Register(&SArgs{24, PA("dup3", []PArg{A("oldfd", INT), A("newfd", UINT64), A("flags", INT)})})

user/event/event_raw_syscalls.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,21 @@ func (this *Arg_Iovec) Format() string {
169169
return fmt.Sprintf("iovec{%s}", strings.Join(fields, ", "))
170170
}
171171

172+
type Arg_EpollEvent struct {
173+
Index uint8
174+
Len uint32
175+
syscall.EpollEvent
176+
}
177+
178+
func (this *Arg_EpollEvent) Format() string {
179+
var fields []string
180+
fields = append(fields, fmt.Sprintf("events=0x%x", this.Events))
181+
fields = append(fields, fmt.Sprintf("_=*"))
182+
fields = append(fields, fmt.Sprintf("fd=%d", this.Fd))
183+
fields = append(fields, fmt.Sprintf("pad=%d", this.Pad))
184+
return fmt.Sprintf("epollevent{%s}", strings.Join(fields, ", "))
185+
}
186+
172187
type Arg_Rusage struct {
173188
Index uint8
174189
Len uint32
@@ -381,6 +396,18 @@ func (this *SyscallEvent) ParseArg(point_arg *config.PointArg, ptr Arg_reg) (err
381396
arg_fmt = "NULL"
382397
}
383398
point_arg.AppendValue(fmt.Sprintf("(%s)", arg_fmt))
399+
case config.TYPE_EPOLLEVENT:
400+
var arg_fmt string
401+
if ptr.Address != 0 {
402+
var arg_epollevent Arg_EpollEvent
403+
if err = binary.Read(this.buf, binary.LittleEndian, &arg_epollevent); err != nil {
404+
panic(fmt.Sprintf("binary.Read err:%v", err))
405+
}
406+
arg_fmt = arg_epollevent.Format()
407+
} else {
408+
arg_fmt = "NULL"
409+
}
410+
point_arg.AppendValue(fmt.Sprintf("(%s)", arg_fmt))
384411
default:
385412
panic(fmt.Sprintf("unknown point_arg.AliasType %d", point_arg.AliasType))
386413
}

0 commit comments

Comments
 (0)