Hi all, I am having some issues while generating debug info for frame related instructions in fuction_prologue (for GCC 4.1.1) for a private target. (fr30 & cris backend also showed similiar error while dumping the debug info).
For my target, while generating the stack frame for local variable, if the frame size is 2 ^ 17, i have to use a scratch register. In the scratch register, i can't move immediate values greater the 2 ^ 16. So to allocate the stack frame, my insn were like this: insn = emit_insn (gen_movsi ( scratch_reg, GEN_INT (frame_size & 0xffff))); RTX_FRAME_RELATED_P (insn) = 1; ---------> (1) insn = emit_insn (gen_hi_word (scratch_reg, scratch_reg, GEN_INT(frame_size >> 16))); RTX_FRAME_RELATED_P (insn) = 1; ----------> (2) insn = emit_insn (gen_subsi3 (stack_pointer_rtx, stack_pointer_rtx, scratch_reg)); RTX_FRAME_RELATED_P (insn) = 1; -----------> (3) When the above mentioned code was invoked, i got the following error "internal compiler error: in dwarf2out_frame_debug_expr, at dwarf2out.c:1714" As a workaround, i generated a reg note (similiar to alpha & sparc) for the DWARF code to look through emit_insn (gen_movsi ( scratch_reg, GEN_INT (frame_size & 0xffff))); emit_insn (gen_hi_word (scratch_reg, scratch_reg, GEN_INT(frame_size >> 16))); insn = emit_insn (gen_subsi3 (stack_pointer_rtx, stack_pointer_rtx, scratch_reg)); RTX_FRAME_RELATED_P (insn) = 1; REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, gen_rtx_SET (VOIDmode, stack_pointer_rtx, gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (- frame_size))), REG_NOTES (insn)); If i do this, my compilation is getting through, But when i try to dump the debug_info through readelf (fr30-elf-readelf --debug-dump a.out), i am getting the following error "readelf: Error: Location lists in .debug_info section aren't in ascending order!" This is the sample test program: int main() { int temp; char new[1<<17]; return 0; } 1. Is the REG NOTE provided for the dwarf code proper? 2. What is the reason for readelf error? Regards, Rohit