summaryrefslogtreecommitdiffstats
path: root/clib
diff options
context:
space:
mode:
authorStewart Smith <stewart@linux.vnet.ibm.com>2015-12-15 18:59:00 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2015-12-15 18:59:00 +1100
commit281345fdc962398cfdb5a25f2794f0b1c1418728 (patch)
tree38deede4f1cc257fc10ddcbe033e46e22a66e5f4 /clib
parent799ef76e460a71ab27280fc7cb7a9e259cef2b7b (diff)
downloadffs-281345fdc962398cfdb5a25f2794f0b1c1418728.tar.gz
ffs-281345fdc962398cfdb5a25f2794f0b1c1418728.zip
remove custom assert implementation and exception.c
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'clib')
-rw-r--r--clib/assert.h49
-rw-r--r--clib/exception.h306
-rw-r--r--clib/src/err.c16
-rw-r--r--clib/src/exception.c152
-rw-r--r--clib/tree.h1
5 files changed, 5 insertions, 519 deletions
diff --git a/clib/assert.h b/clib/assert.h
deleted file mode 100644
index 421d074..0000000
--- a/clib/assert.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: clib/assert.h $ */
-/* */
-/* OpenPOWER FFS Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014,2015 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed 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 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-
-/*! @file assert.h
- * @brief Assertion helpers
- * @author Shaun Wetzstein <shaun@us.ibm.com>
- * @date 2010-2011
- */
-
-#ifdef assert
-#undef assert
-#endif
-
-/*!
- * @def assert(e)
- * @hideinitializer
- * @brief Check for program assertion failures
- * @param e [in] assertion expression
- * @throws ASSERTION iff expression @em e evaluates @em false
- */
-
-#ifdef NDEBUG
-#define assert(e) ((void)0)
-#else
-#include "exception.h"
-#define assert(e) ((void)((e) ? (void)0 : throw_bytes(ASSERTION, __STRING((e)), strlen(__STRING((e))))))
-#endif
diff --git a/clib/exception.h b/clib/exception.h
deleted file mode 100644
index 2874447..0000000
--- a/clib/exception.h
+++ /dev/null
@@ -1,306 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: clib/exception.h $ */
-/* */
-/* OpenPOWER FFS Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014,2015 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed 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 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-
-/*!
- * @file exception.h
- * @brief Exceptions for C
- * @details This file implements setjump / longjump based exceptions
- * @note Using these macros will create an exception context in each thread
- * @author Shaun Wetzstein <shaun@us.ibm.com>
- * @date 2008-2011
- */
-
-#ifndef __EXCEPTION_H__
-#define __EXCEPTION_H__
-
-#include <setjmp.h>
-#include <pthread.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define EX_PAGE_SIZE 4096 //!< Max. size of an exception payload
-#define EXC_MAGIC 0x45584350 //!< Magic number, i.e. "EXCP"
-
-#define ASSERTION 1 //!< Assertion exception class
-//#define UNEXPECTED 2 //!< Unexpected result exception class
-//#define ERRNO 3 //!< @em errno error exception class
-#define EXC_LAST 4
-
-typedef struct exception_frame exception_frame_t; //!< Alias for the @em exception_frame class
-
-/*!
- * @brief Exception class
- */
-typedef struct {
- int ex; //!< Exception class
-
- const char *file; //!< Source file exception was thrown
- int line; //!< Source line exception was thrown
-
- void *data; //!< User-defined data associated with the exception
- int size; //!< Size (in bytes) of the user-defined data
-} exception_t;
-
-/*!
- * @brief Exception frame class
- */
-struct exception_frame {
- unsigned long magic; //!< @private
- exception_frame_t *prev; //!< @private
- jmp_buf jmp; //!< @private
- exception_t exc; //!< @private
-};
-
-/*!
- * @def try
- * @brief Simulate a try {...} catch {...} else {...} end_try block
- * @hideinitializer
- * @details For example,
- * @code
- * ...
- * #define ERROR 4
- * ...
- * exception_t * ex;
- * ...
- * try {
- * ...
- * } catch (ERROR, ex) {
- * fprintf(stderr, "caught ERROR exception at: %s(%d)\n",
- * ex->file, ex->line);
- * struct ErrorStruct * err = (struct ErrorStruct *)ex->data
- * ...format and log err...
- * } end_try
- * @endcode
- */
-#define try \
-do { \
- __exc_init(); \
- exception_frame_t __frame; \
- memset(&__frame, 0, sizeof(__frame)); \
- __frame.magic = EXC_MAGIC, __frame.prev = __exc_get_frame(); \
- __exc_set_frame(&__frame); \
- volatile int __flag = setjmp(__frame.jmp); \
- if (__flag == 0) {
-
-/*!
- * @def catch
- * @brief Simulate a try {...} catch {...} else {...} end_try block
- * @hideinitializer
- * @details For example,
- * @code
- * ...
- * exception_t ex;
- * ...
- * try {
- * ....
- * } catch (TYPE1, ex) {
- * ...
- * } catch (TYPE2, ex) {
- * ...
- * } catch (TYPE3, ex) {
- * ...
- * } else (ex) {
- * ...
- * } end_try
- * @endcode
- */
-#define catch(x, e) \
- } else if (__flag == (x)) { \
- exception_frame_t * __tmp = __exc_get_frame(); \
- (e) = __tmp->exc, (e).ex = (__flag); \
-
-/*!
- * @def else
- * @brief Simulate a try {...} catch {...} else {...} end_try block
- * @hideinitializer
- * @details For example,
- * @code
- * ...
- * exception_t ex;
- * ...
- * try {
- * ....
- * } catch (TYPE1, ex) {
- * ...
- * } catch (TYPE2, ex) {
- * ...
- * } catch (TYPE3, ex) {
- * ...
- * } else (ex) {
- * ...
- * } end_try
- * @endcode
- */
-#define else(e) catch(__flag, (e))
-
-/*!
- * @def end_try
- * @brief Simulate a try {...} catch {...} else {...} end_try block
- * @hideinitializer
- */
-#define end_try \
- } else { \
- __exc_set_frame(__frame.prev); \
- throw_bytes(__flag, __frame.exc.data, __frame.exc.size); \
- } \
- __exc_set_frame(__frame.prev); \
-} while (0);
-
-/*!
- * @def throw(x, f, ...)
- * @brief Throw a C exception with printf-like formatting
- * @hideinitializer
- * @param x [in] Exception class
- * @param d [in] Pointer to user-defined data
- * @param s [in] Size of user-defined data (in bytes)
- * @details For example,
- * @code
- * ...
- * #define ERRNO_STRING
- * ...
- * #define throw_errno_string(x) \
- * throw(ERRNO_STRING, "errno=%d : %s", (x),
- * (void*)strerror((x)), __FILE__, __LINE__)
- * ...
- * if (rc < 0)
- * throw_errno_string(errno);
- * ...
- * exception_t ex;
- * ...
- * catch (ERRNO_STRING ex) {
- * fprintf(strerr, "EXCEPTION: errno: %s in file: %s on line: %d\n",
- * (char *)ex.data, ex.file, ex.line);
- * exit(1);
- * }
- * @endcode
- */
-#define throw(x, f, ...) ({ \
- char __d[EX_PAGE_SIZE]; \
- __exc_throw((x), __d, snprintf(__d, sizeof __d, (f), ##__VA_ARGS__),\
- __FILE__, __LINE__); \
-})
-
-/*!
- * @def rethrow(x, f, ...)
- * @brief Rethrow a C exception from within a try ... catch ... end_try block
- * @hideinitializer
- * @param e [in] Exception object
- * @details For example,
- * @code
- * ...
- * exception_t ex;
- * ...
- * catch (ERRNO_STRING ex) {
- * fprintf(strerr, "EXCEPTION: errno: %s in file: %s on line: %d\n",
- * (char *)ex.data, ex.file, ex.line);
- * rethrow(ex);
- * }
- * @endcode
- */
-#define rethrow(e) ({ \
- __exc_rethrow((e).ex, (e).data, (e).size, (e).file, (e).line); \
-})
-
-/*!
- * @def throw_bytes(x, d, s)
- * @brief Throw a C exception with user-defined data
- * @hideinitializer
- * @param x [in] Exception class
- * @param d [in] Pointer to user-defined data
- * @param s [in] Size of user-defined data (in bytes)
- * @details For example,
- * @code
- * ...
- * #define ERRNO_STRING
- * ...
- * #define throw_errno_string(x) \
- * throw_bytes(ERRNO_STRING, (void*)strerror((x)),
- * strlen(strerror((x)), __FILE__, __LINE__)
- * ...
- * if (rc < 0)
- * throw_errno_string(errno);
- * ...
- * exception_t ex;
- * ...
- * catch (ERRNO_STRING ex) {
- * fprintf(strerr, "EXCEPTION: errno: %s in file: %s on line: %d\n",
- * (char *)ex.data, ex.file, ex.line);
- * exit(1);
- * }
- * @endcode
- */
-#define throw_bytes(x, d, s) \
- __exc_throw((x), (d), (s), __FILE__, __LINE__)
-
-/*!
- * @def throw_unexpected(x)
- * @brief Throw a message (NULL terminated C string), due to an @em
- * unexpected error
- * @hideinitializer
- * @param x [in] Unexpected error message
- * @details For example,
- * @code
- * ...
- * rc = foo_function();
- * if (rc < 0)
- * throw_unexpected("Invalid return code from foo_function()");
- * ...
- * @endcode
- */
-#define throw_unexpected(x) ({ \
- __exc_throw(UNEXPECTED,((void*)x), strlen((x)), \
- __FILE__, __LINE__); \
- })
-
-/*!
- * @def throw_errno(x)
- * @brief Throw an errno number, due to an invalid function result.
- * @hideinitializer
- * @param x [in] Unexpected errno number
- * @details For example,
- * @code
- * ...
- * rc = open(...);
- * if (rc == -1)
- * throw_errno(errno);
- * ...
- * @endcode
- */
-#define throw_errno(x) ({ \
- __exc_throw(ERRNO,(void*)(x), 0, \
- __FILE__, __LINE__); \
- })
-
-/*! @cond */
-extern void __exc_init(void);
-extern exception_frame_t *__exc_get_frame(void);
-extern void __exc_set_frame(exception_frame_t *);
-extern int __exc_throw(int, void *, int, const char *, int);
-extern int __exc_rethrow(int, void *, int, const char *, int);
-extern void __exc_backtrace(const char *, ...);
-extern const char *__exc_name(int exc);
-/*! @endcond */
-
-#endif /* __EXCEPTION_H__ */
diff --git a/clib/src/err.c b/clib/src/err.c
index 8312ffd..838c22f 100644
--- a/clib/src/err.c
+++ b/clib/src/err.c
@@ -44,7 +44,7 @@
#include "err.h"
-static pthread_key_t __err_key = 0;
+static list_t *__err_key = 0;
static const char *__err_type_name[] = {
[ERR_NONE] = "none",
@@ -68,7 +68,7 @@ void err_delete(err_t * self)
err_t *err_get(void)
{
- list_t *list = (list_t *) pthread_getspecific(__err_key);
+ list_t *list = __err_key;
err_t *self = NULL;
@@ -77,7 +77,7 @@ err_t *err_get(void)
if (list_empty(list)) {
free(list), list = NULL;
- assert(pthread_setspecific(__err_key, list) == 0);
+ __err_key = list;
}
}
@@ -88,13 +88,13 @@ void err_put(err_t * self)
{
assert(self != NULL);
- list_t *list = pthread_getspecific(__err_key);
+ list_t *list = __err_key;
if (list == NULL) {
list = (list_t *) malloc(sizeof(*list));
assert(list != NULL);
list_init(list);
- assert(pthread_setspecific(__err_key, list) == 0);
+ __err_key = list;
}
list_add_head(list, &self->node);
@@ -207,9 +207,3 @@ const char *err_type_name(err_t * self)
return __err_type_name[self->type];
}
-/* =======================================================================*/
-
-__constructor static void __err__ctor__(void)
-{
- assert(pthread_key_create(&__err_key, NULL) == 0);
-}
diff --git a/clib/src/exception.c b/clib/src/exception.c
deleted file mode 100644
index 747bb7d..0000000
--- a/clib/src/exception.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: clib/src/exception.c $ */
-/* */
-/* OpenPOWER FFS Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014,2015 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed 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 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-
-/*
- * File: exc.c
- * Author: Shaun Wetzstein <shaun@us.ibm.com>
- * Descr: {set,long}jmp implementation of exceptions for C code.
- * Note: using these macros will create an exception context
- * in each thread.
- * Date: 7/06/09
- */
-
-#include <errno.h>
-#include <assert.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <execinfo.h>
-
-#include "exception.h"
-#include "misc.h"
-
-/* =======================================================================*/
-
-const char *exception_name[] = {
- "assertion",
- "unexpected",
- "errno",
-};
-
-typedef struct exception_context {
- pthread_once_t once;
- pthread_key_t key;
-} exception_context;
-
-/* =======================================================================*/
-
-static exception_context __exc_ctx = { PTHREAD_ONCE_INIT, 0 };
-
-static inline void __exc_key_create(void)
-{
- if (pthread_key_create(&__exc_ctx.key, NULL))
- __exc_throw(ASSERTION, NULL, 0, __FILE__, __LINE__);
-}
-
-/* =======================================================================*/
-
-void __exc_init(void)
-{
- if (pthread_once(&__exc_ctx.once, __exc_key_create))
- __exc_throw(ASSERTION, NULL, 0, __FILE__, __LINE__);
-}
-
-exception_frame_t *__exc_get_frame(void)
-{
- return (exception_frame_t *) (pthread_getspecific(__exc_ctx.key));
-}
-
-void __exc_set_frame(exception_frame_t * f)
-{
- if (pthread_setspecific(__exc_ctx.key, f))
- __exc_throw(ASSERTION, NULL, 0, __FILE__, __LINE__);
-}
-
-void __exc_backtrace(const char *fmt, ...)
-{
- if (fmt != NULL) {
- va_list va;
- va_start(va, fmt);
- vfprintf(stderr, fmt, va);
- va_end(va);
- }
-
- fprintf(stderr, "========== backtrace ==========\n");
- void *bt[1024];
- int nr = backtrace(bt, sizeof bt);
- backtrace_symbols_fd(bt, nr, fileno(stderr));
- fprintf(stderr, "========== backtrace ==========\n");
-}
-
-int __exc_throw(int ex, void *data, int size, const char *file, int line)
-{
- extern char *program_invocation_short_name;
-
- exception_frame_t *frame = __exc_get_frame();
-
- if (frame == NULL) {
- __exc_backtrace
- ("*** UNHANDLED EXCEPTION *** -- %s: %s(%d) ex=%d\n\n",
- program_invocation_short_name, file, line, ex);
- abort();
- }
-
- if (frame->magic != EXC_MAGIC) {
- __exc_backtrace
- ("*** CORRUPTED EXCEPTION FRAME *** -- %s: %s(%d) ex=%d\n\n",
- program_invocation_short_name, file, line, ex);
- abort();
- }
-
- frame->exc.file = file;
- frame->exc.line = line;
-
- frame->exc.data = data;
- frame->exc.size = size;
-
- longjmp(frame->jmp, ex);
-
- return -1;
-}
-
-int __exc_rethrow(int ex, void *data, int size, const char *file, int line)
-{
- exception_frame_t *frame = __exc_get_frame();
-
- if (frame != NULL)
- __exc_set_frame(frame->prev);
-
- return __exc_throw(ex, data, size, file, line);
-}
-
-const char *__exc_name(int exc)
-{
- return (exc < 0 || EXC_LAST <= exc) ? NULL : exception_name[exc];
-}
-
-__constructor void __exc_ctor(void)
-{
- __exc_init();
-}
diff --git a/clib/tree.h b/clib/tree.h
index f6736f8..dafdf38 100644
--- a/clib/tree.h
+++ b/clib/tree.h
@@ -69,7 +69,6 @@
#include <stdio.h>
#include <string.h>
-#include "exception.h"
#include "builtin.h"
#include "compare.h"
#include "type.h"
OpenPOWER on IntegriCloud