Changeset e8d3c6f5 in mainline


Ignore:
Timestamp:
2018-01-13T00:38:49Z (6 years ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
36f0738
Parents:
9ba415e
git-author:
Jiří Zárevúcky <zarevucky.jiri@…> (2018-01-12 23:46:12)
git-committer:
Jiří Zárevúcky <zarevucky.jiri@…> (2018-01-13 00:38:49)
Message:

Align <assert.h> with standards, remove it from libposix,
and do not let malloc() use printf() with corrupted heap.

Location:
uspace/lib
Files:
1 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/assert.c

    r9ba415e re8d3c6f5  
    4141static atomic_t failed_asserts = {0};
    4242
    43 void assert_abort(const char *cond, const char *file, unsigned int line)
     43void __helenos_assert_quick_abort(const char *cond, const char *file, unsigned int line)
     44{
     45        /*
     46         * Send the message safely to kio. Nested asserts should not occur.
     47         */
     48        kio_printf("Assertion failed (%s) in file \"%s\", line %u.\n",
     49            cond, file, line);
     50       
     51        /* Sometimes we know in advance that regular printf() would likely fail. */
     52        abort();
     53}
     54
     55void __helenos_assert_abort(const char *cond, const char *file, unsigned int line)
    4456{
    4557        /*
  • uspace/lib/c/generic/malloc.c

    r9ba415e re8d3c6f5  
    3333/** @file
    3434 */
     35
     36#define _HELENOS_SOURCE
    3537
    3638#include <malloc.h>
     
    196198static futex_t malloc_futex = FUTEX_INITIALIZER;
    197199
    198 #ifndef NDEBUG
    199 
    200 #define malloc_assert(expr) \
    201         do { \
    202                 if (!(expr)) {\
    203                         heap_unlock(); \
    204                         assert_abort(#expr, __FILE__, __LINE__); \
    205                 } \
    206         } while (0)
    207 
    208 #else /* NDEBUG */
    209 
    210 #define malloc_assert(expr)
    211 
    212 #endif /* NDEBUG */
    213 
     200#define malloc_assert(expr) safe_assert(expr)
    214201
    215202#ifdef FUTEX_UPGRADABLE
  • uspace/lib/c/include/assert.h

    r9ba415e re8d3c6f5  
    3434 */
    3535
     36// XXX: The definition of `assert()` is not guarded.
     37// One must not use `#pragma once` in this header.
     38// This is in accordance with the C standard.
     39
    3640#ifndef LIBC_ASSERT_H_
    3741#define LIBC_ASSERT_H_
    3842
    3943#define static_assert(expr)     _Static_assert(expr, "")
     44
     45extern void __helenos_assert_abort(const char *, const char *, unsigned int)
     46    __attribute__((noreturn));
     47
     48extern void __helenos_assert_quick_abort(const char *, const char *, unsigned int)
     49    __attribute__((noreturn));
     50
     51#endif
    4052
    4153/** Debugging assert macro
     
    4961 */
    5062
     63#undef assert
     64
    5165#ifndef NDEBUG
     66        #define assert(expr) ((expr) ? (void) 0 : __helenos_assert_abort(#expr, __FILE__, __LINE__))
     67#else
     68        #define assert(expr) ((void) 0)
     69#endif
    5270
    53 #define assert(expr) \
    54         do { \
    55                 if (!(expr)) \
    56                         assert_abort(#expr, __FILE__, __LINE__); \
    57         } while (0)
     71#ifdef _HELENOS_SOURCE
    5872
    59 #else /* NDEBUG */
     73#undef safe_assert
    6074
    61 #define assert(expr)
     75#ifndef NDEBUG
     76        #define safe_assert(expr) ((expr) ? (void) 0 : __helenos_assert_quick_abort(#expr, __FILE__, __LINE__))
     77#else
     78        #define safe_assert(expr) ((void) 0)
     79#endif
    6280
    63 #endif /* NDEBUG */
    64 
    65 extern void assert_abort(const char *, const char *, unsigned int)
    66     __attribute__((noreturn));
    67 
    68 #endif
     81#endif /* _HELENOS_SOURCE */
    6982
    7083/** @}
  • uspace/lib/posix/source/fnmatch.c

    r9ba415e re8d3c6f5  
    4949#include "posix/string.h"
    5050#include "posix/stdlib.h"
    51 #include "posix/assert.h"
     51#include <assert.h>
    5252
    5353#include "internal/common.h"
  • uspace/lib/posix/source/pwd.c

    r9ba415e re8d3c6f5  
    4040#include "posix/string.h"
    4141#include <errno.h>
    42 #include "posix/assert.h"
     42#include <assert.h>
    4343
    4444static bool entry_read = false;
  • uspace/lib/posix/source/stdio.c

    r9ba415e re8d3c6f5  
    4040#include "posix/stdio.h"
    4141
    42 #include "posix/assert.h"
     42#include <assert.h>
    4343
    4444#include <errno.h>
  • uspace/lib/posix/source/stdio/scanf.c

    r9ba415e re8d3c6f5  
    3636#define __POSIX_DEF__(x) posix_##x
    3737
    38 #include "posix/assert.h"
     38#include <assert.h>
    3939
    4040#include <errno.h>
  • uspace/lib/posix/source/stdlib/strtold.c

    r9ba415e re8d3c6f5  
    4040#include "posix/stdlib.h"
    4141
    42 #include "posix/assert.h"
     42#include <assert.h>
    4343#include "posix/ctype.h"
    4444#include "posix/stdint.h"
  • uspace/lib/posix/source/string.c

    r9ba415e re8d3c6f5  
    4040#include "posix/string.h"
    4141
    42 #include "posix/assert.h"
     42#include <assert.h>
    4343
    4444#include <errno.h>
  • uspace/lib/posix/source/sys/wait.c

    r9ba415e re8d3c6f5  
    4141
    4242#include "libc/task.h"
    43 #include "posix/assert.h"
     43#include <assert.h>
    4444
    4545#include <errno.h>
  • uspace/lib/posix/source/time.c

    r9ba415e re8d3c6f5  
    4545
    4646#include "posix/signal.h"
    47 #include "posix/assert.h"
     47#include <assert.h>
    4848
    4949#include "libc/async.h"
Note: See TracChangeset for help on using the changeset viewer.