[v2] ARC: update definitions in elf/elf.h

Message ID 20221121130624.9628-1-shahab@synopsys.com
State Superseded
Headers
Series [v2] ARC: update definitions in elf/elf.h |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent
dj/TryBot-32bit success Build for i686

Commit Message

Shahab Vahedi Nov. 21, 2022, 1:06 p.m. UTC
  While porting ARCv2 to elfutils [1], it was brought up that the
necessary changes to the project's libelf/elf.h must come from
glibc, because they sync it from glibc [2].  Therefore, this patch
is to update ARC entries in elf/elf.h.

The majority of the update is about adding new definitions,
specially for the relocations.  However, there is one rename, one
deletion, and one change:

- R_ARC_JUMP_SLOT renamed to R_ARC_JMP_SLOT to match binutils.
- R_ARC_B26 removed because it is unused and deprecated.
- R_ARC_TLS_DTPOFF_S9 changed from 0x4a to the correct value 0x49.

[1]
https://sourceware.org/pipermail/elfutils-devel/2022q4/005530.html

[2]
https://sourceware.org/pipermail/elfutils-devel/2022q4/005548.html

Signed-off-by: Shahab Vahedi <shahab@synopsys.com>
---
Chagelog:
v2:
  - Rename instances of R_ARC_JUMP_SLOT to R_ARC_JMP_SLOT.
  - Remove an unnecessary extra empty line introduced in elf/elf.h.

 elf/elf.h                | 29 ++++++++++++++++++++++++-----
 sysdeps/arc/dl-machine.h |  8 ++++----
 2 files changed, 28 insertions(+), 9 deletions(-)
  

Comments

Adhemerval Zanella Netto Nov. 21, 2022, 2:30 p.m. UTC | #1
On 21/11/22 10:06, Shahab Vahedi via Libc-alpha wrote:
> While porting ARCv2 to elfutils [1], it was brought up that the
> necessary changes to the project's libelf/elf.h must come from
> glibc, because they sync it from glibc [2].  Therefore, this patch
> is to update ARC entries in elf/elf.h.
> 
> The majority of the update is about adding new definitions,
> specially for the relocations.  However, there is one rename, one
> deletion, and one change:
> 
> - R_ARC_JUMP_SLOT renamed to R_ARC_JMP_SLOT to match binutils.
> - R_ARC_B26 removed because it is unused and deprecated.
> - R_ARC_TLS_DTPOFF_S9 changed from 0x4a to the correct value 0x49.
> 
> [1]
> https://sourceware.org/pipermail/elfutils-devel/2022q4/005530.html
> 
> [2]
> https://sourceware.org/pipermail/elfutils-devel/2022q4/005548.html
> 
> Signed-off-by: Shahab Vahedi <shahab@synopsys.com>

We discussed this briefly on glibc patchwork review meeting [1],
and if does not trigger any regression it ok to arch maintainers
to handle such changes.

[1] https://sourceware.org/glibc/wiki/PatchworkReviewMeetings

> ---
> Chagelog:
> v2:
>   - Rename instances of R_ARC_JUMP_SLOT to R_ARC_JMP_SLOT.
>   - Remove an unnecessary extra empty line introduced in elf/elf.h.
> 
>  elf/elf.h                | 29 ++++++++++++++++++++++++-----
>  sysdeps/arc/dl-machine.h |  8 ++++----
>  2 files changed, 28 insertions(+), 9 deletions(-)
> 
> diff --git a/elf/elf.h b/elf/elf.h
> index 920e6891e6..da41bad34b 100644
> --- a/elf/elf.h
> +++ b/elf/elf.h
> @@ -4159,6 +4159,15 @@ enum
>  #define R_LARCH_GNU_VTINHERIT  57
>  #define R_LARCH_GNU_VTENTRY  58
>  
> +/* ARC specific declarations.  */
> +
> +/* Processor specific flags for the Ehdr e_flags field.  */
> +#define EF_ARC_MACH_MSK	    0x000000ff
> +#define EF_ARC_OSABI_MSK    0x00000f00
> +#define EF_ARC_ALL_MSK	    (EF_ARC_MACH_MSK | EF_ARC_OSABI_MSK)
> +
> +/* Processor specific values for the Shdr sh_type field.  */
> +#define SHT_ARC_ATTRIBUTES	(SHT_LOPROC + 1) /* ARC attributes section.  */
>  
>  /* ARCompact/ARCv2 specific relocs.  */
>  #define R_ARC_NONE		0x0
> @@ -4166,7 +4175,7 @@ enum
>  #define R_ARC_16		0x2
>  #define R_ARC_24		0x3
>  #define R_ARC_32		0x4
> -#define R_ARC_B26		0x5
> +
>  #define R_ARC_B22_PCREL		0x6
>  #define R_ARC_H30		0x7
>  #define R_ARC_N8		0x8
> @@ -4206,16 +4215,23 @@ enum
>  #define R_ARC_SECTOFF_ME_2	0x2A
>  #define R_ARC_SECTOFF_1		0x2B
>  #define R_ARC_SECTOFF_2		0x2C
> +#define R_ARC_SDA_12		0x2D
> +#define R_ARC_SDA16_ST2		0x30
> +#define R_ARC_32_PCREL		0x31
>  #define R_ARC_PC32		0x32
>  #define R_ARC_GOTPC32		0x33
>  #define R_ARC_PLT32		0x34
>  #define R_ARC_COPY		0x35
>  #define R_ARC_GLOB_DAT		0x36
> -#define R_ARC_JUMP_SLOT		0x37
> +#define R_ARC_JMP_SLOT		0x37
>  #define R_ARC_RELATIVE		0x38
>  #define R_ARC_GOTOFF		0x39
>  #define R_ARC_GOTPC		0x3A
>  #define R_ARC_GOT32		0x3B
> +#define R_ARC_S21W_PCREL_PLT	0x3C
> +#define R_ARC_S25H_PCREL_PLT	0x3D
> +
> +#define R_ARC_JLI_SECTOFF	0x3F
>  
>  #define R_ARC_TLS_DTPMOD	0x42
>  #define R_ARC_TLS_DTPOFF	0x43
> @@ -4224,9 +4240,12 @@ enum
>  #define R_ARC_TLS_GD_LD	        0x46
>  #define R_ARC_TLS_GD_CALL	0x47
>  #define R_ARC_TLS_IE_GOT	0x48
> -#define R_ARC_TLS_DTPOFF_S9	0x4a
> -#define R_ARC_TLS_LE_S9		0x4a
> -#define R_ARC_TLS_LE_32		0x4b
> +#define R_ARC_TLS_DTPOFF_S9	0x49
> +#define R_ARC_TLS_LE_S9		0x4A
> +#define R_ARC_TLS_LE_32		0x4B
> +#define R_ARC_S25W_PCREL_PLT	0x4C
> +#define R_ARC_S21H_PCREL_PLT	0x4D
> +#define R_ARC_NPS_CMEM16	0x4E
>  
>  /* OpenRISC 1000 specific relocs.  */
>  #define R_OR1K_NONE		0
> diff --git a/sysdeps/arc/dl-machine.h b/sysdeps/arc/dl-machine.h
> index c6ad232384..8420cd0006 100644
> --- a/sysdeps/arc/dl-machine.h
> +++ b/sysdeps/arc/dl-machine.h
> @@ -183,14 +183,14 @@ __start:								\n\
>     ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
>     of the main executable's symbols, as for a COPY reloc.  */
>  #define elf_machine_type_class(type)				\
> -  ((((type) == R_ARC_JUMP_SLOT					\
> +  ((((type) == R_ARC_JMP_SLOT					\
>       || (type) == R_ARC_TLS_DTPMOD				\
>       || (type) == R_ARC_TLS_DTPOFF				\
>       || (type) == R_ARC_TLS_TPOFF) * ELF_RTYPE_CLASS_PLT)	\
>     | (((type) == R_ARC_COPY) * ELF_RTYPE_CLASS_COPY))
>  
>  /* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
> -#define ELF_MACHINE_JMP_SLOT  R_ARC_JUMP_SLOT
> +#define ELF_MACHINE_JMP_SLOT  R_ARC_JMP_SLOT
>  
>  /* Fixup a PLT entry to bounce directly to the function at VALUE.  */
>  
> @@ -261,7 +261,7 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[],
>            break;
>  
>          case R_ARC_GLOB_DAT:
> -        case R_ARC_JUMP_SLOT:
> +        case R_ARC_JMP_SLOT:
>              *reloc_addr = value;
>            break;
>  
> @@ -321,7 +321,7 @@ elf_machine_lazy_rel (struct link_map *map, struct r_scope_elem *scope[],
>    ElfW(Addr) *const reloc_addr = (void *) (l_addr + reloc->r_offset);
>    const unsigned int r_type = ELFW (R_TYPE) (reloc->r_info);
>  
> -  if (r_type == R_ARC_JUMP_SLOT)
> +  if (r_type == R_ARC_JMP_SLOT)
>      *reloc_addr += l_addr;
>    else
>      _dl_reloc_bad_type (map, r_type, 1);
  
Vineet Gupta Nov. 23, 2022, 4:13 a.m. UTC | #2
On 11/21/22 06:30, Adhemerval Zanella Netto wrote:
> On 21/11/22 10:06, Shahab Vahedi via Libc-alpha wrote:
>> While porting ARCv2 to elfutils [1], it was brought up that the
>> necessary changes to the project's libelf/elf.h must come from
>> glibc, because they sync it from glibc [2].  Therefore, this patch
>> is to update ARC entries in elf/elf.h.
>>
>> The majority of the update is about adding new definitions,
>> specially for the relocations.  However, there is one rename, one
>> deletion, and one change:
>>
>> - R_ARC_JUMP_SLOT renamed to R_ARC_JMP_SLOT to match binutils.
>> - R_ARC_B26 removed because it is unused and deprecated.
>> - R_ARC_TLS_DTPOFF_S9 changed from 0x4a to the correct value 0x49.
>>
>> [1]
>> https://sourceware.org/pipermail/elfutils-devel/2022q4/005530.html
>>
>> [2]
>> https://sourceware.org/pipermail/elfutils-devel/2022q4/005548.html
>>
>> Signed-off-by: Shahab Vahedi<shahab@synopsys.com>
> We discussed this briefly on glibc patchwork review meeting [1],
> and if does not trigger any regression it ok to arch maintainers
> to handle such changes.

Shahab as a process followup, can you run the full glibc testsuite w/ 
and w/o this change and post the results summary here. It should be easy 
to do this with hsdk dev board. It can also help find fill the the glibc 
testing log for arc for the upcoming release ;-) as 2.36 [1] seems untested.

-Vineet

[1] https://sourceware.org/glibc/wiki/Release/2.36
  

Patch

diff --git a/elf/elf.h b/elf/elf.h
index 920e6891e6..da41bad34b 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -4159,6 +4159,15 @@  enum
 #define R_LARCH_GNU_VTINHERIT  57
 #define R_LARCH_GNU_VTENTRY  58
 
+/* ARC specific declarations.  */
+
+/* Processor specific flags for the Ehdr e_flags field.  */
+#define EF_ARC_MACH_MSK	    0x000000ff
+#define EF_ARC_OSABI_MSK    0x00000f00
+#define EF_ARC_ALL_MSK	    (EF_ARC_MACH_MSK | EF_ARC_OSABI_MSK)
+
+/* Processor specific values for the Shdr sh_type field.  */
+#define SHT_ARC_ATTRIBUTES	(SHT_LOPROC + 1) /* ARC attributes section.  */
 
 /* ARCompact/ARCv2 specific relocs.  */
 #define R_ARC_NONE		0x0
@@ -4166,7 +4175,7 @@  enum
 #define R_ARC_16		0x2
 #define R_ARC_24		0x3
 #define R_ARC_32		0x4
-#define R_ARC_B26		0x5
+
 #define R_ARC_B22_PCREL		0x6
 #define R_ARC_H30		0x7
 #define R_ARC_N8		0x8
@@ -4206,16 +4215,23 @@  enum
 #define R_ARC_SECTOFF_ME_2	0x2A
 #define R_ARC_SECTOFF_1		0x2B
 #define R_ARC_SECTOFF_2		0x2C
+#define R_ARC_SDA_12		0x2D
+#define R_ARC_SDA16_ST2		0x30
+#define R_ARC_32_PCREL		0x31
 #define R_ARC_PC32		0x32
 #define R_ARC_GOTPC32		0x33
 #define R_ARC_PLT32		0x34
 #define R_ARC_COPY		0x35
 #define R_ARC_GLOB_DAT		0x36
-#define R_ARC_JUMP_SLOT		0x37
+#define R_ARC_JMP_SLOT		0x37
 #define R_ARC_RELATIVE		0x38
 #define R_ARC_GOTOFF		0x39
 #define R_ARC_GOTPC		0x3A
 #define R_ARC_GOT32		0x3B
+#define R_ARC_S21W_PCREL_PLT	0x3C
+#define R_ARC_S25H_PCREL_PLT	0x3D
+
+#define R_ARC_JLI_SECTOFF	0x3F
 
 #define R_ARC_TLS_DTPMOD	0x42
 #define R_ARC_TLS_DTPOFF	0x43
@@ -4224,9 +4240,12 @@  enum
 #define R_ARC_TLS_GD_LD	        0x46
 #define R_ARC_TLS_GD_CALL	0x47
 #define R_ARC_TLS_IE_GOT	0x48
-#define R_ARC_TLS_DTPOFF_S9	0x4a
-#define R_ARC_TLS_LE_S9		0x4a
-#define R_ARC_TLS_LE_32		0x4b
+#define R_ARC_TLS_DTPOFF_S9	0x49
+#define R_ARC_TLS_LE_S9		0x4A
+#define R_ARC_TLS_LE_32		0x4B
+#define R_ARC_S25W_PCREL_PLT	0x4C
+#define R_ARC_S21H_PCREL_PLT	0x4D
+#define R_ARC_NPS_CMEM16	0x4E
 
 /* OpenRISC 1000 specific relocs.  */
 #define R_OR1K_NONE		0
diff --git a/sysdeps/arc/dl-machine.h b/sysdeps/arc/dl-machine.h
index c6ad232384..8420cd0006 100644
--- a/sysdeps/arc/dl-machine.h
+++ b/sysdeps/arc/dl-machine.h
@@ -183,14 +183,14 @@  __start:								\n\
    ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
    of the main executable's symbols, as for a COPY reloc.  */
 #define elf_machine_type_class(type)				\
-  ((((type) == R_ARC_JUMP_SLOT					\
+  ((((type) == R_ARC_JMP_SLOT					\
      || (type) == R_ARC_TLS_DTPMOD				\
      || (type) == R_ARC_TLS_DTPOFF				\
      || (type) == R_ARC_TLS_TPOFF) * ELF_RTYPE_CLASS_PLT)	\
    | (((type) == R_ARC_COPY) * ELF_RTYPE_CLASS_COPY))
 
 /* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
-#define ELF_MACHINE_JMP_SLOT  R_ARC_JUMP_SLOT
+#define ELF_MACHINE_JMP_SLOT  R_ARC_JMP_SLOT
 
 /* Fixup a PLT entry to bounce directly to the function at VALUE.  */
 
@@ -261,7 +261,7 @@  elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[],
           break;
 
         case R_ARC_GLOB_DAT:
-        case R_ARC_JUMP_SLOT:
+        case R_ARC_JMP_SLOT:
             *reloc_addr = value;
           break;
 
@@ -321,7 +321,7 @@  elf_machine_lazy_rel (struct link_map *map, struct r_scope_elem *scope[],
   ElfW(Addr) *const reloc_addr = (void *) (l_addr + reloc->r_offset);
   const unsigned int r_type = ELFW (R_TYPE) (reloc->r_info);
 
-  if (r_type == R_ARC_JUMP_SLOT)
+  if (r_type == R_ARC_JMP_SLOT)
     *reloc_addr += l_addr;
   else
     _dl_reloc_bad_type (map, r_type, 1);