summaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-mips-elf
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2004-11-16 10:16:30 +0000
committerRichard Sandiford <rdsandiford@googlemail.com>2004-11-16 10:16:30 +0000
commit353057a53cee99996317c9038f7de664a7d38b4c (patch)
treec4574abd52e50daa44e8f5460740c47f0ac48cbf /ld/testsuite/ld-mips-elf
parentb32d3aa2a05c297fcc8fa04c6b4c1345c6c291ad (diff)
* 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.
Diffstat (limited to 'ld/testsuite/ld-mips-elf')
-rw-r--r--ld/testsuite/ld-mips-elf/eh-frame1-n32.d263
-rw-r--r--ld/testsuite/ld-mips-elf/eh-frame1-n64.d425
-rw-r--r--ld/testsuite/ld-mips-elf/eh-frame1.ld18
-rw-r--r--ld/testsuite/ld-mips-elf/eh-frame1.s148
-rw-r--r--ld/testsuite/ld-mips-elf/mips-elf.exp4
5 files changed, 858 insertions, 0 deletions
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 0000000000..4e3321951c
--- /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 0000000000..2b175e051f
--- /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 0000000000..910a84e071
--- /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 0000000000..c8413db24e
--- /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 f0c2b84aa0..c3417bcc4b 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"
+}