Skip to content
Snippets Groups Projects
Select Git revision
  • wip/smcv/library-cmp
  • master default
  • wip/smcv/longer-fallback-search
  • wip/smcv/config-fallback-search
  • revert-65a6e3e1
  • v0.20240916.0
  • v0.20240806.0
  • v0.20240520.0
  • v0.20230928.0
  • v0.20230802.0
  • v0.20221006.0
  • v0.20220623.0
  • v0.20211026.0
  • v0.20210906.0
  • v0.20210728.0
  • v0.20210114.0
  • v0.20210104.0
  • v0.20201120.0
  • v0.20201022.0
  • v0.20200921.0
  • v0.20200908.0
  • v0.20200708.0
  • v0.20200624.0
  • v0.20190926.0
  • v0.20190724.0
25 results

capsule-shim.h

Blame
  • capsule-shim.h 1.86 KiB
    // Copyright © 2017 Collabora Ltd
    
    // This file is part of libcapsule.
    
    // libcapsule is free software: you can redistribute it and/or modify
    // it under the terms of the GNU Lesser General Public License as
    // published by the Free Software Foundation; either version 2.1 of the
    // License, or (at your option) any later version.
    
    // libcapsule is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    // GNU Lesser General Public License for more details.
    
    // You should have received a copy of the GNU Lesser General Public
    // License along with libcapsule.  If not, see <http://www.gnu.org/licenses/>.
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdio.h>
    #include <execinfo.h>
    
    #include <capsule/capsule.h>
    
    #define UNVERSIONED_STUB(name) \
        void name (void) __attribute__((noreturn,visibility("default"))); \
        void name (void)                                   \
        {                                                  \
            fprintf(stderr, "! SHIM " #name " called\n" ); \
            backtrace_shim_call();                         \
            abort();                                       \
        }
    
    #define VERSIONED_STUB(name,version) \
        UNVERSIONED_STUB(name);
    
    static void
    backtrace_shim_call (void)
    {
        void *trace[16] = { NULL };
        int traced = 0;
        char **symbols = NULL;
    
        traced  = backtrace( trace, sizeof(trace)/sizeof(void *) );
        symbols = backtrace_symbols( trace, traced );
    
        for( int x = 1; x < traced; x++ )
            fprintf( stderr, "  -> %s\n", symbols[x] );
    
        free( symbols );
    }
    
    // We don't support versioned symbols properly yet, they need som
    // asm magic that looks like this and I'm not clear on the details:
    // __asm__(".symver _" #name "," #name #version)