diff options
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/crtstuff.c | 18 |
2 files changed, 19 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ac0537f..67a1f8e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-01-21 Jakub Jelinek <jakub@redhat.com> + + * crtstuff.c (frame_dummy, __do_global_ctors_1): Call + _Jv_RegisterClasses through a function pointer. + 2004-01-21 Falk Hueffner <falk@debian.org> PR target/12898 diff --git a/gcc/crtstuff.c b/gcc/crtstuff.c index b9a29a0b..c4dbbfc 100644 --- a/gcc/crtstuff.c +++ b/gcc/crtstuff.c @@ -312,8 +312,13 @@ frame_dummy (void) #endif /* CRT_GET_RFIB_DATA */ #endif /* USE_EH_FRAME_REGISTRY */ #ifdef JCR_SECTION_NAME - if (__JCR_LIST__[0] && _Jv_RegisterClasses) - _Jv_RegisterClasses (__JCR_LIST__); + if (__JCR_LIST__[0]) + { + void (*register_classes) (void *) = _Jv_RegisterClasses; + __asm ("" : "+r" (register_classes)); + if (register_classes) + register_classes (__JCR_LIST__); + } #endif /* JCR_SECTION_NAME */ } @@ -395,8 +400,13 @@ __do_global_ctors_1(void) __register_frame_info (__EH_FRAME_BEGIN__, &object); #endif #ifdef JCR_SECTION_NAME - if (__JCR_LIST__[0] && _Jv_RegisterClasses) - _Jv_RegisterClasses (__JCR_LIST__); + if (__JCR_LIST__[0]) + { + void (*register_classes) (void *) = _Jv_RegisterClasses; + __asm ("" : "+r" (register_classes)); + if (register_classes) + register_classes (__JCR_LIST__); + } #endif } #endif /* USE_EH_FRAME_REGISTRY || JCR_SECTION_NAME */ |
