Browse Source

binutils, glibc: renumber relocs

The ones that are part of the dynamic linking ABI should now be finalized.
pull/6/head
Andrew Waterman 12 years ago
parent
commit
708569afb7
  1. 440
      binutils/bfd/elfxx-riscv.c
  2. 87
      binutils/include/elf/riscv.h
  3. 20
      glibc/sysdeps/riscv/dl-machine.h

440
binutils/bfd/elfxx-riscv.c

@ -52,8 +52,6 @@ static reloc_howto_type howto_table[] =
0, /* dst_mask */
FALSE), /* pcrel_offset */
EMPTY_HOWTO (1),
/* 32 bit relocation. */
HOWTO (R_RISCV_32, /* type */
0, /* rightshift */
@ -69,6 +67,21 @@ static reloc_howto_type howto_table[] =
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* 64 bit relocation. */
HOWTO (R_RISCV_64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_64", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
/* Relocation against a local symbol in a shared object. */
HOWTO (R_RISCV_RELATIVE, /* type */
0, /* rightshift */
@ -84,99 +97,125 @@ static reloc_howto_type howto_table[] =
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* 26 bit jump address. */
HOWTO (R_RISCV_JAL, /* type */
HOWTO (R_RISCV_COPY, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
TRUE, /* pc_relative */
0, /* this one is variable size */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
/* This needs complex overflow
detection, because the upper 36
bits must match the PC + 4. */
complain_overflow_bitfield, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_JAL", /* name */
"R_RISCV_COPY", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_UJTYPE_IMM(-1U), /* dst_mask */
TRUE), /* pcrel_offset */
0x0, /* src_mask */
0x0, /* dst_mask */
FALSE), /* pcrel_offset */
/* High 16 bits of symbol value. */
HOWTO (R_RISCV_HI20, /* type */
HOWTO (R_RISCV_JUMP_SLOT, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
complain_overflow_bitfield, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_HI20", /* name */
"R_RISCV_JUMP_SLOT", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_UTYPE_IMM(-1U), /* dst_mask */
0x0, /* src_mask */
0x0, /* dst_mask */
FALSE), /* pcrel_offset */
/* Low 12 bits of symbol value. */
HOWTO (R_RISCV_LO12_I, /* type */
/* Dynamic TLS relocations. */
HOWTO (R_RISCV_TLS_DTPMOD32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
4, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_LO12_I", /* name */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_DTPMOD32", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_ITYPE_IMM(-1U), /* dst_mask */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
/* Low 12 bits of symbol value. */
HOWTO (R_RISCV_LO12_S, /* type */
HOWTO (R_RISCV_TLS_DTPMOD64, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_LO12_S", /* name */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_DTPMOD64", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_STYPE_IMM(-1U), /* dst_mask */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
/* Distance between AUIPC and corresponding ADD/load. */
HOWTO (R_RISCV_PCREL_LO12_I, /* type */
HOWTO (R_RISCV_TLS_DTPREL32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
4, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_PCREL_LO12_I",/* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_ITYPE_IMM(-1U), /* dst_mask */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_DTPREL32", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
/* Distance between AUIPC and corresponding store. */
HOWTO (R_RISCV_PCREL_LO12_S, /* type */
HOWTO (R_RISCV_TLS_DTPREL64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_DTPREL64", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_RISCV_TLS_TPREL32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_PCREL_LO12_S",/* name */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_TPREL32", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_STYPE_IMM(-1U), /* dst_mask */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_RISCV_TLS_TPREL64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_TPREL64", /* name */
FALSE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
EMPTY_HOWTO (12),
EMPTY_HOWTO (13),
EMPTY_HOWTO (14),
EMPTY_HOWTO (15),
/* 12-bit PC-relative branch offset. */
HOWTO (R_RISCV_BRANCH, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@ -191,34 +230,40 @@ static reloc_howto_type howto_table[] =
ENCODE_SBTYPE_IMM(-1U),/* dst_mask */
TRUE), /* pcrel_offset */
HOWTO (R_RISCV_CALL, /* type */
/* 20-bit PC-relative jump offset. */
HOWTO (R_RISCV_JAL, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
32, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
/* This needs complex overflow
detection, because the upper 36
bits must match the PC + 4. */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_CALL", /* name */
"R_RISCV_JAL", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_UTYPE_IMM(-1U) | ((bfd_vma) ENCODE_ITYPE_IMM(-1U) << 32), /* dst_mask */
TRUE), /* pcrel_offset */
ENCODE_UJTYPE_IMM(-1U), /* dst_mask */
TRUE), /* pcrel_offset */
HOWTO (R_RISCV_PCREL_HI20, /* type */
/* 32-bit PC-relative function call (AUIPC/JALR). */
HOWTO (R_RISCV_CALL, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
64, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_PCREL_HI20", /* name */
"R_RISCV_CALL", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_UTYPE_IMM(-1U), /* dst_mask */
ENCODE_UTYPE_IMM(-1U) | ((bfd_vma) ENCODE_ITYPE_IMM(-1U) << 32), /* dst_mask */
TRUE), /* pcrel_offset */
/* 32-bit PC-relative function call (AUIPC/JALR). */
HOWTO (R_RISCV_CALL_PLT, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@ -233,32 +278,53 @@ static reloc_howto_type howto_table[] =
ENCODE_UTYPE_IMM(-1U) | ((bfd_vma) ENCODE_ITYPE_IMM(-1U) << 32), /* dst_mask */
TRUE), /* pcrel_offset */
EMPTY_HOWTO (14),
EMPTY_HOWTO (15),
EMPTY_HOWTO (16),
EMPTY_HOWTO (17),
/* High 20 bits of 32-bit PC-relative GOT access. */
HOWTO (R_RISCV_GOT_HI20, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_GOT_HI20", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_UTYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
/* 64 bit relocation. */
HOWTO (R_RISCV_64, /* type */
/* High 20 bits of 32-bit PC-relative TLS IE GOT access. */
HOWTO (R_RISCV_TLS_GOT_HI20, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_64", /* name */
"R_RISCV_TLS_GOT_HI20", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
MINUS_ONE, /* dst_mask */
ENCODE_UTYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
EMPTY_HOWTO (19),
EMPTY_HOWTO (20),
EMPTY_HOWTO (21),
/* High 20 bits of 32-bit PC-relative TLS GD GOT reference. */
HOWTO (R_RISCV_TLS_GD_HI20, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_GD_HI20", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_UTYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
/* High 16 bits of displacement in global offset table. */
HOWTO (R_RISCV_GOT_HI20, /* type */
/* High 20 bits of 32-bit PC-relative reference. */
HOWTO (R_RISCV_PCREL_HI20, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
@ -266,47 +332,88 @@ static reloc_howto_type howto_table[] =
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_GOT_HI20", /* name */
"R_RISCV_PCREL_HI20", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_UTYPE_IMM(-1U), /* dst_mask */
TRUE), /* pcrel_offset */
/* Low 12 bits of a 32-bit PC-relative load or add. */
HOWTO (R_RISCV_PCREL_LO12_I, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_PCREL_LO12_I",/* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_ITYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
EMPTY_HOWTO (23),
/* Low 12 bits of a 32-bit PC-relative store. */
HOWTO (R_RISCV_PCREL_LO12_S, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_PCREL_LO12_S",/* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_STYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_RISCV_COPY, /* type */
/* High 20 bits of 32-bit absolute address. */
HOWTO (R_RISCV_HI20, /* type */
0, /* rightshift */
0, /* this one is variable size */
0, /* bitsize */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_COPY", /* name */
"R_RISCV_HI20", /* name */
FALSE, /* partial_inplace */
0x0, /* src_mask */
0x0, /* dst_mask */
0, /* src_mask */
ENCODE_UTYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_RISCV_JUMP_SLOT, /* type */
/* High 12 bits of 32-bit load or add. */
HOWTO (R_RISCV_LO12_I, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_JUMP_SLOT", /* name */
"R_RISCV_LO12_I", /* name */
FALSE, /* partial_inplace */
0x0, /* src_mask */
0x0, /* dst_mask */
0, /* src_mask */
ENCODE_ITYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
EMPTY_HOWTO (26),
EMPTY_HOWTO (27),
EMPTY_HOWTO (28),
/* High 12 bits of 32-bit store. */
HOWTO (R_RISCV_LO12_S, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_LO12_S", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_STYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS IE GOT access in non-PIC code. */
/* High 20 bits of TLS IE GOT access in non-PIC code. */
HOWTO (R_RISCV_TLS_IE_HI20, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@ -321,7 +428,7 @@ static reloc_howto_type howto_table[] =
ENCODE_UTYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS IE GOT access in non-PIC code. */
/* Low 12 bits of TLS IE GOT access in non-PIC code. */
HOWTO (R_RISCV_TLS_IE_LO12, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@ -381,7 +488,7 @@ static reloc_howto_type howto_table[] =
0, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS LE thread pointer offset. */
/* High 20 bits of TLS LE thread pointer offset. */
HOWTO (R_RISCV_TPREL_HI20, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@ -396,7 +503,7 @@ static reloc_howto_type howto_table[] =
ENCODE_UTYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS LE thread pointer offset. */
/* Low 12 bits of TLS LE thread pointer offset for loads and adds. */
HOWTO (R_RISCV_TPREL_LO12_I, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@ -411,7 +518,7 @@ static reloc_howto_type howto_table[] =
ENCODE_ITYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS LE thread pointer offset. */
/* Low 12 bits of TLS LE thread pointer offset for stores. */
HOWTO (R_RISCV_TPREL_LO12_S, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@ -441,137 +548,6 @@ static reloc_howto_type howto_table[] =
0, /* dst_mask */
FALSE), /* pcrel_offset */
/* TLS relocations. */
HOWTO (R_RISCV_TLS_DTPMOD32, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_DTPMOD32", /* name */
FALSE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_RISCV_TLS_DTPREL32, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_DTPREL32", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_RISCV_TLS_DTPMOD64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_DTPMOD64", /* name */
FALSE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_RISCV_TLS_DTPREL64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_DTPREL64", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
EMPTY_HOWTO (42),
EMPTY_HOWTO (43),
EMPTY_HOWTO (44),
EMPTY_HOWTO (45),
EMPTY_HOWTO (46),
HOWTO (R_RISCV_TLS_TPREL32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_TPREL32", /* name */
FALSE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_RISCV_TLS_TPREL64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_TPREL64", /* name */
FALSE, /* partial_inplace */
MINUS_ONE, /* src_mask */
MINUS_ONE, /* dst_mask */
FALSE), /* pcrel_offset */
EMPTY_HOWTO (49),
EMPTY_HOWTO (50),
/* High 16 bits of displacement in global offset table. */
HOWTO (R_RISCV_TLS_GOT_HI20, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_GOT_HI20", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_UTYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
EMPTY_HOWTO (52),
/* High 16 bits of displacement in global offset table. */
HOWTO (R_RISCV_TLS_GD_HI20, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_RISCV_TLS_GD_HI20", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
ENCODE_UTYPE_IMM(-1U), /* dst_mask */
FALSE), /* pcrel_offset */
EMPTY_HOWTO (54),
EMPTY_HOWTO (55),
EMPTY_HOWTO (56),
EMPTY_HOWTO (57),
/* 32 bit in-place addition, for local label subtraction. */
HOWTO (R_RISCV_ADD32, /* type */
0, /* rightshift */

87
binutils/include/elf/riscv.h

@ -31,24 +31,34 @@
/* Relocation types. */
START_RELOC_NUMBERS (elf_riscv_reloc_type)
/* Relocation types used by the dynamic linker. */
RELOC_NUMBER (R_RISCV_NONE, 0)
RELOC_NUMBER (R_RISCV_32, 2)
RELOC_NUMBER (R_RISCV_32, 1)
RELOC_NUMBER (R_RISCV_64, 2)
RELOC_NUMBER (R_RISCV_RELATIVE, 3)
RELOC_NUMBER (R_RISCV_JAL, 4)
RELOC_NUMBER (R_RISCV_HI20, 5)
RELOC_NUMBER (R_RISCV_LO12_I, 6)
RELOC_NUMBER (R_RISCV_LO12_S, 7)
RELOC_NUMBER (R_RISCV_PCREL_LO12_I, 8)
RELOC_NUMBER (R_RISCV_PCREL_LO12_S, 9)
RELOC_NUMBER (R_RISCV_BRANCH, 10)
RELOC_NUMBER (R_RISCV_CALL, 11)
RELOC_NUMBER (R_RISCV_PCREL_HI20, 12)
RELOC_NUMBER (R_RISCV_CALL_PLT, 13)
RELOC_NUMBER (R_RISCV_64, 18)
RELOC_NUMBER (R_RISCV_GOT_HI20, 22)
RELOC_NUMBER (R_RISCV_COPY, 24)
RELOC_NUMBER (R_RISCV_JUMP_SLOT, 25)
/* TLS relocations. */
RELOC_NUMBER (R_RISCV_COPY, 4)
RELOC_NUMBER (R_RISCV_JUMP_SLOT, 5)
RELOC_NUMBER (R_RISCV_TLS_DTPMOD32, 6)
RELOC_NUMBER (R_RISCV_TLS_DTPMOD64, 7)
RELOC_NUMBER (R_RISCV_TLS_DTPREL32, 8)
RELOC_NUMBER (R_RISCV_TLS_DTPREL64, 9)
RELOC_NUMBER (R_RISCV_TLS_TPREL32, 10)
RELOC_NUMBER (R_RISCV_TLS_TPREL64, 11)
/* Relocation types not used by the dynamic linker. */
RELOC_NUMBER (R_RISCV_BRANCH, 16)
RELOC_NUMBER (R_RISCV_JAL, 17)
RELOC_NUMBER (R_RISCV_CALL, 18)
RELOC_NUMBER (R_RISCV_CALL_PLT, 19)
RELOC_NUMBER (R_RISCV_GOT_HI20, 20)
RELOC_NUMBER (R_RISCV_TLS_GOT_HI20, 21)
RELOC_NUMBER (R_RISCV_TLS_GD_HI20, 22)
RELOC_NUMBER (R_RISCV_PCREL_HI20, 23)
RELOC_NUMBER (R_RISCV_PCREL_LO12_I, 24)
RELOC_NUMBER (R_RISCV_PCREL_LO12_S, 25)
RELOC_NUMBER (R_RISCV_HI20, 26)
RELOC_NUMBER (R_RISCV_LO12_I, 27)
RELOC_NUMBER (R_RISCV_LO12_S, 28)
RELOC_NUMBER (R_RISCV_TLS_IE_HI20, 29)
RELOC_NUMBER (R_RISCV_TLS_IE_LO12, 30)
RELOC_NUMBER (R_RISCV_TLS_IE_ADD, 31)
@ -58,22 +68,13 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type)
RELOC_NUMBER (R_RISCV_TPREL_LO12_I, 35)
RELOC_NUMBER (R_RISCV_TPREL_LO12_S, 36)
RELOC_NUMBER (R_RISCV_TPREL_ADD, 37)
RELOC_NUMBER (R_RISCV_TLS_DTPMOD32, 38)
RELOC_NUMBER (R_RISCV_TLS_DTPREL32, 39)
RELOC_NUMBER (R_RISCV_TLS_DTPMOD64, 40)
RELOC_NUMBER (R_RISCV_TLS_DTPREL64, 41)
RELOC_NUMBER (R_RISCV_TLS_TPREL32, 47)
RELOC_NUMBER (R_RISCV_TLS_TPREL64, 48)
RELOC_NUMBER (R_RISCV_TLS_GOT_HI20, 51)
RELOC_NUMBER (R_RISCV_TLS_GD_HI20, 53)
RELOC_NUMBER (R_RISCV_ADD32, 58)
RELOC_NUMBER (R_RISCV_ADD64, 59)
RELOC_NUMBER (R_RISCV_SUB32, 60)
RELOC_NUMBER (R_RISCV_SUB64, 61)
RELOC_NUMBER (R_RISCV_GNU_VTINHERIT, 62)
RELOC_NUMBER (R_RISCV_GNU_VTENTRY, 63)
FAKE_RELOC (R_RISCV_max, 64)
END_RELOC_NUMBERS (R_RISCV_maxext)
RELOC_NUMBER (R_RISCV_ADD32, 38)
RELOC_NUMBER (R_RISCV_ADD64, 39)
RELOC_NUMBER (R_RISCV_SUB32, 40)
RELOC_NUMBER (R_RISCV_SUB64, 41)
RELOC_NUMBER (R_RISCV_GNU_VTINHERIT, 42)
RELOC_NUMBER (R_RISCV_GNU_VTENTRY, 43)
END_RELOC_NUMBERS (R_RISCV_max)
/* Processor specific flags for the ELF header e_flags field. */
@ -134,26 +135,4 @@ static inline unsigned int riscv_elf_name_to_flag(const char* name)
return E_RISCV_EXT_Xcustom;
}
/* Processor specific section indices. These sections do not actually
exist. Symbols with a st_shndx field corresponding to one of these
values have a special meaning. */
/* Defined and allocated common symbol. Value is virtual address. If
relocated, alignment must be preserved. */
#define SHN_RISCV_ACOMMON SHN_LORESERVE
/* Defined and allocated text symbol. Value is virtual address.
Occur in the dynamic symbol table of Alpha OSF/1 and Irix 5 executables. */
#define SHN_RISCV_TEXT (SHN_LORESERVE + 1)
/* Defined and allocated data symbol. Value is virtual address.
Occur in the dynamic symbol table of Alpha OSF/1 and Irix 5 executables. */
#define SHN_RISCV_DATA (SHN_LORESERVE + 2)
/* Small common symbol. */
#define SHN_RISCV_SCOMMON (SHN_LORESERVE + 3)
/* Small undefined symbol. */
#define SHN_RISCV_SUNDEFINED (SHN_LORESERVE + 4)
#endif /* _ELF_RISCV_H */

20
glibc/sysdeps/riscv/dl-machine.h

@ -28,17 +28,17 @@
/* Relocs. */
#define R_RISCV_NONE 0
#define R_RISCV_32 2
#define R_RISCV_32 1
#define R_RISCV_64 2
#define R_RISCV_RELATIVE 3
#define R_RISCV_64 18
#define R_RISCV_COPY 24
#define R_RISCV_JUMP_SLOT 25
#define R_RISCV_TLS_DTPMOD32 38
#define R_RISCV_TLS_DTPREL32 39
#define R_RISCV_TLS_DTPMOD64 40
#define R_RISCV_TLS_DTPREL64 41
#define R_RISCV_TLS_TPREL32 47
#define R_RISCV_TLS_TPREL64 48
#define R_RISCV_COPY 4
#define R_RISCV_JUMP_SLOT 5
#define R_RISCV_TLS_DTPMOD32 6
#define R_RISCV_TLS_DTPMOD64 7
#define R_RISCV_TLS_DTPREL32 8
#define R_RISCV_TLS_DTPREL64 9
#define R_RISCV_TLS_TPREL32 10
#define R_RISCV_TLS_TPREL64 11
#include <entry.h>

Loading…
Cancel
Save