diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 40efd46d3c7..378b812868c 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -2641,6 +2641,7 @@ static NTSTATUS load_dll( const WCHAR *load_path, const WCHAR *libname, const WC HANDLE mapping = 0; SECTION_IMAGE_INFORMATION image_info; NTSTATUS nts; + void *prev; TRACE( "looking for %s in %s\n", debugstr_w(libname), debugstr_w(load_path) ); @@ -2662,6 +2663,9 @@ static NTSTATUS load_dll( const WCHAR *load_path, const WCHAR *libname, const WC main_exe = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress ); loadorder = get_load_order( main_exe ? main_exe->ldr.BaseDllName.Buffer : NULL, &nt_name ); + prev = NtCurrentTeb()->Tib.ArbitraryUserPointer; + NtCurrentTeb()->Tib.ArbitraryUserPointer = nt_name.Buffer + 4; + switch (nts) { case STATUS_INVALID_IMAGE_NOT_MZ: /* not in PE format, maybe it's a .so file */ @@ -2748,6 +2752,7 @@ static NTSTATUS load_dll( const WCHAR *load_path, const WCHAR *libname, const WC } break; } + NtCurrentTeb()->Tib.ArbitraryUserPointer = prev; done: if (nts == STATUS_SUCCESS) diff --git a/server/debugger.c b/server/debugger.c index 2e3de0d41ab..9f389075b92 100644 --- a/server/debugger.c +++ b/server/debugger.c @@ -131,6 +131,13 @@ static const struct object_ops debug_obj_ops = debug_obj_destroy /* destroy */ }; +/* get a pointer to TEB->ArbitraryUserPointer in the client address space */ +static client_ptr_t get_teb_user_ptr( struct thread *thread ) +{ + unsigned int ptr_size = (CPU_FLAG( thread->process->cpu ) & CPU_64BIT_MASK) ? 8 : 4; + return thread->teb + 5 * ptr_size; +} + /* routines to build an event according to its type */ @@ -181,7 +188,7 @@ static void fill_load_dll_event( struct debug_event *event, const void *arg ) event->data.load_dll.dbg_offset = image_info->dbg_offset; event->data.load_dll.dbg_size = image_info->dbg_size; - event->data.load_dll.name = dll->name; + event->data.load_dll.name = get_teb_user_ptr( event->sender ); event->file = get_view_file( view, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE ); }