[PATCH] x86: Report invalid TLS relocation name

Cui, Lili lili.cui@intel.com
Wed Aug 28 07:55:46 GMT 2024


> On 27.08.2024 22:15, H.J. Lu wrote:
> > On Tue, Aug 27, 2024 at 9:57 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> >> --- a/gas/config/tc-i386.c
> >> +++ b/gas/config/tc-i386.c
> >> @@ -1293,6 +1293,94 @@ static htab_t op_hash;
> >>
> >>  /* Hash table for register lookup.  */  static htab_t reg_hash;
> >> +
> >> +static const struct
> >> +{
> >> +  const char *str;
> >> +  int len;
> 
> As it is being moved, please conver to unsigned int.
> 
> >> +  const enum bfd_reloc_code_real rel[2];
> >> +  const i386_operand_type types64;
> >> +  bool need_GOT_symbol;
> >> +}
> >> +gotrel[] =
> >> +{
> >> +#define OPERAND_TYPE_IMM32_32S_DISP32 { .bitfield = \
> >> +      { .imm32 = 1, .imm32s = 1, .disp32 = 1 } } #define
> >> +OPERAND_TYPE_IMM32_32S_64_DISP32 { .bitfield = \
> >> +      { .imm32 = 1, .imm32s = 1, .imm64 = 1, .disp32 = 1 } } #define
> >> +OPERAND_TYPE_IMM32_32S_64_DISP32_64 { .bitfield = \
> >> +      { .imm32 = 1, .imm32s = 1, .imm64 = 1, .disp32 = 1, .disp64 =
> >> +1 } } #define OPERAND_TYPE_IMM64_DISP64 { .bitfield = \
> >> +      { .imm64 = 1, .disp64 = 1 } }
> >> +
> >> +#ifndef TE_PE
> >> +#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
> >> +    { STRING_COMMA_LEN ("SIZE"),      { BFD_RELOC_SIZE32,
> >> +                                       BFD_RELOC_SIZE32 },
> >> +    { .bitfield = { .imm32 = 1, .imm64 = 1 } }, false }, #endif
> >> +    { STRING_COMMA_LEN ("PLTOFF"),
> { _dummy_first_bfd_reloc_code_real,
> >> +                                      BFD_RELOC_X86_64_PLTOFF64 },
> >> +    { .bitfield = { .imm64 = 1 } }, true },
> >> +    { STRING_COMMA_LEN ("PLT"),      { BFD_RELOC_386_PLT32,
> >> +                                      BFD_RELOC_X86_64_PLT32    },
> >> +    OPERAND_TYPE_IMM32_32S_DISP32, false },
> >> +    { STRING_COMMA_LEN ("GOTPLT"),
> { _dummy_first_bfd_reloc_code_real,
> >> +                                      BFD_RELOC_X86_64_GOTPLT64 },
> >> +    OPERAND_TYPE_IMM64_DISP64, true },
> >> +    { STRING_COMMA_LEN ("GOTOFF"),   { BFD_RELOC_386_GOTOFF,
> >> +                                      BFD_RELOC_X86_64_GOTOFF64 },
> >> +    OPERAND_TYPE_IMM64_DISP64, true },
> >> +    { STRING_COMMA_LEN ("GOTPCREL"),
> { _dummy_first_bfd_reloc_code_real,
> >> +                                      BFD_RELOC_X86_64_GOTPCREL },
> >> +    OPERAND_TYPE_IMM32_32S_DISP32, true },
> >> +    { STRING_COMMA_LEN ("TLSGD"),    { BFD_RELOC_386_TLS_GD,
> >> +                                      BFD_RELOC_X86_64_TLSGD    },
> >> +    OPERAND_TYPE_IMM32_32S_DISP32, true },
> >> +    { STRING_COMMA_LEN ("TLSLDM"),   { BFD_RELOC_386_TLS_LDM,
> >> +                                      _dummy_first_bfd_reloc_code_real },
> >> +    OPERAND_TYPE_NONE, true },
> >> +    { STRING_COMMA_LEN ("TLSLD"),
> { _dummy_first_bfd_reloc_code_real,
> >> +                                      BFD_RELOC_X86_64_TLSLD    },
> >> +    OPERAND_TYPE_IMM32_32S_DISP32, true },
> >> +    { STRING_COMMA_LEN ("GOTTPOFF"), { BFD_RELOC_386_TLS_IE_32,
> >> +                                      BFD_RELOC_X86_64_GOTTPOFF },
> >> +    OPERAND_TYPE_IMM32_32S_DISP32, true },
> >> +    { STRING_COMMA_LEN ("TPOFF"),    { BFD_RELOC_386_TLS_LE_32,
> >> +                                      BFD_RELOC_X86_64_TPOFF32  },
> >> +    OPERAND_TYPE_IMM32_32S_64_DISP32_64, true },
> >> +    { STRING_COMMA_LEN ("NTPOFF"),   { BFD_RELOC_386_TLS_LE,
> >> +                                      _dummy_first_bfd_reloc_code_real },
> >> +    OPERAND_TYPE_NONE, true },
> >> +    { STRING_COMMA_LEN ("DTPOFF"),   { BFD_RELOC_386_TLS_LDO_32,
> >> +                                      BFD_RELOC_X86_64_DTPOFF32 },
> >> +    OPERAND_TYPE_IMM32_32S_64_DISP32_64, true },
> >> +    { STRING_COMMA_LEN ("GOTNTPOFF"),{ BFD_RELOC_386_TLS_GOTIE,
> >> +                                      _dummy_first_bfd_reloc_code_real },
> >> +    OPERAND_TYPE_NONE, true },
> >> +    { STRING_COMMA_LEN ("INDNTPOFF"),{ BFD_RELOC_386_TLS_IE,
> >> +                                      _dummy_first_bfd_reloc_code_real },
> >> +    OPERAND_TYPE_NONE, true },
> >> +    { STRING_COMMA_LEN ("GOT"),      { BFD_RELOC_386_GOT32,
> >> +                                      BFD_RELOC_X86_64_GOT32    },
> >> +    OPERAND_TYPE_IMM32_32S_64_DISP32, true },
> >> +    { STRING_COMMA_LEN ("TLSDESC"),
> { BFD_RELOC_386_TLS_GOTDESC,
> >> +                                      BFD_RELOC_X86_64_GOTPC32_TLSDESC },
> >> +    OPERAND_TYPE_IMM32_32S_DISP32, true },
> >> +    { STRING_COMMA_LEN ("TLSCALL"),
> { BFD_RELOC_386_TLS_DESC_CALL,
> >> +                                      BFD_RELOC_X86_64_TLSDESC_CALL },
> >> +    OPERAND_TYPE_IMM32_32S_DISP32, true }, #else /* TE_PE */
> >> +    { STRING_COMMA_LEN ("SECREL32"), { BFD_RELOC_32_SECREL,
> >> +                                      BFD_RELOC_32_SECREL },
> >> +    OPERAND_TYPE_IMM32_32S_64_DISP32_64, false }, #endif
> >> +
> >> +#undef OPERAND_TYPE_IMM32_32S_DISP32 #undef
> >> +OPERAND_TYPE_IMM32_32S_64_DISP32 #undef
> >> +OPERAND_TYPE_IMM32_32S_64_DISP32_64
> >> +#undef OPERAND_TYPE_IMM64_DISP64
> >> +};
> >>
> >>    /* Various efficient no-op patterns for aligning code labels.
> >>       Note: Don't try to assemble the instructions in the comments.
> >> @@ -6586,8 +6674,16 @@ i386_assemble (char *line)
> >>           case BFD_RELOC_X86_64_GOTTPOFF:
> >>           case BFD_RELOC_386_TLS_GOTIE:
> >>           case BFD_RELOC_X86_64_TLSLD:
> >> -           as_bad (_("TLS relocation cannot be used with `%s'"), insn_name
> (&i.tm));
> >> -           return;
> >> +           for (unsigned int k = 0; k < ARRAY_SIZE (gotrel); k++)
> >> +             {
> >> +               if (gotrel[k].rel[object_64bit] == i.reloc[j])
> >> +                 {
> >> +                   as_bad (_("%s relocation cannot be used with `%s'"),
> >> +                         gotrel[k].str, insn_name (&i.tm));
> 
> Please can you make this @%s to match what's used in source? That'll at least
> somewhat disambiguate the name space (as "relocation" could also mean
> other things).
> 
> > This is what I am checking in.
> 
> I'm sorry for repeating myself, but can you please, please wait some before
> committing patches? How in the world am I to respond if you send a patch
> after my workday ended and you commit it just a couple of hours later? Just
> mention it once again - I am usually giving it a week for people to comment.
> I'd really expect the same from you.
> 

In our discussion email, the requirements of these two patches were very clear, and my patch depends on these two patches. I think this is the main reason why H.J checked them in yesterday😊.

Lili.
> Jan


More information about the Binutils mailing list