Files
binutils-gdb/opcodes
Benjamin Teoh b107ba426e morello/disassembler: Fixed objdump of adrp inst with negative offset
When an adrp instruction references a symbol that is more than a page
in memory behind the instruction, it would have a negative offset.
An example of this is:

foo:
        nop
        .zero 4096
        adrp c0, foo

where adrp references 'foo' that is more than a page in memory behind
it.

In the case where the offset is negative, when translating from its
binary format, the offset was seen as an unsigned integer, which
caused a spurious high bit set in the resolved address in the adrp
instruction like in:

0000000000400078 <foo>:
 400078:   d503201f   nop
        ...
 40107c:   f0ffffe0   adrp    c0, 100400000 <__bss_end__+0xfffeeff8>

There was an issue with how the imm field of the adrp instruction was
extracted in `aarch64_ext_imm`. The value was not sign extended
correctly for capability mode targets. This was caused by the imm
field having its `P` bit being removed before the sign extension,
which is exclusive to 64-bit capability targets. This was remedied
by shortening the width of the imm field before sign extending the
imm value, resulting in:

0000000000400078 <foo>:
 400078:   d503201f   nop
        ...
 40107c:   f0ffffe0   adrp    c0, 400000 <foo-0x78>
2023-12-06 18:40:59 +00:00
..
2020-10-20 15:03:41 -03:00
2020-10-20 15:03:41 -03:00
2020-02-26 10:37:25 +10:30
2020-02-26 10:37:25 +10:30
2020-07-07 16:01:48 +03:00
2020-07-07 16:01:48 +03:00
2020-06-29 10:07:56 +09:30
2020-09-18 10:04:23 -07:00
2020-09-18 10:04:23 -07:00
2020-09-02 16:30:44 +09:30
2020-09-18 10:04:23 -07:00
2020-09-18 10:04:23 -07:00
2020-10-05 14:20:15 +01:00
2020-10-05 14:20:15 +01:00
2020-09-02 16:30:44 +09:30
2021-11-11 16:57:22 +00:00
2020-01-01 18:12:08 +10:30
2020-06-29 10:07:56 +09:30
2020-09-02 16:30:44 +09:30
2020-09-02 16:30:44 +09:30
2020-09-02 16:30:44 +09:30
2020-06-29 10:07:56 +09:30
2020-07-14 10:42:33 +02:00
2020-07-14 10:42:33 +02:00
2020-10-14 05:02:31 -07:00
2020-10-16 11:37:09 +08:00
2020-10-16 11:37:09 +08:00
2020-10-16 11:37:09 +08:00
2020-10-16 11:37:09 +08:00
2020-10-16 11:37:09 +08:00
2020-09-02 16:30:44 +09:30
2020-09-02 16:30:44 +09:30
2020-09-02 16:30:44 +09:30
2020-09-02 16:30:44 +09:30
2020-09-02 16:30:44 +09:30
2020-01-10 17:32:33 +10:30
2020-01-10 17:32:33 +10:30
2020-09-02 16:30:44 +09:30
2020-03-20 12:35:51 +10:30
2020-06-29 10:07:56 +09:30
2020-09-02 16:30:44 +09:30
2020-02-26 10:37:25 +10:30
2020-02-26 10:37:25 +10:30
2020-05-28 22:08:42 +09:30
2020-01-17 12:34:03 -06:00
2020-09-02 16:30:44 +09:30
2020-09-16 16:41:33 +09:30
2020-03-22 23:20:15 +10:30
2020-06-29 10:07:56 +09:30
2020-01-13 12:12:41 +10:30
2020-01-13 12:12:41 +10:30
2020-10-05 14:20:15 +01:00
2020-06-29 10:07:56 +09:30
2020-02-26 10:37:25 +10:30
2020-09-02 16:30:44 +09:30
2020-06-29 10:07:56 +09:30
2020-09-02 16:30:44 +09:30