diff options
Diffstat (limited to 'ldso/ldso/metag/dl-inlines.h')
-rw-r--r-- | ldso/ldso/metag/dl-inlines.h | 39 |
1 files changed, 39 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; +} |