Ignore:
Timestamp:
Oct 29, 2019, 4:01:24 PM (6 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
773db65, 9421f3d8
Parents:
7951100 (diff), 8364209 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 moved

Legend:

Unmodified
Added
Removed
  • libcfa/src/interpose.cfa

    r7951100 rb067d9b  
    1010// Created On       : Wed Mar 29 16:10:31 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat May  5 11:37:35 2018
    13 // Update Count     : 111
     12// Last Modified On : Sun Jul 14 22:57:16 2019
     13// Update Count     : 116
    1414//
    1515
     
    2525}
    2626
    27 #include "bits/debug.h"
    28 #include "bits/defs.h"
    29 #include "bits/signal.h"                                                                // sigHandler_?
    30 #include "startup.h"                                                                    // STARTUP_PRIORITY_CORE
     27#include "bits/debug.hfa"
     28#include "bits/defs.hfa"
     29#include "bits/signal.hfa"                                                              // sigHandler_?
     30#include "startup.hfa"                                                                  // STARTUP_PRIORITY_CORE
    3131
    3232//=============================================================================================
    3333// Interposing helpers
    3434//=============================================================================================
     35
     36void preload_libgcc(void) {
     37        dlopen( "libgcc_s.so.1", RTLD_NOW );
     38        if ( const char * error = dlerror() ) abort( "interpose_symbol : internal error pre-loading libgcc, %s\n", error );
     39}
    3540
    3641typedef void (* generic_fptr_t)(void);
     
    7681//=============================================================================================
    7782
    78 void sigHandler_segv ( __CFA_SIGPARMS__ );
    79 void sigHandler_ill  ( __CFA_SIGPARMS__ );
    80 void sigHandler_fpe  ( __CFA_SIGPARMS__ );
    81 void sigHandler_abort( __CFA_SIGPARMS__ );
    82 void sigHandler_term ( __CFA_SIGPARMS__ );
     83void sigHandler_segv( __CFA_SIGPARMS__ );
     84void sigHandler_ill ( __CFA_SIGPARMS__ );
     85void sigHandler_fpe ( __CFA_SIGPARMS__ );
     86void sigHandler_abrt( __CFA_SIGPARMS__ );
     87void sigHandler_term( __CFA_SIGPARMS__ );
    8388
    8489struct {
     
    9196        void __cfaabi_interpose_startup( void ) {
    9297                const char *version = NULL;
     98
     99                preload_libgcc();
    93100
    94101#pragma GCC diagnostic push
     
    103110                __cfaabi_sigaction( SIGILL , sigHandler_ill  , SA_SIGINFO );
    104111                __cfaabi_sigaction( SIGFPE , sigHandler_fpe  , SA_SIGINFO );
    105                 __cfaabi_sigaction( SIGABRT, sigHandler_abort, SA_SIGINFO | SA_RESETHAND);
     112                __cfaabi_sigaction( SIGABRT, sigHandler_abrt, SA_SIGINFO | SA_RESETHAND);
    106113                __cfaabi_sigaction( SIGTERM, sigHandler_term , SA_SIGINFO );
    107114                __cfaabi_sigaction( SIGINT , sigHandler_term , SA_SIGINFO );
     
    197204                        if ( *p == '(' ) {
    198205                                name = p;
    199                         }
    200                         else if ( *p == '+' ) {
     206                        } else if ( *p == '+' ) {
    201207                                offset_begin = p;
    202                         }
    203                         else if ( *p == ')' ) {
     208                        } else if ( *p == ')' ) {
    204209                                offset_end = p;
    205210                                break;
     
    216221
    217222                        __cfaabi_dbg_bits_print_nolock( "(%i) %s : %s + %s %s\n", frameNo, messages[i], name, offset_begin, offset_end);
    218                 }
    219                 // otherwise, print the whole line
    220                 else {
     223                } else {                                                                                // otherwise, print the whole line
    221224                        __cfaabi_dbg_bits_print_nolock( "(%i) %s\n", frameNo, messages[i] );
    222225                }
     
    251254}
    252255
    253 void sigHandler_abort( __CFA_SIGPARMS__ ) {
     256void sigHandler_abrt( __CFA_SIGPARMS__ ) {
    254257        __cfaabi_backtrace();
    255258
Note: See TracChangeset for help on using the changeset viewer.