Skip to content

Commit 0fa1389

Browse files
author
Alfranio Correia
committed
merge mysql-trunk-bugfixing --> mysql-next-mr-bugfixing
. null-merge of BUG#53259 and WL#5344. . merged a cset form Vladislav Vaintroub 2010-06-30 BUG#52850.
2 parents 39f34e6 + e8b1389 commit 0fa1389

File tree

4 files changed

+81
-108
lines changed

4 files changed

+81
-108
lines changed

cmake/install_macros.cmake

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ SET(DEBUGBUILDDIR "${BINARY_PARENTDIR}/debug" CACHE INTERNAL "Directory of debug
248248

249249
FUNCTION(INSTALL_DEBUG_TARGET target)
250250
CMAKE_PARSE_ARGUMENTS(ARG
251-
"DESTINATION;RENAME"
251+
"DESTINATION;RENAME;PDB_DESTINATION;COMPONENT"
252252
""
253253
${ARGN}
254254
)
@@ -267,6 +267,9 @@ FUNCTION(INSTALL_DEBUG_TARGET target)
267267
ELSE()
268268
STRING(REPLACE "${CMAKE_CFG_INTDIR}" "Debug" debug_target_location "${target_location}" )
269269
ENDIF()
270+
IF(NOT ARG_COMPONENT)
271+
SET(ARG_COMPONENT DebugBinaries)
272+
ENDIF()
270273

271274
# Define permissions
272275
# For executable files
@@ -303,19 +306,26 @@ FUNCTION(INSTALL_DEBUG_TARGET target)
303306
${RENAME_PARAM}
304307
${PERMISSIONS_${target_type}}
305308
CONFIGURATIONS Release RelWithDebInfo
309+
COMPONENT ${ARG_COMPONENT}
306310
OPTIONAL)
307311

308312
IF(MSVC)
309313
GET_FILENAME_COMPONENT(ext ${debug_target_location} EXT)
310314
STRING(REPLACE "${ext}" ".pdb" debug_pdb_target_location "${debug_target_location}" )
311-
IF(RENAME_PARAM)
312-
STRING(REPLACE "${ext}" ".pdb" "${ARG_RENAME}" pdb_rename)
313-
SET(PDB_RENAME_PARAM RENAME ${pdb_rename})
315+
IF (RENAME_PARAM)
316+
IF(NOT ARG_PDB_DESTINATION)
317+
STRING(REPLACE "${ext}" ".pdb" "${ARG_RENAME}" pdb_rename)
318+
SET(PDB_RENAME_PARAM RENAME "${pdb_rename}")
319+
ENDIF()
320+
ENDIF()
321+
IF(NOT ARG_PDB_DESTINATION)
322+
SET(ARG_PDB_DESTINATION "${ARG_DESTINATION}")
314323
ENDIF()
315324
INSTALL(FILES ${debug_pdb_target_location}
316-
DESTINATION ${ARG_DESTINATION}
317-
${RPDB_RENAME_PARAM}
325+
DESTINATION ${ARG_PDB_DESTINATION}
326+
${PDB_RENAME_PARAM}
318327
CONFIGURATIONS Release RelWithDebInfo
328+
COMPONENT ${ARG_COMPONENT}
319329
OPTIONAL)
320330
ENDIF()
321331
ENDFUNCTION()

mysys/stacktrace.c

Lines changed: 53 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -334,44 +334,9 @@ void my_write_core(int sig)
334334

