diff options
| -rw-r--r-- | ldso/ldso/metag/dl-inlines.h | 39 | ||||
| -rw-r--r-- | ldso/ldso/metag/dl-sysdep.h | 25 | 
2 files changed, 64 insertions, 0 deletions
| diff --git a/ldso/ldso/metag/dl-inlines.h b/ldso/ldso/metag/dl-inlines.h new file mode 100644 index 000000000..82fba93ab --- /dev/null +++ b/ldso/ldso/metag/dl-inlines.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2013, Imagination Technologies Ltd. + * + * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball. + */ + +static __always_inline int +__dl_is_special_segment (Elf32_Ehdr *epnt, +			 Elf32_Phdr *ppnt) +{ +  if (ppnt->p_type != PT_LOAD && +      ppnt->p_type != PT_DYNAMIC) +    return 0; + +  if (ppnt->p_vaddr >= 0x80000000 && +      ppnt->p_vaddr < 0x82060000) +    return 1; + +  if (ppnt->p_vaddr >= 0xe0200000 && +      ppnt->p_vaddr < 0xe0260000) +    return 1; + +  return 0; +} + +static __always_inline char * +__dl_map_segment (Elf32_Ehdr *epnt, +		  Elf32_Phdr *ppnt, +		  int infile, +		  int flags) +{ +  char *addr = (char *)ppnt->p_vaddr; + +  if (_DL_PREAD (infile, addr, ppnt->p_filesz, ppnt->p_offset) != ppnt->p_filesz) { +    return 0; +  } + +  return addr; +} diff --git a/ldso/ldso/metag/dl-sysdep.h b/ldso/ldso/metag/dl-sysdep.h index 55e8d1f66..29547cb34 100644 --- a/ldso/ldso/metag/dl-sysdep.h +++ b/ldso/ldso/metag/dl-sysdep.h @@ -96,3 +96,28 @@ elf_machine_relative(Elf32_Addr load_off, const Elf32_Addr rel_addr,  }  #define DL_MALLOC_ALIGN 8 + +#define HAVE_DL_INLINES_H + +#define DL_IS_SPECIAL_SEGMENT(EPNT, PPNT) \ +  __dl_is_special_segment(EPNT, PPNT) +#define DL_MAP_SEGMENT(EPNT, PPNT, INFILE, FLAGS) \ +  __dl_map_segment (EPNT, PPNT, INFILE, FLAGS) + +#define DL_CHECK_LIB_TYPE(epnt, piclib, _dl_progname, libname) \ +do \ +{ \ +  ElfW(Phdr) *ppnt_; \ +  char *header_ = (char *)epnt;				   \ +  ppnt_ = (ElfW(Phdr) *)(intptr_t) & header_[epnt->e_phoff]; \ +  if (ppnt_->p_vaddr >= 0x80000000 && \ +      ppnt_->p_vaddr < 0x82060000) \ +    (piclib) = 2; \ +  if (ppnt_->p_vaddr >= 0xe0200000 && \ +      ppnt_->p_vaddr < 0xe0260000) \ +    (piclib) = 2; \ +} \ +while (0) + +#define _DL_PREAD(FD, BUF, SIZE, OFFSET) \ +  (_dl_pread((FD), (BUF), (SIZE), (OFFSET))) | 
