Skip to content

Commit c50d927

Browse files
build inline lines accels
1 parent 1214cb0 commit c50d927

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

src/linker/lnk_debug_info.c

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4397,6 +4397,25 @@ THREAD_POOL_TASK_FUNC(lnk_convert_line_tables_to_rdi_task)
43974397
ProfEnd();
43984398
}
43994399

4400+
internal
4401+
THREAD_POOL_TASK_FUNC(lnk_build_inlinee_lines_accels_task)
4402+
{
4403+
ProfBeginFunction();
4404+
Temp scratch = scratch_begin(&arena, 1);
4405+
4406+
LNK_ConvertUnitToRDITask *task = raw_task;
4407+
CV_DebugS debug_s = task->debug_s_arr[task_id];
4408+
4409+
String8List raw_inlinee_lines = cv_sub_section_from_debug_s(debug_s, CV_C13SubSectionKind_InlineeLines);
4410+
CV_C13InlineeLinesParsedList inlinee_lines = cv_c13_inlinee_lines_from_sub_sections(arena, raw_inlinee_lines);
4411+
CV_InlineeLinesAccel *inlinee_lines_accel = cv_c13_make_inlinee_lines_accel(arena, inlinee_lines);
4412+
4413+
task->inlinee_lines_accel_arr[task_id] = inlinee_lines_accel;
4414+
4415+
scratch_end(scratch);
4416+
ProfEnd();
4417+
}
4418+
44004419
internal
44014420
THREAD_POOL_TASK_FUNC(lnk_convert_symbols_to_rdi_task)
44024421
{
@@ -4917,7 +4936,7 @@ THREAD_POOL_TASK_FUNC(lnk_convert_symbols_to_rdi_task)
49174936
} break;
49184937
case CV_SymKind_INLINESITE: {
49194938
CV_SymInlineSite *sym_inline_site = (CV_SymInlineSite *) symbol.data.str;
4920-
String8 binary_annots = str8((U8 *) (sym_inline_site + 1), symbol.data.size - sizeof(*sym_inline_site));
4939+
String8 binary_annots = str8_skip(symbol.data, sizeof(*sym_inline_site));
49214940

49224941
U64 parent_voff = 0;
49234942
if (scope_stack != 0) {
@@ -4972,7 +4991,7 @@ THREAD_POOL_TASK_FUNC(lnk_convert_symbols_to_rdi_task)
49724991

49734992
inline_site->convert_ref.ud0 = binary_annots_parsed.lines;
49744993
inline_site->convert_ref.ud1 = binary_annots_parsed.lines_count;
4975-
inline_site->convert_ref.ud2 = task_id;
4994+
inline_site->convert_ref.ud2 = symbols_input.obj_idx;
49764995

49774996
// fill out scope
49784997
RDIB_Scope *scope = rdib_scope_chunk_list_push(arena, &task->scopes[worker_id], task->symbol_chunk_cap);
@@ -5208,6 +5227,7 @@ lnk_build_rad_debug_info(TP_Context *tp,
52085227
udt_name_buckets = lnk_udt_name_hash_table_from_debug_t(tp, tp_arena, types[CV_TypeIndexSource_TPI], &udt_name_buckets_cap);
52095228
ProfEnd();
52105229

5230+
52115231
ProfBegin("Convert CodeView types to RDIB Types");
52125232
LNK_ConvertTypesToRDI task = {0};
52135233
task.types = types;
@@ -5349,6 +5369,11 @@ lnk_build_rad_debug_info(TP_Context *tp,
53495369
tp_for_parallel(tp, tp_arena, obj_count, lnk_convert_line_tables_to_rdi_task, &task);
53505370
ProfEnd();
53515371

5372+
ProfBegin("Build Inlinee Lines Accels");
5373+
task.inlinee_lines_accel_arr = push_array(scratch.arena, CV_InlineeLinesAccel *, obj_count);
5374+
tp_for_parallel(tp, tp_arena, obj_count, lnk_build_inlinee_lines_accels_task, &task);
5375+
ProfEnd();
5376+
53525377
ProfBegin("Convert Symbols");
53535378
tp_for_parallel(tp, tp_arena, total_symbol_input_count, lnk_convert_symbols_to_rdi_task, &task);
53545379
ProfEnd();

0 commit comments

Comments
 (0)