http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47324
--- Comment #19 from Jack Howarth <howarth at nitro dot med.uc.edu> 2011-02-09 02:50:21 UTC --- Could this be the problem code? static void output_cfa_loc (dw_cfi_ref cfi) { dw_loc_descr_ref loc; unsigned long size; if (cfi->dw_cfi_opc == DW_CFA_expression) { dw2_asm_output_data (1, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL); <====== loc = cfi->dw_cfi_oprnd2.dw_cfi_loc; } else loc = cfi->dw_cfi_oprnd1.dw_cfi_loc; /* Output the size of the block. */ size = size_of_locs (loc); dw2_asm_output_data_uleb128 (size, NULL); /* Now output the operations themselves. */ output_loc_sequence (loc); } dw_cfi_oprnd1.dw_cfi_reg_num is being passed to dw2_asm_output_data() directly with out being processed through DWARF2_FRAME_REG_OUT first.