diff options
author | Iain Sandoe <iain@sandoe.co.uk> | 2024-02-18 06:52:47 +0000 |
---|---|---|
committer | Iain Sandoe <iain@sandoe.co.uk> | 2024-02-21 07:53:22 +0000 |
commit | c0a80af4a1d70562dd6671047fe6dd92dcc3f544 (patch) | |
tree | bcbaeeb85fb36ea51fae626af827ad99d22fed2d /libgcc | |
parent | 0a6a5f8656ccf9a60ac516c68cd4eb40ff4630c4 (diff) | |
download | gcc-c0a80af4a1d70562dd6671047fe6dd92dcc3f544.zip gcc-c0a80af4a1d70562dd6671047fe6dd92dcc3f544.tar.gz gcc-c0a80af4a1d70562dd6671047fe6dd92dcc3f544.tar.bz2 |
libgcc, aarch64: Allow for BE platforms in heap trampolines.
This arranges that the byte order of the instruction sequences is
independent of the byte order of memory.
libgcc/ChangeLog:
* config/aarch64/heap-trampoline.c
(aarch64_trampoline_insns): Arrange to encode instructions as a
byte array so that the order is independent of memory byte order.
(struct aarch64_trampoline): Likewise.
Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/config/aarch64/heap-trampoline.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/libgcc/config/aarch64/heap-trampoline.c b/libgcc/config/aarch64/heap-trampoline.c index 1e3460b..885df62 100644 --- a/libgcc/config/aarch64/heap-trampoline.c +++ b/libgcc/config/aarch64/heap-trampoline.c @@ -30,23 +30,23 @@ void __gcc_nested_func_ptr_created (void *chain, void *func, void *dst); void __gcc_nested_func_ptr_deleted (void); #if defined(__linux__) -static const uint32_t aarch64_trampoline_insns[] = { - 0xd503245f, /* hint 34 */ - 0x580000b1, /* ldr x17, .+20 */ - 0x580000d2, /* ldr x18, .+24 */ - 0xd61f0220, /* br x17 */ - 0xd5033f9f, /* dsb sy */ - 0xd5033fdf /* isb */ +static const unsigned char aarch64_trampoline_insns[6][4] = { + {0x5f, 0x24, 0x03, 0xd5}, /* hint 34 */ + {0xb1, 0x00, 0x00, 0x58}, /* ldr x17, .+20 */ + {0xd2, 0x00, 0x00, 0x58}, /* ldr x18, .+24 */ + {0x20, 0x02, 0x1f, 0xd6}, /* br x17 */ + {0x9f, 0x3f, 0x03, 0xd5}, /* dsb sy */ + {0xdf, 0x3f, 0x03, 0xd5} /* isb */ }; #elif __APPLE__ -static const uint32_t aarch64_trampoline_insns[] = { - 0xd503245f, /* hint 34 */ - 0x580000b1, /* ldr x17, .+20 */ - 0x580000d0, /* ldr x16, .+24 */ - 0xd61f0220, /* br x17 */ - 0xd5033f9f, /* dsb sy */ - 0xd5033fdf /* isb */ +static const unsigned char aarch64_trampoline_insns[6][4] = { + {0x5f, 0x24, 0x03, 0xd5}, /* hint 34 */ + {0xb1, 0x00, 0x00, 0x58}, /* ldr x17, .+20 */ + {0xd0, 0x00, 0x00, 0x58}, /* ldr x16, .+24 */ + {0x20, 0x02, 0x1f, 0xd6}, /* br x17 */ + {0x9f, 0x3f, 0x03, 0xd5}, /* dsb sy */ + {0xdf, 0x3f, 0x03, 0xd5} /* isb */ }; #else @@ -54,7 +54,7 @@ static const uint32_t aarch64_trampoline_insns[] = { #endif struct aarch64_trampoline { - uint32_t insns[6]; + unsigned char insns[6][4]; void *func_ptr; void *chain_ptr; }; |