Browse Source

rtld: Add #if defined (__FDPIC__)

Like for other FDPIC targets, add defined(__FDPIC__) where needed.

	* include/link.h: Include bits/elf-fdpic.h if __FDPIC__ is defined.
	(link_map): Use elf32_fdpic_loadaddr if __FDPIC__ is defined.
	(dl_phdr_info): Likewise.
	* ldso/include/dl-elf.h (__dl_parse_dynamic_info): Support
	__FDPIC__.
	* ldso/include/dl-hash.h (elf_resolve): Add funcdesc_ht field if
	__FDPIC__ is defined.
	* ldso/ldso/dl-hash.c (_dl_find_hash): Support __FDPIC__.
	* libc/misc/elf/dl-iterate-phdr.c (dl_iterate_phdr): Support __FDPIC__.

Signed-off-by: Mickaël Guêné <mickael.guene@st.com>
Signed-off-by: Christophe Lyon <christophe.lyon@st.com>
Christophe Lyon 5 years ago
parent
commit
f88bb681ba
5 changed files with 8 additions and 8 deletions
  1. 3 3
      include/link.h
  2. 1 1
      ldso/include/dl-elf.h
  3. 1 1
      ldso/include/dl-hash.h
  4. 2 2
      ldso/ldso/dl-hash.c
  5. 1 1
      libc/misc/elf/dl-iterate-phdr.c

+ 3 - 3
include/link.h

@@ -79,7 +79,7 @@ extern struct r_debug _r_debug;
    */
    */
 extern ElfW(Dyn) _DYNAMIC[];
 extern ElfW(Dyn) _DYNAMIC[];
 
 
-#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__)
+#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__) || defined(__FDPIC__)
 # include <bits/elf-fdpic.h>
 # include <bits/elf-fdpic.h>
 #endif
 #endif
 #ifdef __DSBT__
 #ifdef __DSBT__
@@ -97,7 +97,7 @@ struct link_map
     /* These first few members are part of the protocol with the debugger.
     /* These first few members are part of the protocol with the debugger.
        This is the same format used in SVR4.  */
        This is the same format used in SVR4.  */
 
 
-#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__)
+#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__) || defined(__FDPIC__)
     struct elf32_fdpic_loadaddr l_addr;
     struct elf32_fdpic_loadaddr l_addr;
 #else
 #else
 #ifdef __DSBT__
 #ifdef __DSBT__
@@ -184,7 +184,7 @@ enum
 
 
 struct dl_phdr_info
 struct dl_phdr_info
   {
   {
-#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__)
+#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__) || defined(__FDPIC__)
     struct elf32_fdpic_loadaddr dlpi_addr;
     struct elf32_fdpic_loadaddr dlpi_addr;
 #else
 #else
 #ifdef __DSBT__
 #ifdef __DSBT__

+ 1 - 1
ldso/include/dl-elf.h

@@ -202,7 +202,7 @@ unsigned int __dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info
 	/* Don't adjust .dynamic unnecessarily.  For FDPIC targets,
 	/* Don't adjust .dynamic unnecessarily.  For FDPIC targets,
 	   we'd have to walk all the loadsegs to find out if it was
 	   we'd have to walk all the loadsegs to find out if it was
 	   actually unnecessary, so skip this optimization.  */
 	   actually unnecessary, so skip this optimization.  */
-#if !defined __FRV_FDPIC__ && !defined __BFIN_FDPIC__ && !defined __DSBT__
+#if !defined __FRV_FDPIC__ && !defined __BFIN_FDPIC__ && !defined __DSBT__ && !defined __FDPIC__
 	if (load_off != 0)
 	if (load_off != 0)
 #endif
 #endif
 	{
 	{

+ 1 - 1
ldso/include/dl-hash.h

@@ -134,7 +134,7 @@ struct elf_resolve {
   unsigned long data_words;
   unsigned long data_words;
 #endif
 #endif
 
 
-#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__)
+#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__) || defined(__FDPIC__)
   /* Every loaded module holds a hashtable of function descriptors of
   /* Every loaded module holds a hashtable of function descriptors of
      functions defined in it, such that it's easy to release the
      functions defined in it, such that it's easy to release the
      memory when the module is dlclose()d.  */
      memory when the module is dlclose()d.  */

+ 2 - 2
ldso/ldso/dl-hash.c

@@ -377,7 +377,7 @@ char *_dl_find_hash(const char *name, struct r_scope_elem *scope, struct elf_res
 				break;
 				break;
 #endif
 #endif
 			case STB_GLOBAL:
 			case STB_GLOBAL:
-#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__)
+#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__) || defined(__FDPIC__)
 			if (sym_ref)
 			if (sym_ref)
 				sym_ref->tpnt = tpnt;
 				sym_ref->tpnt = tpnt;
 #endif
 #endif
@@ -386,7 +386,7 @@ char *_dl_find_hash(const char *name, struct r_scope_elem *scope, struct elf_res
 				break;
 				break;
 		}
 		}
 	}
 	}
-#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__)
+#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__) || defined(__FDPIC__)
 	if (sym_ref)
 	if (sym_ref)
 		sym_ref->tpnt = tpnt;
 		sym_ref->tpnt = tpnt;
 #endif
 #endif

+ 1 - 1
libc/misc/elf/dl-iterate-phdr.c

@@ -58,7 +58,7 @@ dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
       /* This entry describes this statically-linked program itself.  */
       /* This entry describes this statically-linked program itself.  */
       struct dl_phdr_info info;
       struct dl_phdr_info info;
       int ret;
       int ret;
-#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__)
+#if defined(__FRV_FDPIC__) || defined(__BFIN_FDPIC__) || defined(__FDPIC__)
       info.dlpi_addr.map = NULL;
       info.dlpi_addr.map = NULL;
       info.dlpi_addr.got_value = NULL;
       info.dlpi_addr.got_value = NULL;
 #elif defined(__DSBT__)
 #elif defined(__DSBT__)