335335
#include <dbghelp.h>
336336
#include <tlhelp32.h>
337-
338-
/*
339-
Stack tracing on Windows is implemented using Debug Helper library(dbghelp.dll)
340-
We do not redistribute dbghelp and the one comes with older OS (up to Windows 2000)
341-
is missing some important functions like functions StackWalk64 or MinidumpWriteDump.
342-
Hence, we have to load functions at runtime using LoadLibrary/GetProcAddress.
343-
*/
344-
345-
typedef DWORD (WINAPI *SymSetOptions_FctType)(DWORD dwOptions);
346-
typedef BOOL (WINAPI *SymGetModuleInfo64_FctType)
347-
(HANDLE,DWORD64,PIMAGEHLP_MODULE64) ;
348-
typedef BOOL (WINAPI *SymGetSymFromAddr64_FctType)
349-
(HANDLE,DWORD64,PDWORD64,PIMAGEHLP_SYMBOL64) ;
350-
typedef BOOL (WINAPI *SymGetLineFromAddr64_FctType)
351-
(HANDLE,DWORD64,PDWORD,PIMAGEHLP_LINE64);
352-
typedef BOOL (WINAPI *SymInitialize_FctType)
353-
(HANDLE,PSTR,BOOL);
354-
typedef BOOL (WINAPI *StackWalk64_FctType)
355-
(DWORD,HANDLE,HANDLE,LPSTACKFRAME64,PVOID,PREAD_PROCESS_MEMORY_ROUTINE64,
356-
PFUNCTION_TABLE_ACCESS_ROUTINE64,PGET_MODULE_BASE_ROUTINE64 ,
357-
PTRANSLATE_ADDRESS_ROUTINE64);
358-
typedef BOOL (WINAPI *MiniDumpWriteDump_FctType)(
359-
IN HANDLE hProcess,
360-
IN DWORD ProcessId,
361-
IN HANDLE hFile,
362-
IN MINIDUMP_TYPE DumpType,
363-
IN CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, OPTIONAL
364-
IN CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, OPTIONAL
365-
IN CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam OPTIONAL
366-
);
367-
368-
static SymSetOptions_FctType pSymSetOptions;
369-
static SymGetModuleInfo64_FctType pSymGetModuleInfo64;
370-
static SymGetSymFromAddr64_FctType pSymGetSymFromAddr64;
371-
static SymInitialize_FctType pSymInitialize;
372-
static StackWalk64_FctType pStackWalk64;
373-
static SymGetLineFromAddr64_FctType pSymGetLineFromAddr64;
374-
static MiniDumpWriteDump_FctType pMiniDumpWriteDump;
337+
#if _MSC_VER
338+
#pragma comment(lib, "dbghelp")
339+
#endif
375340

376341
static EXCEPTION_POINTERS *exception_ptrs;
377342

@@ -382,50 +347,24 @@ void my_init_stacktrace()
382347
{
383348
}
384349

385-
/*
386-
Dynamically load dbghelp functions
387-
*/
388-
BOOL init_dbghelp_functions()
389-
{
390-
static BOOL first_time= TRUE;
391-
static BOOL rc;
392-
HMODULE hDbghlp;
393-
394-
if(first_time)
395-
{
396-
first_time= FALSE;
397-
hDbghlp= LoadLibrary("dbghelp");
398-
if(!hDbghlp)
399-
{
400-
rc= FALSE;
401-
return rc;
402-
}
403-
pSymSetOptions= (SymSetOptions_FctType)
404-
GetProcAddress(hDbghlp,"SymSetOptions");
405-
pSymInitialize= (SymInitialize_FctType)
406-
GetProcAddress(hDbghlp,"SymInitialize");
407-
pSymGetModuleInfo64= (SymGetModuleInfo64_FctType)
408-
GetProcAddress(hDbghlp,"SymGetModuleInfo64");
409-
pSymGetLineFromAddr64= (SymGetLineFromAddr64_FctType)
410-
GetProcAddress(hDbghlp,"SymGetLineFromAddr64");
411-
pSymGetSymFromAddr64=(SymGetSymFromAddr64_FctType)
412-
GetProcAddress(hDbghlp,"SymGetSymFromAddr64");
413-
pStackWalk64= (StackWalk64_FctType)
414-
GetProcAddress(hDbghlp,"StackWalk64");
415-
pMiniDumpWriteDump = (MiniDumpWriteDump_FctType)
416-
GetProcAddress(hDbghlp,"MiniDumpWriteDump");
417-
418-
rc = (BOOL)(pSymSetOptions && pSymInitialize && pSymGetModuleInfo64
419-
&& pSymGetLineFromAddr64 && pSymGetSymFromAddr64 && pStackWalk64);
420-
}
421-
return rc;
422-
}
423350

424351
void my_set_exception_pointers(EXCEPTION_POINTERS *ep)
425352
{
426353
exception_ptrs = ep;
427354
}
428355

356+
/*
357+
Appends directory to symbol path.
358+
*/
359+
static void add_to_symbol_path(char *path, size_t path_buffer_size,
360+
char *dir, size_t dir_buffer_size)
361+
{
362+
strcat_s(dir, dir_buffer_size, ";");
363+
if (!strstr(path, dir))
364+
{
365+
strcat_s(path, path_buffer_size, dir);
366+
}
367+
}
429368

