pass over the aligner

This commit is contained in:
Nikita Smith
2026-02-15 23:17:59 -08:00
parent 76213ec5cd
commit 4e4a806b33
2 changed files with 13 additions and 24 deletions
+12 -19
View File
@@ -1078,26 +1078,19 @@ str8_list_concat_in_place(String8List *list, String8List *to_push)
} }
internal String8Node* internal String8Node*
str8_list_push_aligner(Arena *arena, String8List *list, U64 min, U64 align){ str8_list_push_aligner(Arena *arena, String8List *list, U64 min, U64 align)
String8Node *node = push_array_no_zero(arena, String8Node, 1); {
U64 new_size = list->total_size + min; read_only local_persist U8 zeroes[64] = {0};
U64 increase_size = 0; Assert(IsPow2OrZero(align));
if (align > 1){ U64 pad = Max(min, AlignPadPow2(list->total_size, align));
// NOTE(allen): assert is power of 2 if(pad < sizeof(zeroes))
Assert(((align - 1) & align) == 0); {
U64 mask = align - 1; return str8_list_push(arena, list, str8(zeroes, pad));
new_size += mask; }
new_size &= (~mask); else
increase_size = new_size - list->total_size; {
return str8_list_push(arena, list, str8(push_array(arena, U8, pad), pad));
} }
local_persist const U8 zeroes_buffer[64] = {0};
Assert(increase_size <= ArrayCount(zeroes_buffer));
SLLQueuePush(list->first, list->last, node);
list->node_count += 1;
list->total_size = new_size;
node->string.str = (U8*)zeroes_buffer;
node->string.size = increase_size;
return(node);
} }
internal String8Node* internal String8Node*
+1 -5
View File
@@ -4118,11 +4118,7 @@ lnk_build_win32_header(Arena *arena, LNK_SymbolTable *symtab, LNK_Config *config
} }
// align image headers // align image headers
{ str8_list_push_aligner(arena, &result, 0, config->file_align);
U64 image_headers_align_size = AlignPadPow2(result.total_size, config->file_align);
U8 *image_headers_align = push_array(arena, U8, image_headers_align_size);
str8_list_push(arena, &result, str8(image_headers_align, image_headers_align_size));
}
// //
// entry point // entry point