/* Alpha specific support for 64-bit ELF
- Copyright (C) 1996-2021 Free Software Foundation, Inc.
+ Copyright (C) 1996-2022 Free Software Foundation, Inc.
Contributed by Richard Henderson <rth@tamu.edu>.
This file is part of BFD, the Binary File Descriptor library.
{
HOWTO (R_ALPHA_NONE, /* type */
0, /* rightshift */
- 3, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* size */
0, /* bitsize */
true, /* pc_relative */
0, /* bitpos */
/* A 32 bit reference to a symbol. */
HOWTO (R_ALPHA_REFLONG, /* type */
0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 4, /* size */
32, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* A 64 bit reference to a symbol. */
HOWTO (R_ALPHA_REFQUAD, /* type */
0, /* rightshift */
- 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* size */
64, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
added in. */
HOWTO (R_ALPHA_GPREL32, /* type */
0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 4, /* size */
32, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* Used for an instruction that refers to memory off the GP register. */
HOWTO (R_ALPHA_LITERAL, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
This does not actually do any relocation. */
HOWTO (R_ALPHA_LITUSE, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
32, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
in the GPDISP_HI16 reloc. */
HOWTO (R_ALPHA_GPDISP, /* type */
16, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 4, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* A 21 bit branch. */
HOWTO (R_ALPHA_BRADDR, /* type */
2, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 4, /* size */
21, /* bitsize */
true, /* pc_relative */
0, /* bitpos */
/* A hint for a jump to a register. */
HOWTO (R_ALPHA_HINT, /* type */
2, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
14, /* bitsize */
true, /* pc_relative */
0, /* bitpos */
/* 16 bit PC relative offset. */
HOWTO (R_ALPHA_SREL16, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
true, /* pc_relative */
0, /* bitpos */
/* 32 bit PC relative offset. */
HOWTO (R_ALPHA_SREL32, /* type */
0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 4, /* size */
32, /* bitsize */
true, /* pc_relative */
0, /* bitpos */
/* A 64 bit PC relative offset. */
HOWTO (R_ALPHA_SREL64, /* type */
0, /* rightshift */
- 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* size */
64, /* bitsize */
true, /* pc_relative */
0, /* bitpos */
/* The high 16 bits of the displacement from GP to the target. */
HOWTO (R_ALPHA_GPRELHIGH,
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* The low 16 bits of the displacement from GP to the target. */
HOWTO (R_ALPHA_GPRELLOW,
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* A 16-bit displacement from the GP to the target. */
HOWTO (R_ALPHA_GPREL16,
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* A 21 bit branch that adjusts for gp loads. */
HOWTO (R_ALPHA_BRSGP, /* type */
2, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 4, /* size */
21, /* bitsize */
true, /* pc_relative */
0, /* bitpos */
/* Creates a tls_index for the symbol in the got. */
HOWTO (R_ALPHA_TLSGD, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* Creates a tls_index for the (current) module in the got. */
HOWTO (R_ALPHA_TLSLDM, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* A dynamic relocation for a DTP module entry. */
HOWTO (R_ALPHA_DTPMOD64, /* type */
0, /* rightshift */
- 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* size */
64, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
from DTP to the target. */
HOWTO (R_ALPHA_GOTDTPREL, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* A dynamic relocation for a displacement from DTP to the target. */
HOWTO (R_ALPHA_DTPREL64, /* type */
0, /* rightshift */
- 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* size */
64, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* The high 16 bits of the displacement from DTP to the target. */
HOWTO (R_ALPHA_DTPRELHI, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* The low 16 bits of the displacement from DTP to the target. */
HOWTO (R_ALPHA_DTPRELLO, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* A 16-bit displacement from DTP to the target. */
HOWTO (R_ALPHA_DTPREL16, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
from TP to the target. */
HOWTO (R_ALPHA_GOTTPREL, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* A dynamic relocation for a displacement from TP to the target. */
HOWTO (R_ALPHA_TPREL64, /* type */
0, /* rightshift */
- 4, /* size (0 = byte, 1 = short, 2 = long) */
+ 8, /* size */
64, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* The high 16 bits of the displacement from TP to the target. */
HOWTO (R_ALPHA_TPRELHI, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* The low 16 bits of the displacement from TP to the target. */
HOWTO (R_ALPHA_TPRELLO, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
/* A 16-bit displacement from TP to the target. */
HOWTO (R_ALPHA_TPREL16, /* type */
0, /* rightshift */
- 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 2, /* size */
16, /* bitsize */
false, /* pc_relative */
0, /* bitpos */
};
static bool
-elf64_alpha_output_extsym (struct alpha_elf_link_hash_entry *h, void * data)
+elf64_alpha_output_extsym (struct elf_link_hash_entry *x, void * data)
{
+ struct alpha_elf_link_hash_entry *h = (struct alpha_elf_link_hash_entry *) x;
struct extsym_info *einfo = (struct extsym_info *) data;
bool strip;
asection *sec, *output_section;
}
/* Can't relax dynamic symbols. */
- if (alpha_elf_dynamic_symbol_p (&info->h->root, info->link_info))
+ if (info->h != NULL
+ && alpha_elf_dynamic_symbol_p (&info->h->root, info->link_info))
return true;
changed_contents = info->changed_contents;