@@ -65,6 +65,41 @@ var signalMaskActions = abi.ValueSet{
6565	linux .SIG_SETMASK : "SIG_SETMASK" ,
6666}
6767
68+ var  sigActionFlags  =  abi.FlagSet {
69+ 	{
70+ 		Flag : linux .SA_NOCLDSTOP ,
71+ 		Name : "SA_NOCLDSTOP" ,
72+ 	},
73+ 	{
74+ 		Flag : linux .SA_NOCLDWAIT ,
75+ 		Name : "SA_NOCLDWAIT" ,
76+ 	},
77+ 	{
78+ 		Flag : linux .SA_SIGINFO ,
79+ 		Name : "SA_SIGINFO" ,
80+ 	},
81+ 	{
82+ 		Flag : linux .SA_RESTORER ,
83+ 		Name : "SA_RESTORER" ,
84+ 	},
85+ 	{
86+ 		Flag : linux .SA_ONSTACK ,
87+ 		Name : "SA_ONSTACK" ,
88+ 	},
89+ 	{
90+ 		Flag : linux .SA_RESTART ,
91+ 		Name : "SA_RESTART" ,
92+ 	},
93+ 	{
94+ 		Flag : linux .SA_NODEFER ,
95+ 		Name : "SA_NODEFER" ,
96+ 	},
97+ 	{
98+ 		Flag : linux .SA_RESETHAND ,
99+ 		Name : "SA_RESETHAND" ,
100+ 	},
101+ }
102+ 
68103func  sigSet (t  * kernel.Task , addr  usermem.Addr ) string  {
69104	if  addr  ==  0  {
70105		return  "null" 
@@ -77,10 +112,37 @@ func sigSet(t *kernel.Task, addr usermem.Addr) string {
77112
78113	set  :=  linux .SignalSet (usermem .ByteOrder .Uint64 (b [:]))
79114
115+ 	return  fmt .Sprintf ("%#x %s" , addr , formatSigSet (set ))
116+ }
117+ 
118+ func  formatSigSet (set  linux.SignalSet ) string  {
80119	var  signals  []string 
81120	linux .ForEachSignal (set , func (sig  linux.Signal ) {
82121		signals  =  append (signals , signalNames .ParseDecimal (uint64 (sig )))
83122	})
84123
85- 	return  fmt .Sprintf ("%#x [%v]" , addr , strings .Join (signals , " " ))
124+ 	return  fmt .Sprintf ("[%v]" , strings .Join (signals , " " ))
125+ }
126+ 
127+ func  sigAction (t  * kernel.Task , addr  usermem.Addr ) string  {
128+ 	if  addr  ==  0  {
129+ 		return  "null" 
130+ 	}
131+ 
132+ 	sa , err  :=  t .CopyInSignalAct (addr )
133+ 	if  err  !=  nil  {
134+ 		return  fmt .Sprintf ("%#x (error copying sigaction: %v)" , addr , err )
135+ 	}
136+ 
137+ 	var  handler  string 
138+ 	switch  sa .Handler  {
139+ 	case  linux .SIG_IGN :
140+ 		handler  =  "SIG_IGN" 
141+ 	case  linux .SIG_DFL :
142+ 		handler  =  "SIG_DFL" 
143+ 	default :
144+ 		handler  =  fmt .Sprintf ("%#x" , sa .Handler )
145+ 	}
146+ 
147+ 	return  fmt .Sprintf ("%#x {Handler: %s, Flags: %s, Restorer: %#x, Mask: %s}" , addr , handler , sigActionFlags .Parse (sa .Flags ), sa .Restorer , formatSigSet (sa .Mask ))
86148}
0 commit comments