@@ -44,9 +44,10 @@ static struct {
4444} ctx ;
4545
4646/* 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 )
4848
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 )
5051{
5152 struct perf_event_attr attr = {
5253 .type = PERF_TYPE_BREAKPOINT ,
@@ -60,7 +61,7 @@ static struct perf_event_attr make_event_attr(bool enabled, volatile void *addr)
6061 .inherit_thread = 1 , /* ... but only cloned with CLONE_THREAD. */
6162 .remove_on_exec = 1 , /* Required by sigtrap. */
6263 .sigtrap = 1 , /* Request synchronous SIGTRAP on event. */
63- .sig_data = TEST_SIG_DATA (addr ),
64+ .sig_data = TEST_SIG_DATA (addr , id ),
6465 };
6566 return attr ;
6667}
@@ -110,7 +111,7 @@ FIXTURE(sigtrap_threads)
110111
111112FIXTURE_SETUP (sigtrap_threads )
112113{
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 );
114115 struct sigaction action = {};
115116 int i ;
116117
@@ -165,7 +166,7 @@ TEST_F(sigtrap_threads, enable_event)
165166 EXPECT_EQ (ctx .tids_want_signal , 0 );
166167 EXPECT_EQ (ctx .first_siginfo .si_addr , & ctx .iterate_on );
167168 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 ));
169170
170171 /* Check enabled for parent. */
171172 ctx .iterate_on = 0 ;
@@ -175,7 +176,7 @@ TEST_F(sigtrap_threads, enable_event)
175176/* Test that modification propagates to all inherited events. */
176177TEST_F (sigtrap_threads , modify_and_enable_event )
177178{
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 );
179180
180181 EXPECT_EQ (ioctl (self -> fd , PERF_EVENT_IOC_MODIFY_ATTRIBUTES , & new_attr ), 0 );
181182 run_test_threads (_metadata , self );
@@ -184,7 +185,7 @@ TEST_F(sigtrap_threads, modify_and_enable_event)
184185 EXPECT_EQ (ctx .tids_want_signal , 0 );
185186 EXPECT_EQ (ctx .first_siginfo .si_addr , & ctx .iterate_on );
186187 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 ));
188189
189190 /* Check enabled for parent. */
190191 ctx .iterate_on = 0 ;
@@ -204,7 +205,7 @@ TEST_F(sigtrap_threads, signal_stress)
204205 EXPECT_EQ (ctx .tids_want_signal , 0 );
205206 EXPECT_EQ (ctx .first_siginfo .si_addr , & ctx .iterate_on );
206207 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 ));
208209}
209210
210211TEST_HARNESS_MAIN
0 commit comments