diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2014-03-25 14:10:05 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2014-03-25 16:17:09 +0100 |
commit | 97354578d7195bce927f0c00c4e2ae9cd7344776 (patch) | |
tree | 2f3cebd64b217cd628dc1d95cb655ebe717a3067 /sal | |
parent | 86088dda6e893faaecfea19bad6e0e6c1ffa657c (diff) |
Remove the obsolete functionality originally underlying osl/diagnose.h
...before that got rebased onto sal/log.hxx. That functionality is considered
an implementation detail, so it should be safe to remove it from the URE
interface. As usual, aborting stubs are retained for SONAME stability.
Change-Id: If948b9714c26a3871e38dea4d4d5b5466d6ee258
Diffstat (limited to 'sal')
-rw-r--r-- | sal/Library_sal.mk | 3 | ||||
-rw-r--r-- | sal/osl/all/compat.cxx | 37 | ||||
-rw-r--r-- | sal/osl/all/trace.cxx | 28 | ||||
-rw-r--r-- | sal/osl/unx/diagnose.cxx | 278 | ||||
-rw-r--r-- | sal/osl/w32/diagnose.c | 147 |
5 files changed, 37 insertions, 456 deletions
diff --git a/sal/Library_sal.mk b/sal/Library_sal.mk index bda3dd346959..ec8d89b95119 100644 --- a/sal/Library_sal.mk +++ b/sal/Library_sal.mk @@ -88,7 +88,6 @@ $(eval $(call gb_Library_add_exception_objects,sal,\ sal/osl/all/debugbase \ sal/osl/all/loadmodulerelative \ sal/osl/all/log \ - sal/osl/all/trace \ sal/osl/all/utility \ sal/rtl/alloc_arena \ sal/rtl/alloc_cache \ @@ -154,7 +153,6 @@ endif ifneq ($(OS),WNT) $(eval $(call gb_Library_add_exception_objects,sal,\ sal/osl/unx/conditn \ - sal/osl/unx/diagnose \ sal/osl/unx/file \ sal/osl/unx/file_error_transl \ sal/osl/unx/file_misc \ @@ -250,7 +248,6 @@ $(eval $(call gb_Library_add_exception_objects,sal,\ )) $(eval $(call gb_Library_add_cobjects,sal,\ sal/osl/w32/conditn \ - sal/osl/w32/diagnose \ sal/osl/w32/dllentry \ sal/osl/w32/file_error \ sal/osl/w32/interlck \ diff --git a/sal/osl/all/compat.cxx b/sal/osl/all/compat.cxx index efe787796f66..ef44215b00ed 100644 --- a/sal/osl/all/compat.cxx +++ b/sal/osl/all/compat.cxx @@ -23,6 +23,16 @@ SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_acquireSemaphore(void *) { for (;;) { std::abort(); } // avoid "must return a value" warnings } +SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_assertFailedLine( + char const *, sal_Int32, char const *) +{ + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL osl_breakDebug() { + std::abort(); +} + SAL_DLLPUBLIC_EXPORT void * SAL_CALL osl_createSemaphore(sal_uInt32) { for (;;) { std::abort(); } // avoid "must return a value" warnings } @@ -39,6 +49,33 @@ SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_releaseSemaphore(void *) { for (;;) { std::abort(); } // avoid "must return a value" warnings } +SAL_DLLPUBLIC_EXPORT sal_Int32 SAL_CALL osl_reportError( + sal_uInt32, char const *) +{ + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +namespace { +typedef void (SAL_CALL * pfunc_osl_printDebugMessage)(char const *); +} +SAL_DLLPUBLIC_EXPORT pfunc_osl_printDebugMessage SAL_CALL +osl_setDebugMessageFunc(pfunc_osl_printDebugMessage) { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +namespace { +typedef void (SAL_CALL * pfunc_osl_printDetailedDebugMessage)( + char const *, sal_Int32, char const *); +} +SAL_DLLPUBLIC_EXPORT pfunc_osl_printDetailedDebugMessage SAL_CALL +osl_setDetailedDebugMessageFunc(pfunc_osl_printDetailedDebugMessage) { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL osl_trace(char const *, ...) { + std::abort(); +} + SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_tryToAcquireSemaphore(void *) { for (;;) { std::abort(); } // avoid "must return a value" warnings } diff --git a/sal/osl/all/trace.cxx b/sal/osl/all/trace.cxx deleted file mode 100644 index 007f36406350..000000000000 --- a/sal/osl/all/trace.cxx +++ /dev/null @@ -1,28 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include "sal/config.h" - -#include <cstdarg> - -#include "osl/diagnose.h" -#include "sal/detail/log.h" -#include "sal/log.hxx" - -#include "logformat.hxx" - -void osl_trace(char const * pszFormat, ...) { - std::va_list args; - va_start(args, pszFormat); - osl::detail::logFormat( - SAL_DETAIL_LOG_LEVEL_INFO, "legacy.osl", SAL_WHERE, pszFormat, args); - va_end(args); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/diagnose.cxx b/sal/osl/unx/diagnose.cxx deleted file mode 100644 index 188062cb8ad0..000000000000 --- a/sal/osl/unx/diagnose.cxx +++ /dev/null @@ -1,278 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include "osl/diagnose.h" -#include "system.h" - -#ifndef HAVE_DLFCN_H - -#if defined(LINUX) || defined(SOLARIS) -#define HAVE_DLFCN_H -#endif /* LINUX || SOLARIS */ - -#endif /* HAVE_DLFCN_H */ - - -#ifdef HAVE_DLFCN_H - -#ifndef INCLUDED_DLFCN_H -#include <dlfcn.h> -#define INCLUDED_DLFCN_H -#endif - -#endif /* HAVE_DLFCN_H */ - -#include <pthread.h> -#include <stddef.h> - -/************************************************************************/ -/* Internal data structures and functions */ -/************************************************************************/ - -static pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER; - -typedef pfunc_osl_printDebugMessage oslDebugMessageFunc; -static oslDebugMessageFunc volatile g_pDebugMessageFunc = 0; - -typedef pfunc_osl_printDetailedDebugMessage oslDetailedDebugMessageFunc; -static oslDetailedDebugMessageFunc volatile g_pDetailedDebugMessageFunc = 0; - -static void osl_diagnose_backtrace_Impl ( - oslDebugMessageFunc f); - -#define OSL_DIAGNOSE_OUTPUTMESSAGE(f, s) \ -((f != 0) ? (*(f))((s)) : (void)fprintf(stderr, "%s", (s))) - -#if defined (LINUX) || defined (SOLARIS) - -static void osl_diagnose_frame_Impl ( - oslDebugMessageFunc f, - int depth, - void * pc) -{ - const char *fname = 0, *sname = 0; - void *fbase = 0, *saddr = 0; - ptrdiff_t offset; - char szMessage[1024]; - -#ifdef INCLUDED_DLFCN_H - Dl_info dli; - if (dladdr (pc, &dli) != 0) - { - fname = dli.dli_fname; - fbase = dli.dli_fbase; - sname = dli.dli_sname; - saddr = dli.dli_saddr; - } -#endif /* INCLUDED_DLFCN_H */ - - if (saddr) - offset = (ptrdiff_t)(pc) - (ptrdiff_t)(saddr); - else if (fbase) - offset = (ptrdiff_t)(pc) - (ptrdiff_t)(fbase); - else - offset = (ptrdiff_t)(pc); - - snprintf (szMessage, sizeof(szMessage), - "Backtrace: [%d] %s: %s+0x%" SAL_PRI_PTRDIFFT "x\n", - depth, - fname ? fname : "<unknown>", - sname ? sname : "???", - offset); - - OSL_DIAGNOSE_OUTPUTMESSAGE(f, szMessage); -} -#endif - -#if defined(LINUX) - -#include <execinfo.h> - -#define FRAME_COUNT 64 -#define FRAME_OFFSET 1 - -static void osl_diagnose_backtrace_Impl (oslDebugMessageFunc f) -{ - void * ppFrames[FRAME_COUNT]; - int i, n; - - n = backtrace (ppFrames, FRAME_COUNT); - for (i = FRAME_OFFSET; i < n; i++) - { - osl_diagnose_frame_Impl (f, (i - FRAME_OFFSET), ppFrames[i]); - } -} - -#elif defined(SOLARIS) - -#include <setjmp.h> -#include <sys/frame.h> - -#if defined(SPARC) - -#if defined IS_LP64 - -#define FRAME_PTR_OFFSET 1 -#define FRAME_OFFSET 0 -#define STACK_BIAS 0x7ff - -#else - -#define FRAME_PTR_OFFSET 1 -#define FRAME_OFFSET 0 -#define STACK_BIAS 0 - -#endif - -#elif defined(INTEL) - -#define FRAME_PTR_OFFSET 3 -#define FRAME_OFFSET 0 -#define STACK_BIAS 0 - -#endif /* (SPARC || INTEL) */ - -static void osl_diagnose_backtrace_Impl (oslDebugMessageFunc f) -{ - jmp_buf ctx; - long fpval; - struct frame * fp; - int i; - -#if defined(SPARC) - asm("ta 3"); -#endif /* SPARC */ - setjmp (ctx); - - fpval = ((long*)(ctx))[FRAME_PTR_OFFSET]; - fp = (struct frame*)((char*)(fpval) + STACK_BIAS); - - for (i = 0; (i < FRAME_OFFSET) && (fp != 0); i++) - fp = (struct frame*)((char*)(fp->fr_savfp) + STACK_BIAS); - - for (i = 0; (fp != 0) && (fp->fr_savpc != 0); i++) - { - struct frame * prev = (struct frame*)((char*)(fp->fr_savfp) + STACK_BIAS); - osl_diagnose_frame_Impl (f, i, (void*)(fp->fr_savpc)); - fp = (prev > fp) ? prev : 0; - } -} - -#else /* (LINUX || SOLARIS) */ - -static void osl_diagnose_backtrace_Impl (oslDebugMessageFunc f) -{ - (void) f; - /* not yet implemented */ -} - -#endif /* (LINUX || SOLARIS) */ - -namespace { - -// getenv is not thread safe, so minimize use of result: -bool isEnv(char const * name) { - char * p = getenv(name); - return p != NULL && *p != '\0'; -} - -} - -sal_Bool SAL_CALL osl_assertFailedLine ( - const sal_Char* pszFileName, - sal_Int32 nLine, - const sal_Char* pszMessage) -{ - oslDebugMessageFunc f = g_pDebugMessageFunc; - char szMessage[1024]; - - // after reporting the assertion, abort if told so by SAL_DIAGNOSE_ABORT, but *not* if - // assertions are routed to some external instance - static bool envAbort = isEnv( "SAL_DIAGNOSE_ABORT" ); - static bool envBacktrace = isEnv( "SAL_DIAGNOSE_BACKTRACE" ); - bool const doAbort = envAbort && f == NULL; - - /* If there's a callback for detailed messages, use it */ - if ( g_pDetailedDebugMessageFunc != NULL ) - { - g_pDetailedDebugMessageFunc( pszFileName, nLine, pszMessage ); - return sal_False; - } - - /* format message into buffer */ - if (pszMessage != 0) - { - snprintf(szMessage, sizeof(szMessage), - "Error: File %s, Line %" SAL_PRIdINT32 ": %s\n", - pszFileName, nLine, pszMessage); - } - else - { - snprintf(szMessage, sizeof(szMessage), - "Error: File %s, Line %" SAL_PRIdINT32 "\n", - pszFileName, nLine); - } - - /* acquire lock to serialize output message(s) */ - pthread_mutex_lock(&g_mutex); - - /* output message buffer */ - OSL_DIAGNOSE_OUTPUTMESSAGE(f, szMessage); - - /* should we output backtrace? */ - if( envBacktrace ) - osl_diagnose_backtrace_Impl(f); - - /* release lock and leave */ - pthread_mutex_unlock(&g_mutex); - - return doAbort; -} - -void SAL_CALL osl_breakDebug() -{ - abort(); -} - -sal_Int32 SAL_CALL osl_reportError ( - sal_uInt32 nType, - const sal_Char* pszMessage) -{ - (void) nType; /* unused */ - fputs(pszMessage, stderr); - return 0; -} - -oslDebugMessageFunc SAL_CALL osl_setDebugMessageFunc ( - oslDebugMessageFunc pNewFunc) -{ - oslDebugMessageFunc pOldFunc = g_pDebugMessageFunc; - g_pDebugMessageFunc = pNewFunc; - return pOldFunc; -} - -pfunc_osl_printDetailedDebugMessage SAL_CALL osl_setDetailedDebugMessageFunc ( - pfunc_osl_printDetailedDebugMessage pNewFunc) -{ - oslDetailedDebugMessageFunc pOldFunc = g_pDetailedDebugMessageFunc; - g_pDetailedDebugMessageFunc = pNewFunc; - return pOldFunc; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/diagnose.c b/sal/osl/w32/diagnose.c deleted file mode 100644 index 4db4e79d47f9..000000000000 --- a/sal/osl/w32/diagnose.c +++ /dev/null @@ -1,147 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include "system.h" - -#include <stdio.h> - -#include <osl/diagnose.h> - -static pfunc_osl_printDebugMessage _pPrintDebugMessage = NULL; -static pfunc_osl_printDetailedDebugMessage _pPrintDetailedDebugMessage = NULL; - -pfunc_osl_printDebugMessage SAL_CALL osl_setDebugMessageFunc( pfunc_osl_printDebugMessage pNewFunc ) -{ - pfunc_osl_printDebugMessage pOldFunc = _pPrintDebugMessage; - _pPrintDebugMessage = pNewFunc; - - return pOldFunc; -} - -pfunc_osl_printDetailedDebugMessage SAL_CALL osl_setDetailedDebugMessageFunc( pfunc_osl_printDetailedDebugMessage pNewFunc ) -{ - pfunc_osl_printDetailedDebugMessage pOldFunc = _pPrintDetailedDebugMessage; - _pPrintDetailedDebugMessage = pNewFunc; - return pOldFunc; -} - -/* - Trace output -*/ - -void SAL_CALL osl_breakDebug(void) -{ - if ( IsDebuggerPresent() ) - DebugBreak(); - else - abort (); -} - -sal_Bool SAL_CALL osl_assertFailedLine(const sal_Char* pszFileName, sal_Int32 nLine, const sal_Char* pszMessage) -{ - char const * env = getenv( "SAL_DIAGNOSE_ABORT" ); -#if defined(_DEBUG) && !defined(NO_DEBUG_CRT) - _CrtDbgReport(_CRT_ASSERT, pszFileName, nLine, NULL, pszMessage); - return ( ( env != NULL ) && ( *env != '\0' ) ); -#else - HWND hWndParent; - UINT nFlags; - int nCode; - - /* get app name or NULL if unknown (don't call assert) */ - LPCSTR lpszAppName = "Error"; - sal_Char szMessage[512]; - - /* format message into buffer */ - szMessage[sizeof(szMessage)-1] = '\0'; /* zero terminate always */ - _snprintf(szMessage, sizeof(szMessage)-1, "%s: File %hs, Line %d\n:%s\n", - lpszAppName, pszFileName, nLine, pszMessage); - - OutputDebugString(szMessage); - - if ( _pPrintDetailedDebugMessage ) - _pPrintDetailedDebugMessage( pszFileName, nLine, pszMessage ); - else if ( _pPrintDebugMessage ) - _pPrintDebugMessage( szMessage ); - else - { - if ( !getenv( "DISABLE_SAL_DBGBOX" ) ) - { - TCHAR szBoxMessage[1024]; - - /* active popup window for the current thread */ - hWndParent = GetActiveWindow(); - if (hWndParent != NULL) - hWndParent = GetLastActivePopup(hWndParent); - - /* set message box flags */ - nFlags = MB_TASKMODAL | MB_ICONWARNING | MB_YESNOCANCEL | MB_DEFBUTTON2 | MB_SETFOREGROUND; - if (hWndParent == NULL) - nFlags |= MB_SERVICE_NOTIFICATION; - - /* display the assert */ - - szBoxMessage[sizeof(szBoxMessage)-1] = 0; - _snprintf(szBoxMessage, sizeof(szBoxMessage)-1, "%s\n( Yes=Abort / No=Ignore / Cancel=Debugger )", - szMessage); - - nCode = MessageBox(hWndParent, szBoxMessage, "Assertion Failed!", nFlags); - - if (nCode == IDYES) - FatalExit(-1); - - if (nCode == IDNO) - return sal_False; /* ignore */ - - if (nCode == IDCANCEL) - return sal_True; /* will cause oslDebugBreak */ - } - else - { - fputs(szMessage, stderr); // fall back - } - return ( ( env != NULL ) && ( *env != '\0' ) ); - } - - return sal_False; -#endif /* _DEBUG && !NO_DEBUG_CRT */ -} - -sal_Int32 SAL_CALL osl_reportError(sal_uInt32 nType, const sal_Char* pszMessage) -{ - UINT nFlags; - int nDisposition; - - // active popup window for the current thread - HWND hWndParent = GetActiveWindow(); - if (hWndParent != NULL) - hWndParent = GetLastActivePopup(hWndParent); - - /* set message box flags */ - nFlags = MB_TASKMODAL | MB_ICONERROR | MB_YESNOCANCEL | MB_DEFBUTTON2 | MB_SETFOREGROUND; - if (hWndParent == NULL) - nFlags |= MB_SERVICE_NOTIFICATION; - - // display the assert - nDisposition = MessageBox(hWndParent, pszMessage, "Exception!", nFlags); - (void)nType; //unused, but part of public API/ABI - return nDisposition; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |