From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15734 invoked by alias); 13 Jan 2005 23:28:25 -0000 Mailing-List: contact binutils-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sources.redhat.com Received: (qmail 15223 invoked from network); 13 Jan 2005 23:27:59 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 13 Jan 2005 23:27:59 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.11/8.12.11) with ESMTP id j0DNRxqu018166 for ; Thu, 13 Jan 2005 18:27:59 -0500 Received: from localhost (mail@vpn50-41.rdu.redhat.com [172.16.50.41]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id j0DNRvr10671 for ; Thu, 13 Jan 2005 18:27:58 -0500 Received: from rsandifo by localhost with local (Exim 3.35 #1) id 1CpENh-0003m8-00 for binutils@sources.redhat.com; Thu, 13 Jan 2005 23:27:57 +0000 To: binutils@sources.redhat.com Subject: Follow-up to November's .eh_frame optimisations (3/3) References: <877jmg3ow3.fsf@redhat.com> <873bx43oi9.fsf@redhat.com> From: Richard Sandiford Date: Thu, 13 Jan 2005 23:28:00 -0000 In-Reply-To: <873bx43oi9.fsf@redhat.com> (Richard Sandiford's message of "Thu, 13 Jan 2005 23:20:14 +0000") Message-ID: <87y8ew29ky.fsf_-_@redhat.com> User-Agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2005-01/txt/msg00135.txt.bz2 This patch follows on from: http://sources.redhat.com/ml/binutils/2005-01/msg00133.html http://sources.redhat.com/ml/binutils/2005-01/msg00134.html and implements the optimisation itself. The original code was written so that an eh_cie_fde's size could be shrunk by the amount of padding. All the patch below does is calculate the appropriate shrink value. It leaves the size as-is if it can't understand the CFA instructions. The test case I added last November was parameterised so that the CIEs and FDEs could be padded either with nops or with non-nop instructions. The existing test just pads with non-nop instructions, but the one below pads with nops instead, and checks that we don't grow a CIE or FDE if it already has room for the new data. Tested in the same way as previous patches. OK to install? Richard bfd/ * elf-eh-frame.c (skip_cfa_op, skip_non_nops): New functions. (_bfd_elf_discard_section_eh_frame): Use them to interpret the CFA instructions. If the amount of padding is known, reduce the size of the CIE or FDE by that amount. ld/testsuite/ * ld-mips-elf/eh-frame2-{n32,n64}.d: New tests. * ld-mips-elf/mips-elf.exp: Run them. *** bfd/elf-eh-frame.c.3 2005-01-07 11:12:01.423299000 +0000 --- bfd/elf-eh-frame.c 2005-01-07 11:41:02.311356990 +0000 *************** size_of_output_cie_fde (struct eh_cie_fd *** 260,265 **** --- 260,361 ---- + alignment - 1) & -alignment; } + /* Assume that the bytes between *ITER and END are CFA instructions. + Try to move *ITER past the first instruction and return true on + success. ENCODED_PTR_WIDTH gives the width of pointer entries. */ + + static bfd_boolean + skip_cfa_op (bfd_byte **iter, bfd_byte *end, unsigned int encoded_ptr_width) + { + bfd_byte op; + bfd_vma length; + + if (!read_byte (iter, end, &op)) + return FALSE; + + switch (op & 0x80 ? op & 0xc0 : op) + { + case DW_CFA_nop: + case DW_CFA_advance_loc: + case DW_CFA_restore: + /* No arguments. */ + return TRUE; + + case DW_CFA_offset: + case DW_CFA_restore_extended: + case DW_CFA_undefined: + case DW_CFA_same_value: + case DW_CFA_def_cfa_register: + case DW_CFA_def_cfa_offset: + case DW_CFA_def_cfa_offset_sf: + case DW_CFA_GNU_args_size: + /* One leb128 argument. */ + return skip_leb128 (iter, end); + + case DW_CFA_offset_extended: + case DW_CFA_register: + case DW_CFA_def_cfa: + case DW_CFA_offset_extended_sf: + case DW_CFA_GNU_negative_offset_extended: + case DW_CFA_def_cfa_sf: + /* Two leb128 arguments. */ + return (skip_leb128 (iter, end) + && skip_leb128 (iter, end)); + + case DW_CFA_def_cfa_expression: + /* A variable-length argument. */ + return (read_uleb128 (iter, end, &length) + && skip_bytes (iter, end, length)); + + case DW_CFA_expression: + /* A leb128 followed by a variable-length argument. */ + return (skip_leb128 (iter, end) + && read_uleb128 (iter, end, &length) + && skip_bytes (iter, end, length)); + + case DW_CFA_set_loc: + return skip_bytes (iter, end, encoded_ptr_width); + + case DW_CFA_advance_loc1: + return skip_bytes (iter, end, 1); + + case DW_CFA_advance_loc2: + return skip_bytes (iter, end, 2); + + case DW_CFA_advance_loc4: + return skip_bytes (iter, end, 4); + + case DW_CFA_MIPS_advance_loc8: + return skip_bytes (iter, end, 8); + + default: + return FALSE; + } + } + + /* Try to interpret the bytes between BUF and END as CFA instructions. + If every byte makes sense, return a pointer to the first DW_CFA_nop + padding byte, or END if there is no padding. Return null otherwise. + ENCODED_PTR_WIDTH is as for skip_cfa_op. */ + + static bfd_byte * + skip_non_nops (bfd_byte *buf, bfd_byte *end, unsigned int encoded_ptr_width) + { + bfd_byte *last; + + last = buf; + while (buf < end) + if (*buf == DW_CFA_nop) + buf++; + else + { + if (!skip_cfa_op (&buf, end, encoded_ptr_width)) + return 0; + last = buf; + } + return last; + } + /* This function is called for each input file before the .eh_frame section is relocated. It discards duplicate CIEs and FDEs for discarded functions. The function returns TRUE iff any entries have been *************** _bfd_elf_discard_section_eh_frame *** 356,362 **** for (;;) { unsigned char *aug; ! bfd_byte *start, *end; bfd_size_type length; if (sec_info->count == sec_info->alloced) --- 452,458 ---- for (;;) { unsigned char *aug; ! bfd_byte *start, *end, *insns; bfd_size_type length; if (sec_info->count == sec_info->alloced) *************** _bfd_elf_discard_section_eh_frame *** 602,613 **** if (cie.fde_encoding == DW_EH_PE_omit) cie.fde_encoding = DW_EH_PE_absptr; ! initial_insn_length = cie.hdr.length - (buf - last_fde - 4); if (initial_insn_length <= 50) { cie.initial_insn_length = initial_insn_length; memcpy (cie.initial_instructions, buf, initial_insn_length); } buf += initial_insn_length; ENSURE_NO_RELOCS (buf); last_cie = last_fde; --- 698,710 ---- if (cie.fde_encoding == DW_EH_PE_omit) cie.fde_encoding = DW_EH_PE_absptr; ! initial_insn_length = end - buf; if (initial_insn_length <= 50) { cie.initial_insn_length = initial_insn_length; memcpy (cie.initial_instructions, buf, initial_insn_length); } + insns = buf; buf += initial_insn_length; ENSURE_NO_RELOCS (buf); last_cie = last_fde; *************** _bfd_elf_discard_section_eh_frame *** 648,665 **** /* Skip the augmentation size, if present. */ if (cie.augmentation[0] == 'z') ! REQUIRE (skip_leb128 (&buf, end)); /* Of the supported augmentation characters above, only 'L' adds augmentation data to the FDE. This code would need to be adjusted if any future augmentations do the same thing. */ if (cie.lsda_encoding != DW_EH_PE_omit) ! this_inf->lsda_offset = buf - start; buf = last_fde + 4 + hdr.length; SKIP_RELOCS (buf); } this_inf->fde_encoding = cie.fde_encoding; this_inf->lsda_encoding = cie.lsda_encoding; sec_info->count++; --- 745,782 ---- /* Skip the augmentation size, if present. */ if (cie.augmentation[0] == 'z') ! REQUIRE (read_uleb128 (&buf, end, &length)); ! else ! length = 0; /* Of the supported augmentation characters above, only 'L' adds augmentation data to the FDE. This code would need to be adjusted if any future augmentations do the same thing. */ if (cie.lsda_encoding != DW_EH_PE_omit) ! { ! this_inf->lsda_offset = buf - start; ! /* If there's no 'z' augmentation, we don't know where the ! CFA insns begin. Assume no padding. */ ! if (cie.augmentation[0] != 'z') ! length = end - buf; ! } ! ! /* Skip over the augmentation data. */ ! REQUIRE (skip_bytes (&buf, end, length)); ! insns = buf; buf = last_fde + 4 + hdr.length; SKIP_RELOCS (buf); } + /* Try to interpret the CFA instructions and find the first + padding nop. Shrink this_inf's size so that it doesn't + including the padding. */ + length = get_DW_EH_PE_width (cie.fde_encoding, ptr_size); + insns = skip_non_nops (insns, end, length); + if (insns != 0) + this_inf->size -= end - insns; + this_inf->fde_encoding = cie.fde_encoding; this_inf->lsda_encoding = cie.lsda_encoding; sec_info->count++; Index: ld/testsuite/ld-mips-elf/mips-elf.exp =================================================================== RCS file: /cvs/src/src/ld/testsuite/ld-mips-elf/mips-elf.exp,v retrieving revision 1.23 diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.23 mips-elf.exp *** ld/testsuite/ld-mips-elf/mips-elf.exp 14 Dec 2004 09:48:20 -0000 1.23 --- ld/testsuite/ld-mips-elf/mips-elf.exp 7 Jan 2005 12:19:22 -0000 *************** run_dump_test "reloc-merge-lo16" *** 78,83 **** --- 78,85 ---- if {$has_newabi && $linux_gnu} { run_dump_test "eh-frame1-n32" run_dump_test "eh-frame1-n64" + run_dump_test "eh-frame2-n32" + run_dump_test "eh-frame2-n64" } run_dump_test "jaloverflow" diff -c /dev/null ld/testsuite/ld-mips-elf/eh-frame2-n32.d *** /dev/null 2004-12-03 11:50:38.225654048 +0000 --- ld/testsuite/ld-mips-elf/eh-frame2-n32.d 2005-01-07 12:19:05.517449557 +0000 *************** *** 0 **** --- 1,255 ---- + #name: MIPS eh-frame 2, n32 + #source: eh-frame1.s + #source: eh-frame1.s + #as: -EB -n32 --defsym alignment=2 --defsym fill=0 + #readelf: --relocs -wf + #ld: -shared -melf32btsmipn32 -Teh-frame1.ld + + Relocation section '\.rel\.dyn' .*: + *Offset .* + 00000000 00000000 R_MIPS_NONE * + # Initial PCs for the FDEs attached to CIE 0xb8 + 000300d8 00000003 R_MIPS_REL32 * + 000300ec 00000003 R_MIPS_REL32 * + # Likewise CIE 0x218 + 00030238 00000003 R_MIPS_REL32 * + 0003024c 00000003 R_MIPS_REL32 * + 0003008b 00000503 R_MIPS_REL32 00000000 foo + 000300cc 00000503 R_MIPS_REL32 00000000 foo + 0003010a 00000503 R_MIPS_REL32 00000000 foo + 000301eb 00000503 R_MIPS_REL32 00000000 foo + 0003022c 00000503 R_MIPS_REL32 00000000 foo + 0003026a 00000503 R_MIPS_REL32 00000000 foo + #... + The section \.eh_frame contains: + + 00000000 00000010 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000014 00000010 00000018 FDE cie=00000000 pc=00020000..00020010 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000028 00000010 0000002c FDE cie=00000000 pc=00020010..00020030 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + # basic2 removed + 0000003c 00000010 00000040 FDE cie=00000000 pc=00020030..00020060 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + # basic3 removed + 00000050 00000010 00000054 FDE cie=00000000 pc=00020060..000200a0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + # basic4 removed + 00000064 00000010 00000068 FDE cie=00000000 pc=000200a0..000200f0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000078 00000014 00000000 CIE + Version: 1 + Augmentation: "zRP" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 00 00 00 00 00 + + DW_CFA_nop + + 00000090 00000010 0000001c FDE cie=00000078 pc=000200f0..00020100 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000000a4 00000010 00000030 FDE cie=00000078 pc=00020100..00020120 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000000b8 00000014 00000000 CIE + Version: 1 + Augmentation: "zP" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 50 00 00 00 00 00 00 00 + + + 000000d0 00000010 0000001c FDE cie=000000b8 pc=00020120..00020130 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000000e4 00000010 00000030 FDE cie=000000b8 pc=00020130..00020150 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000000f8 00000014 00000000 CIE + Version: 1 + Augmentation: "zPR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 00 00 00 00 00 10 + + DW_CFA_nop + + 00000110 00000010 0000001c FDE cie=000000f8 pc=00020150..00020160 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + # FDE for .discard removed + # zPR2 removed + 00000124 00000010 00000030 FDE cie=000000f8 pc=00020160..00020190 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000138 00000010 00000044 FDE cie=000000f8 pc=00020190..000201d0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 0000014c 00000010 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000160 00000010 00000018 FDE cie=0000014c pc=000201d0..000201e0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + # basic1 removed, followed by repeat of above + 00000174 00000010 0000002c FDE cie=0000014c pc=000201e0..000201f0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000188 00000010 00000040 FDE cie=0000014c pc=000201f0..00020210 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 0000019c 00000010 00000054 FDE cie=0000014c pc=00020210..00020240 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000001b0 00000010 00000068 FDE cie=0000014c pc=00020240..00020280 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000001c4 00000010 0000007c FDE cie=0000014c pc=00020280..000202d0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000001d8 00000014 00000000 CIE + Version: 1 + Augmentation: "zRP" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 00 00 00 00 00 + + DW_CFA_nop + + 000001f0 00000010 0000001c FDE cie=000001d8 pc=000202d0..000202e0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000204 00000010 00000030 FDE cie=000001d8 pc=000202e0..00020300 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000218 00000014 00000000 CIE + Version: 1 + Augmentation: "zP" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 50 00 00 00 00 00 00 00 + + + 00000230 00000010 0000001c FDE cie=00000218 pc=00020300..00020310 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000244 00000010 00000030 FDE cie=00000218 pc=00020310..00020330 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000258 00000014 00000000 CIE + Version: 1 + Augmentation: "zPR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 00 00 00 00 00 10 + + DW_CFA_nop + + 00000270 00000010 0000001c FDE cie=00000258 pc=00020330..00020340 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000284 00000010 00000030 FDE cie=00000258 pc=00020340..00020370 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000298 00000010 00000044 FDE cie=00000258 pc=00020370..000203b0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000002ac 00000010 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000002c0 00000010 00000018 FDE cie=000002ac pc=000203b0..000203c0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + diff -c /dev/null ld/testsuite/ld-mips-elf/eh-frame2-n64.d *** /dev/null 2004-12-03 11:50:38.225654048 +0000 --- ld/testsuite/ld-mips-elf/eh-frame2-n64.d 2005-01-07 12:18:53.819199714 +0000 *************** *** 0 **** --- 1,409 ---- + #name: MIPS eh-frame 2, n64 + #source: eh-frame1.s + #source: eh-frame1.s + #as: -EB -64 --defsym alignment=3 --defsym fill=0 + #readelf: --relocs -wf + #ld: -shared -melf64btsmip -Teh-frame1.ld + + Relocation section '\.rel\.dyn' .*: + *Offset .* + 000000000000 000000000000 R_MIPS_NONE * + *Type2: R_MIPS_NONE * + *Type3: R_MIPS_NONE * + # Initial PCs for the FDEs attached to CIE 0x118 + 000000030140 000000001203 R_MIPS_REL32 * + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * + 000000030160 000000001203 R_MIPS_REL32 * + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * + # Likewise CIE 0x330 + 000000030358 000000001203 R_MIPS_REL32 * + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * + 000000030378 000000001203 R_MIPS_REL32 * + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * + 0000000300cb 000500001203 R_MIPS_REL32 0000000000000000 foo + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * + 000000030130 000500001203 R_MIPS_REL32 0000000000000000 foo + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * + 00000003018a 000500001203 R_MIPS_REL32 0000000000000000 foo + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * + 0000000302e3 000500001203 R_MIPS_REL32 0000000000000000 foo + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * + 000000030348 000500001203 R_MIPS_REL32 0000000000000000 foo + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * + 0000000303a2 000500001203 R_MIPS_REL32 0000000000000000 foo + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * + #... + The section \.eh_frame contains: + + 00000000 00000014 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000018 0000001c 0000001c FDE cie=00000000 pc=00020000..00020010 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000038 0000001c 0000003c FDE cie=00000000 pc=00020010..00020030 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + # basic2 removed + 00000058 0000001c 0000005c FDE cie=00000000 pc=00020030..00020060 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + # basic3 removed + 00000078 0000001c 0000007c FDE cie=00000000 pc=00020060..000200a0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + # basic4 removed + 00000098 0000001c 0000009c FDE cie=00000000 pc=000200a0..000200f0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000000b8 0000001c 00000000 CIE + Version: 1 + Augmentation: "zRP" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 00 00 00 00 00 00 00 00 00 + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000000d8 0000001c 00000024 FDE cie=000000b8 pc=000200f0..00020100 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000000f8 0000001c 00000044 FDE cie=000000b8 pc=00020100..00020120 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000118 0000001c 00000000 CIE + Version: 1 + Augmentation: "zP" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + + 00000138 0000001c 00000024 FDE cie=00000118 pc=00020120..00020130 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000158 0000001c 00000044 FDE cie=00000118 pc=00020130..00020150 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000178 0000001c 00000000 CIE + Version: 1 + Augmentation: "zPR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 00 00 00 00 00 00 00 00 00 10 + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000198 0000001c 00000024 FDE cie=00000178 pc=00020150..00020160 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + # FDE for .discard removed + # zPR2 removed + 000001b8 0000001c 00000044 FDE cie=00000178 pc=00020160..00020190 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000001d8 0000001c 00000064 FDE cie=00000178 pc=00020190..000201d0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000001f8 00000014 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000210 0000001c 0000001c FDE cie=000001f8 pc=000201d0..000201e0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + # basic1 removed, followed by repeat of above + 00000230 0000001c 0000003c FDE cie=000001f8 pc=000201e0..000201f0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000250 0000001c 0000005c FDE cie=000001f8 pc=000201f0..00020210 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000270 0000001c 0000007c FDE cie=000001f8 pc=00020210..00020240 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000290 0000001c 0000009c FDE cie=000001f8 pc=00020240..00020280 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000002b0 0000001c 000000bc FDE cie=000001f8 pc=00020280..000202d0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000002d0 0000001c 00000000 CIE + Version: 1 + Augmentation: "zRP" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 00 00 00 00 00 00 00 00 00 + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000002f0 0000001c 00000024 FDE cie=000002d0 pc=000202d0..000202e0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000310 0000001c 00000044 FDE cie=000002d0 pc=000202e0..00020300 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000330 0000001c 00000000 CIE + Version: 1 + Augmentation: "zP" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + + 00000350 0000001c 00000024 FDE cie=00000330 pc=00020300..00020310 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000370 0000001c 00000044 FDE cie=00000330 pc=00020310..00020330 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000390 0000001c 00000000 CIE + Version: 1 + Augmentation: "zPR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 00 00 00 00 00 00 00 00 00 10 + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000003b0 0000001c 00000024 FDE cie=00000390 pc=00020330..00020340 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000003d0 0000001c 00000044 FDE cie=00000390 pc=00020340..00020370 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 000003f0 0000001c 00000064 FDE cie=00000390 pc=00020370..000203b0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000410 00000014 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + + 00000428 0000001c 0000001c FDE cie=00000410 pc=000203b0..000203c0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop +