@@ -44,9 +44,10 @@ static struct {
44
44
} ctx ;
45
45
46
46
/* Unique value to check si_perf_data is correctly set from perf_event_attr::sig_data. */
47
- #define TEST_SIG_DATA (addr ) (~(unsigned long)(addr))
47
+ #define TEST_SIG_DATA (addr , id ) (~(unsigned long)(addr) + id )
48
48
49
- static struct perf_event_attr make_event_attr (bool enabled , volatile void * addr )
49
+ static struct perf_event_attr make_event_attr (bool enabled , volatile void * addr ,
50
+ unsigned long id )
50
51
{
51
52
struct perf_event_attr attr = {
52
53
.type = PERF_TYPE_BREAKPOINT ,
@@ -60,7 +61,7 @@ static struct perf_event_attr make_event_attr(bool enabled, volatile void *addr)
60
61
.inherit_thread = 1 , /* ... but only cloned with CLONE_THREAD. */
61
62
.remove_on_exec = 1 , /* Required by sigtrap. */
62
63
.sigtrap = 1 , /* Request synchronous SIGTRAP on event. */
63
- .sig_data = TEST_SIG_DATA (addr ),
64
+ .sig_data = TEST_SIG_DATA (addr , id ),
64
65
};
65
66
return attr ;
66
67
}
@@ -110,7 +111,7 @@ FIXTURE(sigtrap_threads)
110
111
111
112
FIXTURE_SETUP (sigtrap_threads )
112
113
{
113
- struct perf_event_attr attr = make_event_attr (false, & ctx .iterate_on );
114
+ struct perf_event_attr attr = make_event_attr (false, & ctx .iterate_on , 0 );
114
115
struct sigaction action = {};
115
116
int i ;
116
117
@@ -165,7 +166,7 @@ TEST_F(sigtrap_threads, enable_event)
165
166
EXPECT_EQ (ctx .tids_want_signal , 0 );
166
167
EXPECT_EQ (ctx .first_siginfo .si_addr , & ctx .iterate_on );
167
168
EXPECT_EQ (ctx .first_siginfo .si_perf_type , PERF_TYPE_BREAKPOINT );
168
- EXPECT_EQ (ctx .first_siginfo .si_perf_data , TEST_SIG_DATA (& ctx .iterate_on ));
169
+ EXPECT_EQ (ctx .first_siginfo .si_perf_data , TEST_SIG_DATA (& ctx .iterate_on , 0 ));
169
170
170
171
/* Check enabled for parent. */
171
172
ctx .iterate_on = 0 ;
@@ -175,7 +176,7 @@ TEST_F(sigtrap_threads, enable_event)
175
176
/* Test that modification propagates to all inherited events. */
176
177
TEST_F (sigtrap_threads , modify_and_enable_event )
177
178
{
178
- struct perf_event_attr new_attr = make_event_attr (true, & ctx .iterate_on );
179
+ struct perf_event_attr new_attr = make_event_attr (true, & ctx .iterate_on , 42 );
179
180
180
181
EXPECT_EQ (ioctl (self -> fd , PERF_EVENT_IOC_MODIFY_ATTRIBUTES , & new_attr ), 0 );
181
182
run_test_threads (_metadata , self );
@@ -184,7 +185,7 @@ TEST_F(sigtrap_threads, modify_and_enable_event)
184
185
EXPECT_EQ (ctx .tids_want_signal , 0 );
185
186
EXPECT_EQ (ctx .first_siginfo .si_addr , & ctx .iterate_on );
186
187
EXPECT_EQ (ctx .first_siginfo .si_perf_type , PERF_TYPE_BREAKPOINT );
187
- EXPECT_EQ (ctx .first_siginfo .si_perf_data , TEST_SIG_DATA (& ctx .iterate_on ));
188
+ EXPECT_EQ (ctx .first_siginfo .si_perf_data , TEST_SIG_DATA (& ctx .iterate_on , 42 ));
188
189
189
190
/* Check enabled for parent. */
190
191
ctx .iterate_on = 0 ;
@@ -204,7 +205,7 @@ TEST_F(sigtrap_threads, signal_stress)
204
205
EXPECT_EQ (ctx .tids_want_signal , 0 );
205
206
EXPECT_EQ (ctx .first_siginfo .si_addr , & ctx .iterate_on );
206
207
EXPECT_EQ (ctx .first_siginfo .si_perf_type , PERF_TYPE_BREAKPOINT );
207
- EXPECT_EQ (ctx .first_siginfo .si_perf_data , TEST_SIG_DATA (& ctx .iterate_on ));
208
+ EXPECT_EQ (ctx .first_siginfo .si_perf_data , TEST_SIG_DATA (& ctx .iterate_on , 0 ));
208
209
}
209
210
210
211
TEST_HARNESS_MAIN
0 commit comments