430369
/*
431370
Get symbol path - semicolon-separated list of directories to search for debug
@@ -437,8 +376,28 @@ static void get_symbol_path(char *path, size_t size)
437376
{
438377
HANDLE hSnap;
439378
char *envvar;
379+
char *p;
380+
#ifndef DBUG_OFF
381+
static char pdb_debug_dir[MAX_PATH + 7];
382+
#endif
440383

441384
path[0]= '\0';
385+
386+
#ifndef DBUG_OFF
387+
/*
388+
Add "debug" subdirectory of the application directory, sometimes PDB will
389+
placed here by installation.
390+
*/
391+
GetModuleFileName(NULL, pdb_debug_dir, MAX_PATH);
392+
p= strrchr(pdb_debug_dir, '\\');
393+
if(p)
394+
{
395+
*p= 0;
396+
strcat_s(pdb_debug_dir, sizeof(pdb_debug_dir), "\\debug;");
397+
add_to_symbol_path(path, size, pdb_debug_dir, sizeof(pdb_debug_dir));
398+
}
399+
#endif
400+
442401
/*
443402
Enumerate all modules, and add their directories to the path.
444403
Avoid duplicate entries.
@@ -452,37 +411,31 @@ static void get_symbol_path(char *path, size_t size)
452411
for (ret= Module32First(hSnap, &mod); ret; ret= Module32Next(hSnap, &mod))
453412
{
454413
char *module_dir= mod.szExePath;
455-
char *p= strrchr(module_dir,'\\');
414+
p= strrchr(module_dir,'\\');
456415
if (!p)
457416
{
458417
/*
459418
Path separator was not found. Not known to happen, if ever happens,
460419
will indicate current directory.
461420
*/
462421
module_dir[0]= '.';
463-
p= module_dir + 1;
422+
module_dir[1]= '\0';
464423
}
465-
*p++= ';';
466-
*p= '\0';
467-
468-
if (!strstr(path, module_dir))
424+
else
469425
{
470-
size_t dir_len = strlen(module_dir);
471-
if (size > dir_len)
472-
{
473-
strncat(path, module_dir, size-1);
474-
size -= dir_len;
475-
}
426+
*p= '\0';
476427
}
428+
add_to_symbol_path(path, size, module_dir,sizeof(mod.szExePath));
477429
}
478430
CloseHandle(hSnap);
479431
}
480432

433+
481434
/* Add _NT_SYMBOL_PATH, if present. */
482435
envvar= getenv("_NT_SYMBOL_PATH");
483-
if(envvar && size)
436+
if(envvar)
484437
{
485-
strncat(path, envvar, size-1);
438+
strcat_s(path, size, envvar);
486439
}
487440
}
488441

@@ -506,15 +459,15 @@ void my_print_stacktrace(uchar* unused1, ulong unused2)
506459
STACKFRAME64 frame={0};
507460
static char symbol_path[MAX_SYMBOL_PATH];
508461

509-
if(!exception_ptrs || !init_dbghelp_functions())
462+
if(!exception_ptrs)
510463
return;
511464

512465
/* Copy context, as stackwalking on original will unwind the stack */
513466
context = *(exception_ptrs->ContextRecord);
514467
/*Initialize symbols.*/
515-
pSymSetOptions(SYMOPT_LOAD_LINES|SYMOPT_NO_PROMPTS|SYMOPT_DEFERRED_LOADS|SYMOPT_DEBUG);
468+
SymSetOptions(SYMOPT_LOAD_LINES|SYMOPT_NO_PROMPTS|SYMOPT_DEFERRED_LOADS|SYMOPT_DEBUG);
516469
get_symbol_path(symbol_path, sizeof(symbol_path));
517-
pSymInitialize(hProcess, symbol_path, TRUE);
470+
SymInitialize(hProcess, symbol_path, TRUE);
518471

519472
/*Prepare stackframe for the first StackWalk64 call*/
520473
frame.AddrFrame.Mode= frame.AddrPC.Mode= frame.AddrStack.Mode= AddrModeFlat;
@@ -546,11 +499,11 @@ void my_print_stacktrace(uchar* unused1, ulong unused2)
546499
BOOL have_symbol= FALSE;
547500
BOOL have_source= FALSE;
548501

549-
if(!pStackWalk64(machine, hProcess, hThread, &frame, &context, 0, 0, 0 ,0))
502+
if(!StackWalk64(machine, hProcess, hThread, &frame, &context, 0, 0, 0 ,0))
550503
break;
551504
addr= frame.AddrPC.Offset;
552505

