From 4e4a806b33d6c127e0419cc4f8863eeb461c5e57 Mon Sep 17 00:00:00 2001 From: Nikita Smith Date: Sun, 15 Feb 2026 23:17:59 -0800 Subject: [PATCH] pass over the aligner --- src/base/base_strings.c | 31 ++++++++++++------------------- src/linker/lnk.c | 6 +----- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/base/base_strings.c b/src/base/base_strings.c index c5d11262..b59c0323 100644 --- a/src/base/base_strings.c +++ b/src/base/base_strings.c @@ -1078,26 +1078,19 @@ str8_list_concat_in_place(String8List *list, String8List *to_push) } internal String8Node* -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; - U64 increase_size = 0; - if (align > 1){ - // NOTE(allen): assert is power of 2 - Assert(((align - 1) & align) == 0); - U64 mask = align - 1; - new_size += mask; - new_size &= (~mask); - increase_size = new_size - list->total_size; +str8_list_push_aligner(Arena *arena, String8List *list, U64 min, U64 align) +{ + read_only local_persist U8 zeroes[64] = {0}; + Assert(IsPow2OrZero(align)); + U64 pad = Max(min, AlignPadPow2(list->total_size, align)); + if(pad < sizeof(zeroes)) + { + return str8_list_push(arena, list, str8(zeroes, pad)); + } + else + { + 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* diff --git a/src/linker/lnk.c b/src/linker/lnk.c index 4de0462c..bddfc842 100644 --- a/src/linker/lnk.c +++ b/src/linker/lnk.c @@ -4118,11 +4118,7 @@ lnk_build_win32_header(Arena *arena, LNK_SymbolTable *symtab, LNK_Config *config } // align image headers - { - 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)); - } + str8_list_push_aligner(arena, &result, 0, config->file_align); // // entry point