From 0cd5a68ca47c9f2b459fa6cb46c874b582c1db2b Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Wed, 23 Jan 2019 08:23:49 +0300 Subject: [PATCH] ntdll: Keep unwind table entry count instead of a size. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/ntdll/signal_x86_64.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index 807e81e52bc..dd820007d3f 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -342,7 +342,7 @@ struct dynamic_unwind_entry /* lookup table */ RUNTIME_FUNCTION *table; - DWORD table_size; + DWORD count; /* user defined callback */ PGET_RUNTIME_FUNCTION_CALLBACK callback; @@ -2516,7 +2516,7 @@ static RUNTIME_FUNCTION *find_function_info( ULONG64 pc, HMODULE module, RUNTIME_FUNCTION *func, ULONG size ) { int min = 0; - int max = size/sizeof(*func) - 1; + int max = size - 1; while (min <= max) { @@ -2551,7 +2551,7 @@ static RUNTIME_FUNCTION *lookup_function_info( ULONG64 pc, ULONG64 *base, LDR_MO IMAGE_DIRECTORY_ENTRY_EXCEPTION, &size ))) { /* lookup in function table */ - func = find_function_info( pc, (*module)->BaseAddress, func, size ); + func = find_function_info( pc, (*module)->BaseAddress, func, size/sizeof(*func) ); } } else @@ -2569,7 +2569,7 @@ static RUNTIME_FUNCTION *lookup_function_info( ULONG64 pc, ULONG64 *base, LDR_MO if (entry->callback) func = entry->callback( pc, entry->context ); else - func = find_function_info( pc, (HMODULE)entry->base, entry->table, entry->table_size ); + func = find_function_info( pc, (HMODULE)entry->base, entry->table, entry->count ); break; } } @@ -3456,12 +3456,12 @@ BOOLEAN CDECL RtlAddFunctionTable( RUNTIME_FUNCTION *table, DWORD count, DWORD64 if (!entry) return FALSE; - entry->base = addr; - entry->end = addr + table[count - 1].EndAddress; - entry->table = table; - entry->table_size = count * sizeof(RUNTIME_FUNCTION); - entry->callback = NULL; - entry->context = NULL; + entry->base = addr; + entry->end = addr + table[count - 1].EndAddress; + entry->table = table; + entry->count = count; + entry->callback = NULL; + entry->context = NULL; RtlEnterCriticalSection( &dynamic_unwind_section ); list_add_tail( &dynamic_unwind_list, &entry->entry ); @@ -3491,12 +3491,12 @@ BOOLEAN CDECL RtlInstallFunctionTableCallback( DWORD64 table, DWORD64 base, DWOR if (!entry) return FALSE; - entry->base = base; - entry->end = base + length; - entry->table = (RUNTIME_FUNCTION *)table; - entry->table_size = 0; - entry->callback = callback; - entry->context = context; + entry->base = base; + entry->end = base + length; + entry->table = (RUNTIME_FUNCTION *)table; + entry->count = 0; + entry->callback = callback; + entry->context = context; RtlEnterCriticalSection( &dynamic_unwind_section ); list_add_tail( &dynamic_unwind_list, &entry->entry );