553-
have_module= pSymGetModuleInfo64(hProcess,addr,&module);
506+
have_module= SymGetModuleInfo64(hProcess,addr,&module);
554507
#ifdef _M_IX86
555508
if(!have_module)
556509
{
@@ -560,13 +513,13 @@ void my_print_stacktrace(uchar* unused1, ulong unused2)
560513
happy, pretend passing the old structure.
561514
*/
562515
module.SizeOfStruct= MODULE64_SIZE_WINXP;
563-
have_module= pSymGetModuleInfo64(hProcess, addr, &module);
516+
have_module= SymGetModuleInfo64(hProcess, addr, &module);
564517
}
565518
#endif
566519

567-
have_symbol= pSymGetSymFromAddr64(hProcess, addr, &function_offset,
520+
have_symbol= SymGetSymFromAddr64(hProcess, addr, &function_offset,
568521
&(package.sym));
569-
have_source= pSymGetLineFromAddr64(hProcess, addr, &line_offset, &line);
522+
have_source= SymGetLineFromAddr64(hProcess, addr, &line_offset, &line);
570523

571524
fprintf(stderr, "%p ", addr);
572525
if(have_module)
@@ -610,7 +563,7 @@ void my_write_core(int unused)
610563
MINIDUMP_EXCEPTION_INFORMATION info;
611564
HANDLE hFile;
612565

613-
if(!exception_ptrs || !init_dbghelp_functions() || !pMiniDumpWriteDump)
566+
if(!exception_ptrs)
614567
return;
615568

616569
info.ExceptionPointers= exception_ptrs;
@@ -628,7 +581,7 @@ void my_write_core(int unused)
628581
if(hFile)
629582
{
630583
/* Create minidump */
631-
if(pMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
584+
if(MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
632585
hFile, MiniDumpNormal, &info, 0, 0))
633586
{
634587
fprintf(stderr, "Minidump written to %s\n",

packaging/WiX/CPackWixConfig.cmake

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ IF(ESSENTIALS)
1212
ENDIF()
1313
ELSE()
1414
SET(CPACK_COMPONENTS_USED
15-
"Server;Client;DataFiles;Development;SharedLibraries;Embedded;Debuginfo;Documentation;IniFiles;Readme;Server_Scripts")
15+
"Server;Client;DataFiles;Development;SharedLibraries;Embedded;Debuginfo;Documentation;IniFiles;Readme;Server_Scripts;DebugBinaries")
1616
ENDIF()
1717

1818

@@ -50,6 +50,13 @@ SET(CPACK_COMPONENT_GROUP_MYSQLSERVER_DESCRIPTION "Install MySQL Server")
5050
SET(CPACK_COMPONENT_CLIENT_DISPLAY_NAME "Client Programs")
5151
SET(CPACK_COMPONENT_CLIENT_DESCRIPTION
5252
"Various helpful (commandline) tools including the mysql command line client" )
53+
# Subfeature "Debug binaries"
54+
SET(CPACK_COMPONENT_DEBUGBINARIES_GROUP "MySQLServer")
55+
SET(CPACK_COMPONENT_DEBUGBINARIES_DISPLAY_NAME "Debug binaries")
56+
SET(CPACK_COMPONENT_DEBUGBINARIES_DESCRIPTION
57+
"Debug/trace versions of executables and libraries" )
58+
#SET(CPACK_COMPONENT_DEBUGBINARIES_WIX_LEVEL 2)
59+
5360

5461
#Subfeature "Data Files"
5562
SET(CPACK_COMPONENT_DATAFILES_GROUP "MySQLServer")

sql/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,10 @@ IF(WITH_MYSQLD_LDFLAGS)
169169
SET_TARGET_PROPERTIES(mysqld PROPERTIES LINK_FLAGS
170170
"${MYSQLD_LINK_FLAGS} ${WITH_MYSQLD_LDFLAGS}")
171171
ENDIF()
172-
INSTALL_DEBUG_TARGET(mysqld DESTINATION ${INSTALL_SBINDIR} RENAME mysqld-debug)
172+
INSTALL_DEBUG_TARGET(mysqld
173+
DESTINATION ${INSTALL_SBINDIR}
174+
PDB_DESTINATION ${INSTALL_SBINDIR}/debug
175+
RENAME mysqld-debug)
173176

174177
# Handle out-of-source build from source package with possibly broken
175178
# bison. Copy bison output to from source to build directory, if not already

0 commit comments

Comments
 (0)