bfd_boolean
aarch64_fix_adjustable (struct fix *fixP)
{
- /* We need size information of the target symbols to initialise
- capabilities. */
- if (fixP->fx_r_type == BFD_RELOC_MORELLO_CAPINIT)
- return FALSE;
-
switch (fixP->fx_r_type)
{
+ /* The AArch64 GNU bfd linker can not handle 'symbol + offset' entries in the
+ GOT (it internally uses a symbol to reference a GOT slot). Hence we can't
+ emit any "section symbol + offset" relocations for the GOT. */
+ case BFD_RELOC_AARCH64_GOT_LD_PREL19:
+ case BFD_RELOC_AARCH64_ADR_GOT_PAGE:
+ case BFD_RELOC_AARCH64_LD64_GOT_LO12_NC:
+ case BFD_RELOC_AARCH64_LD32_GOT_LO12_NC:
+ case BFD_RELOC_AARCH64_MOVW_GOTOFF_G0_NC:
+ case BFD_RELOC_AARCH64_MOVW_GOTOFF_G1:
+ case BFD_RELOC_AARCH64_LD64_GOTOFF_LO15:
+ case BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14:
+ case BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15:
+ case BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21:
+ case BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC:
+ case BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC:
+ case BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19:
+ case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC:
+ case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1:
+ case BFD_RELOC_AARCH64_LD_GOT_LO12_NC:
+ case BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC:
+ return FALSE;
+
+ /* We need size information of the target symbols to initialise
+ capabilities. */
+ case BFD_RELOC_MORELLO_CAPINIT:
+ case BFD_RELOC_MORELLO_ADR_GOT_PAGE:
+ case BFD_RELOC_MORELLO_LD128_GOT_LO12_NC:
+ return FALSE;
+
/* We need to retain symbol information when jumping between A64 and C64
states or between two C64 functions. In the C64 -> C64 situation it's
really only a corner case that breaks when symbols get replaced with
.*: R_AARCH64_ADD_ABS_LO12_NC ptr
.* <f1>:
- .*: 90800002 adrp c2, 0 <_start>
- .*: R_MORELLO_ADR_GOT_PAGE \.data\+0x10
+ .*: 90800002 adrp c2, 10 <add>
+ .*: R_MORELLO_ADR_GOT_PAGE cap
.*: c2400042 ldr c2, \[c2\]
- .*: R_MORELLO_LD128_GOT_LO12_NC \.data\+0x10
+ .*: R_MORELLO_LD128_GOT_LO12_NC cap
.*: 82600042 ldr c2, \[x2\]
- .*: R_MORELLO_LD128_GOT_LO12_NC \.data\+0x20
+ .*: R_MORELLO_LD128_GOT_LO12_NC ptr
.*: f9400042 ldr x2, \[c2\]
- .*: R_AARCH64_LD64_GOT_LO12_NC \.data\+0x20
+ .*: R_AARCH64_LD64_GOT_LO12_NC ptr
.*: 82600c42 ldr x2, \[x2\]
- .*: R_AARCH64_LD64_GOT_LO12_NC \.data\+0x20
+ .*: R_AARCH64_LD64_GOT_LO12_NC ptr
18c: 39400001 ldrb w1, \[x0\]
190: d65f03c0 ret
194: f94001bc ldr x28, \[x13\]
- 194: R_AARCH64_LD64_GOTPAGE_LO15 \.data
+ 194: R_AARCH64_LD64_GOTPAGE_LO15 dummy
198: f9400000 ldr x0, \[x0\]
- 198: R_AARCH64_LD64_GOTOFF_LO15 .data
+ 198: R_AARCH64_LD64_GOTOFF_LO15 dummy
000000000000019c <llit>:
19c: deadf00d \.word 0xdeadf00d