mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-14 17:28:07 +00:00
ASAN false-positives when threads access foreign stack addresses
This commit is contained in:
@@ -389,6 +389,7 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params)
|
|||||||
|
|
||||||
// rjf: setup output buckets
|
// rjf: setup output buckets
|
||||||
MSF_RawStreamTable *msf_raw_stream_table = 0;
|
MSF_RawStreamTable *msf_raw_stream_table = 0;
|
||||||
|
U64 *msf_stream_take_counter = 0;
|
||||||
if(lane_idx() == 0)
|
if(lane_idx() == 0)
|
||||||
{
|
{
|
||||||
msf_raw_stream_table = msf_raw_stream_table_from_data(scratch2.arena, params->input_pdb_data);
|
msf_raw_stream_table = msf_raw_stream_table_from_data(scratch2.arena, params->input_pdb_data);
|
||||||
@@ -397,18 +398,17 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params)
|
|||||||
msf->page_count = msf_raw_stream_table->total_page_count;
|
msf->page_count = msf_raw_stream_table->total_page_count;
|
||||||
msf->stream_count = msf_raw_stream_table->stream_count;
|
msf->stream_count = msf_raw_stream_table->stream_count;
|
||||||
msf->streams = push_array(scratch.arena, String8, msf->stream_count);
|
msf->streams = push_array(scratch.arena, String8, msf->stream_count);
|
||||||
|
msf_stream_take_counter = push_array(scratch.arena, U64, 1);
|
||||||
}
|
}
|
||||||
lane_sync_u64(&msf, 0);
|
lane_sync_u64(&msf, 0);
|
||||||
lane_sync_u64(&msf_raw_stream_table, 0);
|
lane_sync_u64(&msf_raw_stream_table, 0);
|
||||||
|
|
||||||
// rjf: do wide fill
|
// rjf: do wide fill
|
||||||
{
|
{
|
||||||
U64 msf_stream_take_counter = 0;
|
lane_sync_u64(&msf_stream_take_counter, 0);
|
||||||
U64 *msf_stream_take_counter_ptr = &msf_stream_take_counter;
|
|
||||||
lane_sync_u64(&msf_stream_take_counter_ptr, 0);
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
U64 stream_idx = ins_atomic_u64_inc_eval(msf_stream_take_counter_ptr) - 1;
|
U64 stream_idx = ins_atomic_u64_inc_eval(msf_stream_take_counter) - 1;
|
||||||
if(stream_idx >= msf->stream_count)
|
if(stream_idx >= msf->stream_count)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
@@ -611,11 +611,13 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params)
|
|||||||
ProfScope("parse all syms & c13 line info streams")
|
ProfScope("parse all syms & c13 line info streams")
|
||||||
{
|
{
|
||||||
//- rjf: setup outputs
|
//- rjf: setup outputs
|
||||||
|
U64 *task_counter = 0;
|
||||||
if(lane_idx() == 0)
|
if(lane_idx() == 0)
|
||||||
{
|
{
|
||||||
all_syms_count = comp_units->count+1; // +1 for global symbol stream from DBI
|
all_syms_count = comp_units->count+1; // +1 for global symbol stream from DBI
|
||||||
all_syms = push_array(scratch.arena, CV_SymParsed *, all_syms_count);
|
all_syms = push_array(scratch.arena, CV_SymParsed *, all_syms_count);
|
||||||
all_c13s = push_array(scratch.arena, CV_C13Parsed *, all_syms_count);
|
all_c13s = push_array(scratch.arena, CV_C13Parsed *, all_syms_count);
|
||||||
|
task_counter = push_array(scratch.arena, U64, 1);
|
||||||
}
|
}
|
||||||
lane_sync_u64(&all_syms_count, 0);
|
lane_sync_u64(&all_syms_count, 0);
|
||||||
lane_sync_u64(&all_syms, 0);
|
lane_sync_u64(&all_syms, 0);
|
||||||
@@ -623,13 +625,11 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params)
|
|||||||
|
|
||||||
//- rjf: wide fill
|
//- rjf: wide fill
|
||||||
{
|
{
|
||||||
U64 task_counter = 0;
|
lane_sync_u64(&task_counter, 0);
|
||||||
U64 *task_counter_ptr = &task_counter;
|
|
||||||
lane_sync_u64(&task_counter_ptr, 0);
|
|
||||||
U64 task_count = all_syms_count;
|
U64 task_count = all_syms_count;
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
U64 task_idx = ins_atomic_u64_inc_eval(task_counter_ptr) - 1;
|
U64 task_idx = ins_atomic_u64_inc_eval(task_counter) - 1;
|
||||||
if(task_idx >= task_count)
|
if(task_idx >= task_count)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
@@ -831,14 +831,13 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params)
|
|||||||
String8Node **hit_path_slots = push_array(scratch2.arena, String8Node *, hit_path_slots_count);
|
String8Node **hit_path_slots = push_array(scratch2.arena, String8Node *, hit_path_slots_count);
|
||||||
|
|
||||||
//- rjf: take units across lanes, find all file paths
|
//- rjf: take units across lanes, find all file paths
|
||||||
U64 sym_take_counter = 0;
|
U64 *sym_take_counter = lane_idx() == 0 ? push_array(scratch.arena, U64, 1) : 0;
|
||||||
U64 *sym_take_counter_ptr = &sym_take_counter;
|
lane_sync_u64(&sym_take_counter, 0);
|
||||||
lane_sync_u64(&sym_take_counter_ptr, 0);
|
|
||||||
ProfScope("take units across lanes, find all file paths")
|
ProfScope("take units across lanes, find all file paths")
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
//- rjf: take next unit
|
//- rjf: take next unit
|
||||||
U64 unit_idx = ins_atomic_u64_inc_eval(sym_take_counter_ptr) - 1;
|
U64 unit_idx = ins_atomic_u64_inc_eval(sym_take_counter) - 1;
|
||||||
if(unit_idx >= comp_units->count)
|
if(unit_idx >= comp_units->count)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
@@ -1217,13 +1216,12 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params)
|
|||||||
RDIM_SubsetFlag_LineInfo|
|
RDIM_SubsetFlag_LineInfo|
|
||||||
RDIM_SubsetFlag_InlineLineInfo))
|
RDIM_SubsetFlag_InlineLineInfo))
|
||||||
{
|
{
|
||||||
U64 sym_take_counter = 0;
|
U64 *sym_take_counter = lane_idx() == 0 ? push_array(scratch.arena, U64, 1) : 0;
|
||||||
U64 *sym_take_counter_ptr = &sym_take_counter;
|
lane_sync_u64(&sym_take_counter, 0);
|
||||||
lane_sync_u64(&sym_take_counter_ptr, 0);
|
|
||||||
ProfScope("wide fill") for(;;)
|
ProfScope("wide fill") for(;;)
|
||||||
{
|
{
|
||||||
//- rjf: take next unit
|
//- rjf: take next unit
|
||||||
U64 unit_idx = ins_atomic_u64_inc_eval(sym_take_counter_ptr) - 1;
|
U64 unit_idx = ins_atomic_u64_inc_eval(sym_take_counter) - 1;
|
||||||
if(unit_idx >= comp_units->count)
|
if(unit_idx >= comp_units->count)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
@@ -3333,13 +3331,12 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params)
|
|||||||
RDIM_SubsetFlag_LinkNameProcedureNameMap|
|
RDIM_SubsetFlag_LinkNameProcedureNameMap|
|
||||||
RDIM_SubsetFlag_Types))
|
RDIM_SubsetFlag_Types))
|
||||||
{
|
{
|
||||||
U64 sym_take_counter = 0;
|
U64 *sym_take_counter = lane_idx() == 0 ? push_array(scratch.arena, U64, 1) : 0;
|
||||||
U64 *sym_take_counter_ptr = &sym_take_counter;
|
lane_sync_u64(&sym_take_counter, 0);
|
||||||
lane_sync_u64(&sym_take_counter_ptr, 0);
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
//- rjf: take next sym
|
//- rjf: take next sym
|
||||||
U64 sym_idx = ins_atomic_u64_inc_eval(sym_take_counter_ptr) - 1;
|
U64 sym_idx = ins_atomic_u64_inc_eval(sym_take_counter) - 1;
|
||||||
if(sym_idx >= all_syms_count)
|
if(sym_idx >= all_syms_count)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user