source: src/libcfa/bits/debug.c@ 4c3ee8d

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr no_list persistent-indexer pthread-emulation qualifiedEnum
Last change on this file since 4c3ee8d was 169d944, checked in by Peter A. Buhr <pabuhr@…>, 8 years ago

update abort, remove abortf, add printing exit

  • Property mode set to 100644
File size: 2.2 KB
RevLine 
[9d944b2]1//
2// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
[c2b9f21]7// debug.c --
[9d944b2]8//
9// Author : Thierry Delisle
10// Created On : Thu Mar 30 12:30:01 2017
[6a5be52]11// Last Modified By :
12// Last Modified On :
[169d944]13// Update Count : 1
[9d944b2]14//
15
16extern "C" {
17#include <stdio.h>
18#include <stdlib.h>
19#include <string.h>
20#include <errno.h>
21#include <stdarg.h>
22#include <unistd.h>
23}
24
25enum { buffer_size = 512 };
26static char buffer[ buffer_size ];
27
28extern "C" {
29
[36982fc]30 void __cfaabi_dbg_bits_write( const char *in_buffer, int len ) {
[9d944b2]31 // ensure all data is written
[6a5be52]32 for ( int count = 0, retcode; count < len; count += retcode ) {
[9d944b2]33 in_buffer += count;
34
35 for ( ;; ) {
[6a5be52]36 retcode = write( STDERR_FILENO, in_buffer, len - count );
[9d944b2]37
38 // not a timer interrupt ?
[6a5be52]39 if ( retcode != -1 || errno != EINTR ) break;
[9d944b2]40 }
41
42 if ( retcode == -1 ) _exit( EXIT_FAILURE );
43 }
44 }
45
[36982fc]46 void __cfaabi_dbg_bits_acquire() __attribute__((__weak__)) {}
47 void __cfaabi_dbg_bits_release() __attribute__((__weak__)) {}
[9d944b2]48
[169d944]49 void __cfaabi_dbg_bits_print_safe ( const char fmt[], ... ) __attribute__(( format(printf, 1, 2) )) {
[9d944b2]50 va_list args;
51
52 va_start( args, fmt );
[36982fc]53 __cfaabi_dbg_bits_acquire();
[6a5be52]54
[9d944b2]55 int len = vsnprintf( buffer, buffer_size, fmt, args );
[36982fc]56 __cfaabi_dbg_bits_write( buffer, len );
[9d944b2]57
[36982fc]58 __cfaabi_dbg_bits_release();
[9d944b2]59 va_end( args );
60 }
61
[169d944]62 void __cfaabi_dbg_bits_print_nolock( const char fmt[], ... ) __attribute__(( format(printf, 1, 2) )) {
[9d944b2]63 va_list args;
64
65 va_start( args, fmt );
[6a5be52]66
[9d944b2]67 int len = vsnprintf( buffer, buffer_size, fmt, args );
[36982fc]68 __cfaabi_dbg_bits_write( buffer, len );
[9d944b2]69
70 va_end( args );
71 }
72
[36982fc]73 void __cfaabi_dbg_bits_print_vararg( const char fmt[], va_list args ) {
[9d944b2]74 int len = vsnprintf( buffer, buffer_size, fmt, args );
[36982fc]75 __cfaabi_dbg_bits_write( buffer, len );
[9d944b2]76 }
77
[169d944]78 void __cfaabi_dbg_bits_print_buffer( char in_buffer[], int in_buffer_size, const char fmt[], ... ) __attribute__(( format(printf, 3, 4) )) {
[9d944b2]79 va_list args;
80
81 va_start( args, fmt );
[6a5be52]82
[9d944b2]83 int len = vsnprintf( in_buffer, in_buffer_size, fmt, args );
[36982fc]84 __cfaabi_dbg_bits_write( in_buffer, len );
[9d944b2]85
86 va_end( args );
87 }
[169d944]88}
Note: See TracBrowser for help on using the repository browser.