authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-09-20 16:39:18+02:00
committergravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-09-21 11:39:50+02:00
log093ffe9f161f604d7742afc0012c7c8f8437316d
treed5fa5106a7f58b2be4a86b9892df879b8348c572
parent75ec7e4e0094af36375491d3201fbed559d4deae

Correct stack alignment for new stack


3 files changed, 8 insertions(+), 1 deletions(-)

src/codegen.cpp+2-1
......@@ -3706,7 +3706,8 @@ static LLVMValueRef get_new_stack_addr(CodeGen *g, LLVMValueRef new_stack) {
37063706
37073707 LLVMValueRef ptr_addr = LLVMBuildPtrToInt(g->builder, ptr_value, LLVMTypeOf(len_value), "");
37083708 LLVMValueRef end_addr = LLVMBuildNUWAdd(g->builder, ptr_addr, len_value, "");
3709 LLVMValueRef align_amt = LLVMConstInt(LLVMTypeOf(end_addr), get_abi_alignment(g, g->builtin_types.entry_usize), false);
3709 const unsigned alignment_factor = ZigLLVMDataLayoutGetStackAlignment(g->target_data_ref);
3710 LLVMValueRef align_amt = LLVMConstInt(LLVMTypeOf(end_addr), alignment_factor, false);
37103711 LLVMValueRef align_adj = LLVMBuildURem(g->builder, end_addr, align_amt, "");
37113712 return LLVMBuildNUWSub(g->builder, end_addr, align_adj, "");
37123713}
src/zig_llvm.cpp+4
......@@ -149,6 +149,10 @@ LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, const char *Tri
149149 return reinterpret_cast<LLVMTargetMachineRef>(TM);
150150}
151151
152unsigned ZigLLVMDataLayoutGetStackAlignment(LLVMTargetDataRef TD) {
153 return unwrap(TD)->getStackAlignment();
154}
155
152156bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMModuleRef module_ref,
153157 const char *filename, ZigLLVM_EmitOutputType output_type, char **error_message, bool is_debug,
154158 bool is_small, bool time_report)
src/zig_llvm.h+2
......@@ -469,4 +469,6 @@ ZIG_EXTERN_C void ZigLLVMGetNativeTarget(enum ZigLLVM_ArchType *arch_type, enum
469469 enum ZigLLVM_VendorType *vendor_type, enum ZigLLVM_OSType *os_type, enum ZigLLVM_EnvironmentType *environ_type,
470470 enum ZigLLVM_ObjectFormatType *oformat);
471471
472ZIG_EXTERN_C unsigned ZigLLVMDataLayoutGetStackAlignment(LLVMTargetDataRef TD);
473
472474#endif