Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.2
libgcj33
ia64-unwind.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ia64-unwind.patch of Package libgcj33
2005-01-10 David Mosberger <davidm@hpl.hp.com> PR target/18987 * config/ia64/ia64.c (process_set): For alloc insn, only call process_epilogue is !frame_pointer_needed. 2004-10-27 David Mosberger <davidm@hpl.hp.com> James E Wilson <wilson@specifixinc.com> PR target/13158 * config/ia64/ia64.c (ia64_expand_epilogue): Set RTX_FRAME_RELATED_P on sibcall alloc instruction. (process_set): Handle sibcall alloc instruction. 2003-04-01 David Mosberger <davidm@hpl.hp.com> * config/ia64/crtend.asm: (__do_global_ctors_aux): Add unwind directives. * config/ia64/crtbegin.asm: (__do_global_dtors_aux): Add unwind directives. (__do_jv_register_classes): Ditto. diff --exclude c-parse.c --exclude '*.orig' --exclude doc --exclude .brik --exclude .cvsignore --exclude build-dir -Naur gcc.orig/gcc/config/ia64/crtbegin.asm gcc-3.3.3/gcc/config/ia64/crtbegin.asm --- gcc.orig/gcc/config/ia64/crtbegin.asm 2003-01-25 10:28:42.000000000 -0700 +++ gcc-3.3.3/gcc/config/ia64/crtbegin.asm 2004-11-09 12:10:01.159552049 -0700 @@ -48,8 +48,9 @@ data8 __dso_handle# #else .section .bss + .align 8 __dso_handle: - data8 0 + .skip 8 #endif .hidden __dso_handle# @@ -116,11 +117,15 @@ .align 16 .proc __do_global_dtors_aux# __do_global_dtors_aux: + .prologue #ifndef SHARED { .mii + .save ar.pfs, r35 alloc loc3 = ar.pfs, 0, 4, 1, 0 addl loc0 = @gprel(dtor_ptr#), gp + .save rp, loc1 mov loc1 = b0 + .body } { .mib mov loc2 = gp @@ -133,6 +138,7 @@ __cxa_finalize(__dso_handle) */ { .mii + .save ar.pfs, r35 alloc loc3 = ar.pfs, 0, 4, 1, 0 addl loc0 = @gprel(dtor_ptr#), gp addl r16 = @ltoff(@fptr(__cxa_finalize#)), gp @@ -148,16 +154,17 @@ { .mmi ld8 out0 = [out0] (p7) ld8 r18 = [r16], 8 + .save rp, loc1 mov loc1 = b0 ;; } - { .mfi + { .mmi mov loc2 = gp +(p7) ld8 gp = [r16] (p7) mov b6 = r18 } { .mfb -(p7) ld8 gp = [r16] (p7) br.call.sptk.many b0 = b6 } { .mfb @@ -189,15 +196,14 @@ adds r15 = 8, r15 ;; } - { .mmi + { .mii ld8 r16 = [r16] - mov gp = loc2 mov b0 = loc1 + mov ar.pfs = loc3 ;; } { .mib cmp.ne p6, p0 = r0, r16 - mov ar.pfs = loc3 (p6) br.cond.sptk.few 0b } { .bbb @@ -209,7 +215,9 @@ .align 16 .proc __do_jv_register_classes# __do_jv_register_classes: + .prologue { .mlx + .save ar.pfs, r34 alloc loc2 = ar.pfs, 0, 3, 1, 0 movl out0 = @gprel(__JCR_LIST__) ;; @@ -232,7 +240,9 @@ } { .mii ld8 r15 = [r14], 8 + .save rp, loc0 mov loc0 = b0 + .body mov loc1 = gp ;; } diff --exclude c-parse.c --exclude '*.orig' --exclude doc --exclude .brik --exclude .cvsignore --exclude build-dir -Naur gcc.orig/gcc/config/ia64/crtend.asm gcc-3.3.3/gcc/config/ia64/crtend.asm --- gcc.orig/gcc/config/ia64/crtend.asm 2003-01-25 10:28:42.000000000 -0700 +++ gcc-3.3.3/gcc/config/ia64/crtend.asm 2004-11-09 12:10:01.160528611 -0700 @@ -74,18 +74,22 @@ #endif .proc __do_global_ctors_aux# __do_global_ctors_aux: + .prologue /* for (loc0 = __CTOR_END__-1; *p != -1; --p) (*p) (); */ { .mlx + .save ar.pfs, r36 alloc loc4 = ar.pfs, 0, 5, 0, 0 movl loc0 = @gprel(__CTOR_END__# - 8) ;; } { .mmi add loc0 = loc0, gp + .save rp, loc1 mov loc1 = b0 + .body ;; } { diff --exclude c-parse.c --exclude '*.orig' --exclude doc --exclude .brik --exclude .cvsignore --exclude build-dir -Naur gcc.orig/gcc/config/ia64/ia64.c gcc-3.3.3/gcc/config/ia64/ia64.c --- gcc.orig/gcc/config/ia64/ia64.c 2004-11-08 17:19:39.499250052 -0700 +++ gcc-3.3.3/gcc/config/ia64/ia64.c 2004-11-09 12:10:01.254278610 -0700 @@ -2885,10 +2885,13 @@ preserve those input registers used as arguments to the sibling call. It is unclear how to compute that number here. */ if (current_frame_info.n_input_regs != 0) - emit_insn (gen_alloc (gen_rtx_REG (DImode, fp), - GEN_INT (0), GEN_INT (0), - GEN_INT (current_frame_info.n_input_regs), - GEN_INT (0))); + { + rtx n_inputs = GEN_INT (current_frame_info.n_input_regs); + insn = emit_insn (gen_alloc (gen_rtx_REG (DImode, fp), + GEN_INT (0), GEN_INT (0), + n_inputs, GEN_INT (0))); + RTX_FRAME_RELATED_P (insn) = 1; + } } } @@ -7450,13 +7453,24 @@ { dest_regno = REGNO (dest); - /* If this isn't the final destination for ar.pfs, the alloc - shouldn't have been marked frame related. */ - if (dest_regno != current_frame_info.reg_save_ar_pfs) - abort (); - - fprintf (asm_out_file, "\t.save ar.pfs, r%d\n", - ia64_dbx_register_number (dest_regno)); + /* If this is the final destination for ar.pfs, then this must + be the alloc in the prologue. */ + if (dest_regno == current_frame_info.reg_save_ar_pfs) + fprintf (asm_out_file, "\t.save ar.pfs, r%d\n", + ia64_dbx_register_number (dest_regno)); + else + { + /* This must be an alloc before a sibcall. We must drop the + old frame info. The easiest way to drop the old frame + info is to ensure we had a ".restore sp" directive + followed by a new prologue. If the procedure doesn't + have a memory-stack frame, we'll issue a dummy ".restore + sp" now. */ + if (current_frame_info.total_size == 0 && !frame_pointer_needed) + /* if haven't done process_epilogue() yet, do it now */ + process_epilogue (); + fprintf (asm_out_file, "\t.prologue\n"); + } return 1; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor