From 353057a53cee99996317c9038f7de664a7d38b4c Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Tue, 16 Nov 2004 10:16:30 +0000 Subject: * elf-bfd.h (eh_cie_fde): Add new fields: add_augmentation_size and add_fde_encoding. Remove need_relative. * elf-eh-frame.c (extra_augmentation_string_bytes) (extra_augmentation_data_bytes, size_of_output_cie_fde): New functions. (_bfd_elf_discard_section_eh_frame): Consider changing the FDE encoding in cases where the CIE has no existing 'R' augmentation. Use size_of_output_cie_fde when assigning offsets. Use the final offset as the new section size. (_bfd_elf_eh_frame_section_offset): Remove need_relative handling. Account for any extra augmentation bytes in the returned offset. (_bfd_elf_write_section_eh_frame): Rework so that the entries are moved before being modified. Pad growing entries with DW_CFA_nops. Add 'z' and 'R' augmentations as directed by add_augmentation_size and add_fde_encoding. --- ld/testsuite/ChangeLog | 6 + ld/testsuite/ld-mips-elf/eh-frame1-n32.d | 263 +++++++++++++++++++ ld/testsuite/ld-mips-elf/eh-frame1-n64.d | 425 +++++++++++++++++++++++++++++++ ld/testsuite/ld-mips-elf/eh-frame1.ld | 18 ++ ld/testsuite/ld-mips-elf/eh-frame1.s | 148 +++++++++++ ld/testsuite/ld-mips-elf/mips-elf.exp | 4 + 6 files changed, 864 insertions(+) create mode 100644 ld/testsuite/ld-mips-elf/eh-frame1-n32.d create mode 100644 ld/testsuite/ld-mips-elf/eh-frame1-n64.d create mode 100644 ld/testsuite/ld-mips-elf/eh-frame1.ld create mode 100644 ld/testsuite/ld-mips-elf/eh-frame1.s (limited to 'ld') diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 2851668..094fe60 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2004-11-16 Richard Sandiford + + * ld-mips-elf/eh-frame1.{s,ld}, + * ld-mips-elf/eh-frame1-{n32,n64},d: New test. + * ld-mips-elf/mips-elf.exp: Run it. + 2004-11-10 Alan Modra * ld-d10v/reloc-003.d: Update for changed error message. diff --git a/ld/testsuite/ld-mips-elf/eh-frame1-n32.d b/ld/testsuite/ld-mips-elf/eh-frame1-n32.d new file mode 100644 index 0000000..4e33219 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/eh-frame1-n32.d @@ -0,0 +1,263 @@ +#name: MIPS eh-frame 1, n32 +#source: eh-frame1.s +#source: eh-frame1.s +#as: -EB -n32 --defsym alignment=2 --defsym fill=0x40 +#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 0xbc +000300dc 00000003 R_MIPS_REL32 * +000300f0 00000003 R_MIPS_REL32 * +# Likewise CIE 0x220 +00030240 00000003 R_MIPS_REL32 * +00030254 00000003 R_MIPS_REL32 * +0003008b 00000503 R_MIPS_REL32 00000000 foo +000300d0 00000503 R_MIPS_REL32 00000000 foo +0003010e 00000503 R_MIPS_REL32 00000000 foo +000301ef 00000503 R_MIPS_REL32 00000000 foo +00030234 00000503 R_MIPS_REL32 00000000 foo +00030272 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_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + +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 00000018 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_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_nop + DW_CFA_nop + +00000094 00000010 00000020 FDE cie=00000078 pc=000200f0..00020100 + DW_CFA_advance_loc: 0 to 000200f0 + DW_CFA_advance_loc: 0 to 000200f0 + DW_CFA_advance_loc: 0 to 000200f0 + +000000a8 00000010 00000034 FDE cie=00000078 pc=00020100..00020120 + DW_CFA_advance_loc: 0 to 00020100 + DW_CFA_advance_loc: 0 to 00020100 + DW_CFA_advance_loc: 0 to 00020100 + +000000bc 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 + + +000000d4 00000010 0000001c FDE cie=000000bc pc=00020120..00020130 + DW_CFA_advance_loc: 0 to 00020120 + DW_CFA_advance_loc: 0 to 00020120 + DW_CFA_advance_loc: 0 to 00020120 + +000000e8 00000010 00000030 FDE cie=000000bc pc=00020130..00020150 + DW_CFA_advance_loc: 0 to 00020130 + DW_CFA_advance_loc: 0 to 00020130 + DW_CFA_advance_loc: 0 to 00020130 + +000000fc 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_advance_loc: 0 to 00000000 + +00000114 00000010 0000001c FDE cie=000000fc pc=00020150..00020160 + DW_CFA_advance_loc: 0 to 00020150 + DW_CFA_advance_loc: 0 to 00020150 + DW_CFA_advance_loc: 0 to 00020150 + +# FDE for .discard removed +# zPR2 removed +00000128 00000010 00000030 FDE cie=000000fc pc=00020160..00020190 + DW_CFA_advance_loc: 0 to 00020160 + DW_CFA_advance_loc: 0 to 00020160 + DW_CFA_advance_loc: 0 to 00020160 + +0000013c 00000010 00000044 FDE cie=000000fc pc=00020190..000201d0 + DW_CFA_advance_loc: 0 to 00020190 + DW_CFA_advance_loc: 0 to 00020190 + DW_CFA_advance_loc: 0 to 00020190 + +00000150 00000010 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 + + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + +00000164 00000010 00000018 FDE cie=00000150 pc=000201d0..000201e0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +# basic1 removed, followed by repeat of above +00000178 00000010 0000002c FDE cie=00000150 pc=000201e0..000201f0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +0000018c 00000010 00000040 FDE cie=00000150 pc=000201f0..00020210 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000001a0 00000010 00000054 FDE cie=00000150 pc=00020210..00020240 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000001b4 00000010 00000068 FDE cie=00000150 pc=00020240..00020280 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000001c8 00000010 0000007c FDE cie=00000150 pc=00020280..000202d0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000001dc 00000018 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_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_nop + DW_CFA_nop + +000001f8 00000010 00000020 FDE cie=000001dc pc=000202d0..000202e0 + DW_CFA_advance_loc: 0 to 000202d0 + DW_CFA_advance_loc: 0 to 000202d0 + DW_CFA_advance_loc: 0 to 000202d0 + +0000020c 00000010 00000034 FDE cie=000001dc pc=000202e0..00020300 + DW_CFA_advance_loc: 0 to 000202e0 + DW_CFA_advance_loc: 0 to 000202e0 + DW_CFA_advance_loc: 0 to 000202e0 + +00000220 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 + + +00000238 00000010 0000001c FDE cie=00000220 pc=00020300..00020310 + DW_CFA_advance_loc: 0 to 00020300 + DW_CFA_advance_loc: 0 to 00020300 + DW_CFA_advance_loc: 0 to 00020300 + +0000024c 00000010 00000030 FDE cie=00000220 pc=00020310..00020330 + DW_CFA_advance_loc: 0 to 00020310 + DW_CFA_advance_loc: 0 to 00020310 + DW_CFA_advance_loc: 0 to 00020310 + +00000260 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_advance_loc: 0 to 00000000 + +00000278 00000010 0000001c FDE cie=00000260 pc=00020330..00020340 + DW_CFA_advance_loc: 0 to 00020330 + DW_CFA_advance_loc: 0 to 00020330 + DW_CFA_advance_loc: 0 to 00020330 + +0000028c 00000010 00000030 FDE cie=00000260 pc=00020340..00020370 + DW_CFA_advance_loc: 0 to 00020340 + DW_CFA_advance_loc: 0 to 00020340 + DW_CFA_advance_loc: 0 to 00020340 + +000002a0 00000010 00000044 FDE cie=00000260 pc=00020370..000203b0 + DW_CFA_advance_loc: 0 to 00020370 + DW_CFA_advance_loc: 0 to 00020370 + DW_CFA_advance_loc: 0 to 00020370 + +000002b4 00000010 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 + + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + +000002c8 00000010 00000018 FDE cie=000002b4 pc=000203b0..000203c0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + diff --git a/ld/testsuite/ld-mips-elf/eh-frame1-n64.d b/ld/testsuite/ld-mips-elf/eh-frame1-n64.d new file mode 100644 index 0000000..2b175e0 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/eh-frame1-n64.d @@ -0,0 +1,425 @@ +#name: MIPS eh-frame 1, n64 +#source: eh-frame1.s +#source: eh-frame1.s +#as: -EB -64 --defsym alignment=3 --defsym fill=0x40 +#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 0x120 +000000030148 000000001203 R_MIPS_REL32 * + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * +000000030168 000000001203 R_MIPS_REL32 * + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * +# Likewise CIE 0x340 +000000030368 000000001203 R_MIPS_REL32 * + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * +000000030388 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 * +000000030138 000500001203 R_MIPS_REL32 0000000000000000 foo + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * +000000030192 000500001203 R_MIPS_REL32 0000000000000000 foo + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * +0000000302eb 000500001203 R_MIPS_REL32 0000000000000000 foo + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * +000000030358 000500001203 R_MIPS_REL32 0000000000000000 foo + *Type2: R_MIPS_64 * + *Type3: R_MIPS_NONE * +0000000303b2 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_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + 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 00000024 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_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000000e0 0000001c 0000002c FDE cie=000000b8 pc=000200f0..00020100 + DW_CFA_advance_loc: 0 to 000200f0 + DW_CFA_advance_loc: 0 to 000200f0 + DW_CFA_advance_loc: 0 to 000200f0 + DW_CFA_advance_loc: 0 to 000200f0 + DW_CFA_advance_loc: 0 to 000200f0 + DW_CFA_advance_loc: 0 to 000200f0 + DW_CFA_advance_loc: 0 to 000200f0 + +00000100 0000001c 0000004c FDE cie=000000b8 pc=00020100..00020120 + DW_CFA_advance_loc: 0 to 00020100 + DW_CFA_advance_loc: 0 to 00020100 + DW_CFA_advance_loc: 0 to 00020100 + DW_CFA_advance_loc: 0 to 00020100 + DW_CFA_advance_loc: 0 to 00020100 + DW_CFA_advance_loc: 0 to 00020100 + DW_CFA_advance_loc: 0 to 00020100 + +00000120 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 + + +00000140 0000001c 00000024 FDE cie=00000120 pc=00020120..00020130 + DW_CFA_advance_loc: 0 to 00020120 + DW_CFA_advance_loc: 0 to 00020120 + DW_CFA_advance_loc: 0 to 00020120 + DW_CFA_advance_loc: 0 to 00020120 + DW_CFA_advance_loc: 0 to 00020120 + DW_CFA_advance_loc: 0 to 00020120 + DW_CFA_advance_loc: 0 to 00020120 + +00000160 0000001c 00000044 FDE cie=00000120 pc=00020130..00020150 + DW_CFA_advance_loc: 0 to 00020130 + DW_CFA_advance_loc: 0 to 00020130 + DW_CFA_advance_loc: 0 to 00020130 + DW_CFA_advance_loc: 0 to 00020130 + DW_CFA_advance_loc: 0 to 00020130 + DW_CFA_advance_loc: 0 to 00020130 + DW_CFA_advance_loc: 0 to 00020130 + +00000180 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_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + +000001a0 0000001c 00000024 FDE cie=00000180 pc=00020150..00020160 + DW_CFA_advance_loc: 0 to 00020150 + DW_CFA_advance_loc: 0 to 00020150 + DW_CFA_advance_loc: 0 to 00020150 + DW_CFA_advance_loc: 0 to 00020150 + DW_CFA_advance_loc: 0 to 00020150 + DW_CFA_advance_loc: 0 to 00020150 + DW_CFA_advance_loc: 0 to 00020150 + +# FDE for .discard removed +# zPR2 removed +000001c0 0000001c 00000044 FDE cie=00000180 pc=00020160..00020190 + DW_CFA_advance_loc: 0 to 00020160 + DW_CFA_advance_loc: 0 to 00020160 + DW_CFA_advance_loc: 0 to 00020160 + DW_CFA_advance_loc: 0 to 00020160 + DW_CFA_advance_loc: 0 to 00020160 + DW_CFA_advance_loc: 0 to 00020160 + DW_CFA_advance_loc: 0 to 00020160 + +000001e0 0000001c 00000064 FDE cie=00000180 pc=00020190..000201d0 + DW_CFA_advance_loc: 0 to 00020190 + DW_CFA_advance_loc: 0 to 00020190 + DW_CFA_advance_loc: 0 to 00020190 + DW_CFA_advance_loc: 0 to 00020190 + DW_CFA_advance_loc: 0 to 00020190 + DW_CFA_advance_loc: 0 to 00020190 + DW_CFA_advance_loc: 0 to 00020190 + +00000200 00000014 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 + + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +00000218 0000001c 0000001c FDE cie=00000200 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 +00000238 0000001c 0000003c FDE cie=00000200 pc=000201e0..000201f0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +00000258 0000001c 0000005c FDE cie=00000200 pc=000201f0..00020210 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +00000278 0000001c 0000007c FDE cie=00000200 pc=00020210..00020240 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +00000298 0000001c 0000009c FDE cie=00000200 pc=00020240..00020280 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000002b8 0000001c 000000bc FDE cie=00000200 pc=00020280..000202d0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000002d8 00000024 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_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +00000300 0000001c 0000002c FDE cie=000002d8 pc=000202d0..000202e0 + DW_CFA_advance_loc: 0 to 000202d0 + DW_CFA_advance_loc: 0 to 000202d0 + DW_CFA_advance_loc: 0 to 000202d0 + DW_CFA_advance_loc: 0 to 000202d0 + DW_CFA_advance_loc: 0 to 000202d0 + DW_CFA_advance_loc: 0 to 000202d0 + DW_CFA_advance_loc: 0 to 000202d0 + +00000320 0000001c 0000004c FDE cie=000002d8 pc=000202e0..00020300 + DW_CFA_advance_loc: 0 to 000202e0 + DW_CFA_advance_loc: 0 to 000202e0 + DW_CFA_advance_loc: 0 to 000202e0 + DW_CFA_advance_loc: 0 to 000202e0 + DW_CFA_advance_loc: 0 to 000202e0 + DW_CFA_advance_loc: 0 to 000202e0 + DW_CFA_advance_loc: 0 to 000202e0 + +00000340 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 + + +00000360 0000001c 00000024 FDE cie=00000340 pc=00020300..00020310 + DW_CFA_advance_loc: 0 to 00020300 + DW_CFA_advance_loc: 0 to 00020300 + DW_CFA_advance_loc: 0 to 00020300 + DW_CFA_advance_loc: 0 to 00020300 + DW_CFA_advance_loc: 0 to 00020300 + DW_CFA_advance_loc: 0 to 00020300 + DW_CFA_advance_loc: 0 to 00020300 + +00000380 0000001c 00000044 FDE cie=00000340 pc=00020310..00020330 + DW_CFA_advance_loc: 0 to 00020310 + DW_CFA_advance_loc: 0 to 00020310 + DW_CFA_advance_loc: 0 to 00020310 + DW_CFA_advance_loc: 0 to 00020310 + DW_CFA_advance_loc: 0 to 00020310 + DW_CFA_advance_loc: 0 to 00020310 + DW_CFA_advance_loc: 0 to 00020310 + +000003a0 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_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + +000003c0 0000001c 00000024 FDE cie=000003a0 pc=00020330..00020340 + DW_CFA_advance_loc: 0 to 00020330 + DW_CFA_advance_loc: 0 to 00020330 + DW_CFA_advance_loc: 0 to 00020330 + DW_CFA_advance_loc: 0 to 00020330 + DW_CFA_advance_loc: 0 to 00020330 + DW_CFA_advance_loc: 0 to 00020330 + DW_CFA_advance_loc: 0 to 00020330 + +000003e0 0000001c 00000044 FDE cie=000003a0 pc=00020340..00020370 + DW_CFA_advance_loc: 0 to 00020340 + DW_CFA_advance_loc: 0 to 00020340 + DW_CFA_advance_loc: 0 to 00020340 + DW_CFA_advance_loc: 0 to 00020340 + DW_CFA_advance_loc: 0 to 00020340 + DW_CFA_advance_loc: 0 to 00020340 + DW_CFA_advance_loc: 0 to 00020340 + +00000400 0000001c 00000064 FDE cie=000003a0 pc=00020370..000203b0 + DW_CFA_advance_loc: 0 to 00020370 + DW_CFA_advance_loc: 0 to 00020370 + DW_CFA_advance_loc: 0 to 00020370 + DW_CFA_advance_loc: 0 to 00020370 + DW_CFA_advance_loc: 0 to 00020370 + DW_CFA_advance_loc: 0 to 00020370 + DW_CFA_advance_loc: 0 to 00020370 + +00000420 00000014 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: 4 + Return address column: 31 + Augmentation data: 10 + + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_advance_loc: 0 to 00000000 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +00000438 0000001c 0000001c FDE cie=00000420 pc=000203b0..000203c0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + diff --git a/ld/testsuite/ld-mips-elf/eh-frame1.ld b/ld/testsuite/ld-mips-elf/eh-frame1.ld new file mode 100644 index 0000000..910a84e --- /dev/null +++ b/ld/testsuite/ld-mips-elf/eh-frame1.ld @@ -0,0 +1,18 @@ +SECTIONS +{ + . = 0x10000; + .dynamic : { *(.dynamic) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .rel.dyn : { *(.rel.dyn) } + + . = 0x20000; + .text : { *(.text) } + + . = 0x30000; + .eh_frame : { *(.eh_frame) } + .got : { *(.got) } + + /DISCARD/ : { *(*) } +} diff --git a/ld/testsuite/ld-mips-elf/eh-frame1.s b/ld/testsuite/ld-mips-elf/eh-frame1.s new file mode 100644 index 0000000..c8413db --- /dev/null +++ b/ld/testsuite/ld-mips-elf/eh-frame1.s @@ -0,0 +1,148 @@ +#---------------------------------------------------------------------------- +# Macros +#---------------------------------------------------------------------------- + + mask = (1 << alignment) - 1 + + # Output VALUE as an unaligned pointer-sized quantity. + .macro pbyte value + .if alignment == 2 + .4byte \value + .else + .8byte \value + .endif + .endm + + + # Start a new CIE, and emit everything up to the augmentation data. + # Use LABEL to mark the start of the entry and AUG as the augmentation + # string. + .macro start_cie label,aug + .section .eh_frame,"aw",@progbits +\label: + .word 2f-1f # Length +1: + .word 0 # Identifier + .byte 1 # Version + .string "\aug" # Augmentation + .byte 1 # Code alignment + .byte 4 # Data alignment + .byte 31 # Return address column + .endm + + + # Create a dummy function of SIZE bytes in SECTION and emit the + # first four entries of an FDE for it. + .macro start_fde cie,section,size + .section \section,"ax",@progbits +3: + .rept \size / 4 + nop + .endr +4: + .section .eh_frame,"aw",@progbits + .word 2f-1f # Length +1: + .word .-\cie # CIE offset + pbyte 3b # Initial PC + pbyte 4b-3b # Size of code + .endm + + + # Finish a CIE or FDE entry. + .macro end_entry + .p2align alignment,fill +2: + .endm + + + # Start the augmentation data for a CIE that has a 'P' entry + # followed by EXTRA bytes. AUGLEN is the length of augmentation + # string (including zero terminator), ENCODING is the encoding to + # use for the personality routine and VALUE is the value it + # should have. + .macro persaug auglen,extra,encoding,value + .if (\encoding & 0xf0) == 0x50 + .byte (-(9 + \auglen + 3 + 2) & mask) + 2 + mask + \extra + .byte \encoding + .fill -(9 + \auglen + 3 + 2) & mask,1,0 + .else + .byte 2 + mask + \extra + .byte \encoding + .endif + pbyte \value + .endm + + + .macro cie_basic label + start_cie \label,"" + end_entry + .endm + + .macro fde_basic cie,section,size + start_fde \cie,\section,\size + end_entry + .endm + + + .macro cie_zP label,encoding,value + start_cie \label,"zP" + persaug 3,0,\encoding,\value + end_entry + .endm + + .macro fde_zP cie,section,size + start_fde \cie,\section,\size + .byte 0 # Augmentation length + end_entry + .endm + + + .macro cie_zPR label,encoding,value + start_cie \label,"zPR" + persaug 4,1,\encoding,\value + .byte 0 # FDE enconding + end_entry + .endm + + .macro fde_zPR cie,section,size + start_fde \cie,\section,\size + .byte 0 # Augmentation length + end_entry + .endm + +#---------------------------------------------------------------------------- +# Test code +#---------------------------------------------------------------------------- + + cie_basic basic1 + fde_basic basic1,.text,0x10 + fde_basic basic1,.text,0x20 + + cie_basic basic2 + fde_basic basic2,.text,0x30 + + cie_basic basic3 + fde_basic basic3,.text,0x40 + + cie_basic basic4 + fde_basic basic4,.text,0x50 + + cie_zP zP_unalign1,0x00,foo + fde_zP zP_unalign1,.text,0x10 + fde_zP zP_unalign1,.text,0x20 + + cie_zP zP_align1,0x50,foo + fde_zP zP_align1,.text,0x10 + fde_zP zP_align1,.text,0x20 + + cie_zPR zPR1,0x00,foo + fde_zPR zPR1,.text,0x10 + fde_zPR zPR1,.discard,0x20 + + cie_zPR zPR2,0x00,foo + fde_zPR zPR2,.text,0x30 + fde_zPR zPR2,.text,0x40 + + cie_basic basic5 + fde_basic basic5,.text,0x10 diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp index f0c2b84..c3417bc 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp @@ -75,3 +75,7 @@ if $has_newabi { } run_dump_test "reloc-2" run_dump_test "reloc-merge-lo16" +if {$has_newabi && $linux_gnu} { + run_dump_test "eh-frame1-n32" + run_dump_test "eh-frame1-n64" +} -- cgit v1.1