Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/exception.c

    re8261bb r8f910430  
    2727#include "stdhdr/assert.h"
    2828#include "virtual.h"
     29
     30#if defined( __ARM_ARCH )
     31#warning FIX ME: temporary hack to keep ARM build working
     32#ifndef _URC_FATAL_PHASE1_ERROR
     33#define _URC_FATAL_PHASE1_ERROR 3
     34#endif // ! _URC_FATAL_PHASE1_ERROR
     35#ifndef _URC_FATAL_PHASE2_ERROR
     36#define _URC_FATAL_PHASE2_ERROR 2
     37#endif // ! _URC_FATAL_PHASE2_ERROR
     38#endif // __ARM_ARCH
     39
    2940#include "lsda.h"
    3041
     
    290301}
    291302
    292 #if defined( __x86_64 ) || defined( __i386 ) || defined( __ARM_ARCH )
     303#if defined( __x86_64 ) || defined( __i386 )
    293304// This is our personality routine. For every stack frame annotated with
    294305// ".cfi_personality 0x3,__gcfa_personality_v0" this function will be called twice when unwinding.
     
    408419                                    _Unwind_GetCFA(unwind_context) + 24;
    409420#                               elif defined( __ARM_ARCH )
    410                                     _Unwind_GetCFA(unwind_context) + 40;
     421#                                   warning FIX ME: check if anything needed for ARM
     422                                    42;
    411423#                               endif
    412424                                int (*matcher)(exception_t *) = *(int(**)(exception_t *))match_pos;
     
    525537        // HEADER
    526538        ".LFECFA1:\n"
    527 #if defined( __x86_64 ) || defined( __i386 )
    528539        "       .globl  __gcfa_personality_v0\n"
    529 #else // defined( __ARM_ARCH )
    530         "       .global __gcfa_personality_v0\n"
    531 #endif
    532540        "       .section        .gcc_except_table,\"a\",@progbits\n"
    533541        // TABLE HEADER (important field is the BODY length at the end)
     
    561569        // No clue what this does specifically
    562570        "       .section        .data.rel.local.CFA.ref.__gcfa_personality_v0,\"awG\",@progbits,CFA.ref.__gcfa_personality_v0,comdat\n"
    563 #if defined( __x86_64 ) || defined( __i386 )
    564571        "       .align 8\n"
    565 #else // defined( __ARM_ARCH )
    566         "       .align 3\n"
    567 #endif
    568572        "       .type CFA.ref.__gcfa_personality_v0, @object\n"
    569573        "       .size CFA.ref.__gcfa_personality_v0, 8\n"
     
    571575#if defined( __x86_64 )
    572576        "       .quad __gcfa_personality_v0\n"
    573 #elif defined( __i386 )
     577#else // then __i386
    574578        "       .long __gcfa_personality_v0\n"
    575 #else // defined( __ARM_ARCH )
    576         "       .xword __gcfa_personality_v0\n"
    577579#endif
    578580);
     
    581583        // HEADER
    582584        ".LFECFA1:\n"
    583 #if defined( __x86_64 ) || defined( __i386 )
    584585        "       .globl  __gcfa_personality_v0\n"
    585 #else // defined( __ARM_ARCH )
    586         "       .global __gcfa_personality_v0\n"
    587 #endif
    588586        "       .section        .gcc_except_table,\"a\",@progbits\n"
    589587        // TABLE HEADER (important field is the BODY length at the end)
     
    614612#pragma GCC pop_options
    615613
     614#elif defined( __ARM_ARCH )
     615_Unwind_Reason_Code __gcfa_personality_v0(
     616                int version,
     617                _Unwind_Action actions,
     618                unsigned long long exception_class,
     619                struct _Unwind_Exception * unwind_exception,
     620                struct _Unwind_Context * unwind_context) {
     621        return _URC_CONTINUE_UNWIND;
     622}
     623
     624__attribute__((noinline))
     625void __cfaehm_try_terminate(void (*try_block)(),
     626                void (*catch_block)(int index, exception_t * except),
     627                __attribute__((unused)) int (*match_block)(exception_t * except)) {
     628}
    616629#else
    617630        #error unsupported hardware architecture
    618 #endif // __x86_64 || __i386 || __ARM_ARCH
     631#endif // __x86_64 || __i386
Note: See TracChangeset for help on using the changeset viewer.