+2019-03-25 Tamar Christina <tamar.christina@arm.com>
+
+ * objdump.c (disassemble_bytes): Pass stop_offset.
+ * testsuite/binutils-all/aarch64/out-of-order.T: New test.
+ * testsuite/binutils-all/aarch64/out-of-order.d: New test.
+ * testsuite/binutils-all/aarch64/out-of-order.s: New test.
+
2019-03-19 Nick Clifton <nickc@redhat.com>
PR 24360
disassembling code of course, and when -D is in effect. */
inf->stop_vma = section->vma + stop_offset;
+ inf->stop_offset = stop_offset;
octets = (*disassemble_fn) (section->vma + addr_offset, inf);
inf->stop_vma = 0;
--- /dev/null
+ENTRY(v1)
+SECTIONS
+{
+ . = 0xffe00000;
+ .global : { *(.global) }
+ . = 0x4018280;
+ .func2 : { *(.func2) }
+ . = 0x4005000;
+ .func1 : { *(.func1) }
+ . = 0x4015000;
+ .func3 : { *(.func3) }
+ .data : { *(.data) }
+ .rodata : { *(.rodata) }
+}
\ No newline at end of file
--- /dev/null
+#PROG: objcopy
+#ld: -T out-of-order.T
+#objdump: -d
+#name: Check if disassembler can handle sections in different order than header
+
+.*: +file format .*aarch64.*
+
+Disassembly of section \.func2:
+
+0000000004018280 <\.func2>:
+ 4018280: 8b010000 add x0, x0, x1
+
+Disassembly of section \.func1:
+
+0000000004005000 <v1>:
+ 4005000: 8b010000 add x0, x0, x1
+ 4005004: 00000000 \.word 0x00000000
+
+Disassembly of section \.func3:
+
+0000000004015000 <\.func3>:
+ 4015000: 8b010000 add x0, x0, x1
+ 4015004: 8b010000 add x0, x0, x1
+ 4015008: 8b010000 add x0, x0, x1
+ 401500c: 8b010000 add x0, x0, x1
+ 4015010: 8b010000 add x0, x0, x1
+ 4015014: 00000000 \.word 0x00000000
--- /dev/null
+ .text
+ .global v1
+ .section .func1,"ax",@progbits
+ .type v1 %function
+ .size v1, 4
+v1:
+ add x0, x0, x1
+ .word 0
+
+ .section .func2,"ax",@progbits
+ add x0, x0, x1
+
+ .section .func3,"ax",@progbits
+ add x0, x0, x1
+ add x0, x0, x1
+ add x0, x0, x1
+ add x0, x0, x1
+ add x0, x0, x1
+ .word 0
+
+ .data
+ .section .global,"aw",@progbits
+ .xword 1
+ .xword 1
+ .xword 1
+
+ .section .rodata
+ .word 4
+2019-03-25 Tamar Christina <tamar.christina@arm.com>
+
+ * dis-asm.h (struct disassemble_info): Add stop_offset.
+
2019-03-13 Sudakshina Das <sudi.das@arm.com>
* elf/aarch64.h (DT_AARCH64_PAC_PLT): New.
file being disassembled. */
bfd_vma stop_vma;
+ /* The end range of the current range being disassembled. This is required
+ in order to notify the disassembler when it's currently handling a
+ different range than it was before. This prevent unsafe optimizations when
+ disassembling such as the way mapping symbols are found on AArch64. */
+ bfd_vma stop_offset;
+
} disassemble_info;
/* This struct is used to pass information about valid disassembler
+2019-03-25 Tamar Christina <tamar.christina@arm.com>
+
+ * aarch64-dis.c (last_stop_offset): New.
+ (print_insn_aarch64): Use stop_offset.
+
2019-03-19 H.J. Lu <hongjiu.lu@intel.com>
PR gas/24359
static enum map_type last_type;
static int last_mapping_sym = -1;
+static bfd_vma last_stop_offset = 0;
static bfd_vma last_mapping_addr = 0;
/* Other options */
/* Start scanning at the start of the function, or wherever
we finished last time. */
n = info->symtab_pos + 1;
- if (n < last_mapping_sym)
+ /* If the last stop offset is different from the current one it means we
+ are disassembling a different glob of bytes. As such the optimization
+ would not be safe and we should start over. */
+ if (n < last_mapping_sym && info->stop_offset == last_stop_offset)
n = last_mapping_sym;
/* Scan up to the location being disassembled. */
last_mapping_sym = last_sym;
last_type = type;
+ last_stop_offset = info->stop_offset;
/* Look a little bit ahead to see if we should print out
less than four bytes of data. If there's a symbol,