From fa89271aaf2cbeabfe86654f9eebd0cf84aedc57 Mon Sep 17 00:00:00 2001 From: Tao Sang Date: Fri, 26 Jun 2020 11:09:28 -0400 Subject: [PATCH] Fix crashing of private elf apis in static lib When rocr and hip-rocclr are static libs, rorc will wrongly reference private elf apis, then crash will happen. By renaming asm symbol names of private elf apis, rocr will reference public elf apis, thus crashing won't happen. Change-Id: I7cf552f1fae5fe09adeac3aec1a24445f39d406c [ROCm/clr commit: 2c551e44cc8f6b06711fbc5372872b3283e134e2] --- projects/clr/rocclr/elf/utils/libelf/gelf.h | 58 ++++----- projects/clr/rocclr/elf/utils/libelf/libelf.h | 118 +++++++++--------- 2 files changed, 88 insertions(+), 88 deletions(-) diff --git a/projects/clr/rocclr/elf/utils/libelf/gelf.h b/projects/clr/rocclr/elf/utils/libelf/gelf.h index 0a3a635bc5..97d794ae74 100644 --- a/projects/clr/rocclr/elf/utils/libelf/gelf.h +++ b/projects/clr/rocclr/elf/utils/libelf/gelf.h @@ -74,41 +74,41 @@ typedef Elf64_Syminfo GElf_Syminfo; /* Symbol information */ #pragma GCC visibility push(hidden) __BEGIN_DECLS -long gelf_checksum(Elf *_elf); +long gelf_checksum(Elf *_elf) asm ("rocclr_gelf_checksum"); size_t gelf_fsize(Elf *_elf, Elf_Type _type, size_t _count, - unsigned int _version); -int gelf_getclass(Elf *_elf); -GElf_Dyn *gelf_getdyn(Elf_Data *_data, int _index, GElf_Dyn *_dst); -GElf_Ehdr *gelf_getehdr(Elf *_elf, GElf_Ehdr *_dst); -GElf_Phdr *gelf_getphdr(Elf *_elf, int _index, GElf_Phdr *_dst); -GElf_Rel *gelf_getrel(Elf_Data *_src, int _index, GElf_Rel *_dst); -GElf_Rela *gelf_getrela(Elf_Data *_src, int _index, GElf_Rela *_dst); -GElf_Shdr *gelf_getshdr(Elf_Scn *_scn, GElf_Shdr *_dst); -GElf_Sym *gelf_getsym(Elf_Data *_src, int _index, GElf_Sym *_dst); + unsigned int _version) asm ("rocclr_gelf_fsize"); +int gelf_getclass(Elf *_elf) asm ("rocclr_gelf_getclass"); +GElf_Dyn *gelf_getdyn(Elf_Data *_data, int _index, GElf_Dyn *_dst) asm ("rocclr_gelf_getdyn"); +GElf_Ehdr *gelf_getehdr(Elf *_elf, GElf_Ehdr *_dst) asm ("rocclr_gelf_getehdr"); +GElf_Phdr *gelf_getphdr(Elf *_elf, int _index, GElf_Phdr *_dst) asm ("rocclr_gelf_getphdr"); +GElf_Rel *gelf_getrel(Elf_Data *_src, int _index, GElf_Rel *_dst) asm ("rocclr_gelf_getrel"); +GElf_Rela *gelf_getrela(Elf_Data *_src, int _index, GElf_Rela *_dst) asm ("rocclr_gelf_getrela"); +GElf_Shdr *gelf_getshdr(Elf_Scn *_scn, GElf_Shdr *_dst) asm ("rocclr_gelf_getshdr"); +GElf_Sym *gelf_getsym(Elf_Data *_src, int _index, GElf_Sym *_dst) asm ("rocclr_gelf_getsym"); GElf_Sym *gelf_getsymshndx(Elf_Data *_src, Elf_Data *_shindexsrc, - int _index, GElf_Sym *_dst, Elf32_Word *_shindexdst); -void * gelf_newehdr(Elf *_elf, int _class); -void * gelf_newphdr(Elf *_elf, size_t _phnum); -int gelf_update_dyn(Elf_Data *_dst, int _index, GElf_Dyn *_src); -int gelf_update_ehdr(Elf *_elf, GElf_Ehdr *_src); -int gelf_update_phdr(Elf *_elf, int _index, GElf_Phdr *_src); -int gelf_update_rel(Elf_Data *_dst, int _index, GElf_Rel *_src); -int gelf_update_rela(Elf_Data *_dst, int _index, GElf_Rela *_src); -int gelf_update_shdr(Elf_Scn *_dst, GElf_Shdr *_src); -int gelf_update_sym(Elf_Data *_dst, int _index, GElf_Sym *_src); + int _index, GElf_Sym *_dst, Elf32_Word *_shindexdst) asm ("rocclr_gelf_getsymshndx"); +void * gelf_newehdr(Elf *_elf, int _class) asm ("rocclr_gelf_newehdr"); +void * gelf_newphdr(Elf *_elf, size_t _phnum) asm ("rocclr_gelf_newphdr"); +int gelf_update_dyn(Elf_Data *_dst, int _index, GElf_Dyn *_src) asm ("rocclr_gelf_update_dyn"); +int gelf_update_ehdr(Elf *_elf, GElf_Ehdr *_src) asm ("rocclr_gelf_update_ehdr"); +int gelf_update_phdr(Elf *_elf, int _index, GElf_Phdr *_src) asm ("rocclr_gelf_update_phdr"); +int gelf_update_rel(Elf_Data *_dst, int _index, GElf_Rel *_src) asm ("rocclr_gelf_update_rel"); +int gelf_update_rela(Elf_Data *_dst, int _index, GElf_Rela *_src) asm ("rocclr_gelf_update_rela"); +int gelf_update_shdr(Elf_Scn *_dst, GElf_Shdr *_src) asm ("rocclr_gelf_update_shdr"); +int gelf_update_sym(Elf_Data *_dst, int _index, GElf_Sym *_src) asm ("rocclr_gelf_update_sym"); int gelf_update_symshndx(Elf_Data *_symdst, Elf_Data *_shindexdst, - int _index, GElf_Sym *_symsrc, Elf32_Word _shindexsrc); -Elf_Data *gelf_xlatetof(Elf *_elf, Elf_Data *_dst, const Elf_Data *_src, unsigned int _encode); -Elf_Data *gelf_xlatetom(Elf *_elf, Elf_Data *_dst, const Elf_Data *_src, unsigned int _encode); + int _index, GElf_Sym *_symsrc, Elf32_Word _shindexsrc) asm ("rocclr_gelf_update_symshndx"); +Elf_Data *gelf_xlatetof(Elf *_elf, Elf_Data *_dst, const Elf_Data *_src, unsigned int _encode) asm ("rocclr_gelf_xlatetof"); +Elf_Data *gelf_xlatetom(Elf *_elf, Elf_Data *_dst, const Elf_Data *_src, unsigned int _encode) asm ("rocclr_gelf_xlatetom"); #if (defined(__FreeBSD_version) && __FreeBSD_version >= 700025) || \ (defined(__NetBSD_Version) && __NetBSD_Version > 400000003) -GElf_Cap *gelf_getcap(Elf_Data *_data, int _index, GElf_Cap *_cap); -GElf_Move *gelf_getmove(Elf_Data *_src, int _index, GElf_Move *_dst); -GElf_Syminfo *gelf_getsyminfo(Elf_Data *_src, int _index, GElf_Syminfo *_dst); -int gelf_update_cap(Elf_Data *_dst, int _index, GElf_Cap *_src); -int gelf_update_move(Elf_Data *_dst, int _index, GElf_Move *_src); -int gelf_update_syminfo(Elf_Data *_dst, int _index, GElf_Syminfo *_src); +GElf_Cap *gelf_getcap(Elf_Data *_data, int _index, GElf_Cap *_cap) asm ("rocclr_gelf_getcap"); +GElf_Move *gelf_getmove(Elf_Data *_src, int _index, GElf_Move *_dst) asm ("rocclr_gelf_getmove"); +GElf_Syminfo *gelf_getsyminfo(Elf_Data *_src, int _index, GElf_Syminfo *_dst) asm ("rocclr_gelf_getsyminfo"); +int gelf_update_cap(Elf_Data *_dst, int _index, GElf_Cap *_src) asm ("rocclr_gelf_update_cap"); +int gelf_update_move(Elf_Data *_dst, int _index, GElf_Move *_src) asm ("rocclr_gelf_update_move"); +int gelf_update_syminfo(Elf_Data *_dst, int _index, GElf_Syminfo *_src) asm ("rocclr_gelf_update_syminfo"); #endif __END_DECLS #pragma GCC visibility pop diff --git a/projects/clr/rocclr/elf/utils/libelf/libelf.h b/projects/clr/rocclr/elf/utils/libelf/libelf.h index 09fd2ebed7..63a8fb3ed4 100644 --- a/projects/clr/rocclr/elf/utils/libelf/libelf.h +++ b/projects/clr/rocclr/elf/utils/libelf/libelf.h @@ -189,75 +189,75 @@ enum Elf_Error { #pragma GCC visibility push(hidden) __BEGIN_DECLS -Elf *elf_begin(int _fd, Elf_Cmd _cmd, Elf *_elf, Elf_Mem *_mem); -int elf_cntl(Elf *_elf, Elf_Cmd _cmd); -int elf_end(Elf *_elf); -const char *elf_errmsg(int _error); -int elf_errno(void); -void elf_fill(int _fill); +Elf *elf_begin(int _fd, Elf_Cmd _cmd, Elf *_elf, Elf_Mem *_mem) asm ("rocclr_elf_begin"); +int elf_cntl(Elf *_elf, Elf_Cmd _cmd) asm ("rocclr_elf_cntl"); +int elf_end(Elf *_elf) asm ("rocclr_elf_end"); +const char *elf_errmsg(int _error) asm ("rocclr_elf_errmsg"); +int elf_errno(void) asm ("rocclr_elf_errno"); +void elf_fill(int _fill) asm ("rocclr_elf_fill"); unsigned int elf_flagarhdr(Elf_Arhdr *_arh, Elf_Cmd _cmd, - unsigned int _flags); + unsigned int _flags) asm ("rocclr_elf_flagarhdr"); unsigned int elf_flagdata(Elf_Data *_data, Elf_Cmd _cmd, - unsigned int _flags); -unsigned int elf_flagehdr(Elf *_elf, Elf_Cmd _cmd, unsigned int _flags); -unsigned int elf_flagelf(Elf *_elf, Elf_Cmd _cmd, unsigned int _flags); -unsigned int elf_flagphdr(Elf *_elf, Elf_Cmd _cmd, unsigned int _flags); -unsigned int elf_flagscn(Elf_Scn *_scn, Elf_Cmd _cmd, unsigned int _flags); -unsigned int elf_flagshdr(Elf_Scn *_scn, Elf_Cmd _cmd, unsigned int _flags); -Elf_Arhdr *elf_getarhdr(Elf *_elf); -Elf_Arsym *elf_getarsym(Elf *_elf, size_t *_ptr); -off_t elf_getbase(Elf *_elf); -Elf_Data *elf_getdata(Elf_Scn *, Elf_Data *); -void elf_removedata(Elf_Scn *s, Elf_Data *d); -char *elf_getident(Elf *_elf, size_t *_ptr); -int elf_getphdrnum(Elf *_elf, size_t *_dst); -int elf_getphnum(Elf *_elf, size_t *_dst); /* Deprecated */ -Elf_Scn *elf_getscn(Elf *_elf, size_t _index); -int elf_getshdrnum(Elf *_elf, size_t *_dst); -int elf_getshnum(Elf *_elf, size_t *_dst); /* Deprecated */ -int elf_getshdrstrndx(Elf *_elf, size_t *_dst); -int elf_getshstrndx(Elf *_elf, size_t *_dst); /* Deprecated */ -unsigned long elf_hash(const char *_name); -Elf_Kind elf_kind(Elf *_elf); -Elf *elf_memory(char *_image, size_t _size, Elf_Mem *mem); -size_t elf_ndxscn(Elf_Scn *_scn); -Elf_Data *elf_newdata(Elf_Scn *_scn); -Elf_Scn *elf_newscn(Elf *_elf); -Elf_Scn *elf_nextscn(Elf *_elf, Elf_Scn *_scn); -Elf_Cmd elf_next(Elf *_elf); -off_t elf_rand(Elf *_elf, off_t _off); -Elf_Data *elf_rawdata(Elf_Scn *_scn, Elf_Data *_data); -char *elf_rawfile(Elf *_elf, size_t *_size); -int elf_setshstrndx(Elf *_elf, size_t _shnum); -char *elf_strptr(Elf *_elf, size_t _section, size_t _offset); -off_t elf_update(Elf *_elf, Elf_Cmd _cmd); -unsigned int elf_version(unsigned int _version); + unsigned int _flags) asm ("rocclr_elf_flagdata"); +unsigned int elf_flagehdr(Elf *_elf, Elf_Cmd _cmd, unsigned int _flags) asm ("rocclr_elf_flagehdr"); +unsigned int elf_flagelf(Elf *_elf, Elf_Cmd _cmd, unsigned int _flags) asm ("rocclr_elf_flagelf"); +unsigned int elf_flagphdr(Elf *_elf, Elf_Cmd _cmd, unsigned int _flags) asm ("rocclr_elf_flagphdr"); +unsigned int elf_flagscn(Elf_Scn *_scn, Elf_Cmd _cmd, unsigned int _flags) asm ("rocclr_elf_flagscn"); +unsigned int elf_flagshdr(Elf_Scn *_scn, Elf_Cmd _cmd, unsigned int _flags) asm ("rocclr_elf_flagshdr"); +Elf_Arhdr *elf_getarhdr(Elf *_elf) asm ("rocclr_elf_getarhdr"); +Elf_Arsym *elf_getarsym(Elf *_elf, size_t *_ptr) asm ("rocclr_elf_getarsym"); +off_t elf_getbase(Elf *_elf) asm ("rocclr_elf_getbase"); +Elf_Data *elf_getdata(Elf_Scn *, Elf_Data *) asm ("rocclr_elf_getdata"); +void elf_removedata(Elf_Scn *s, Elf_Data *d) asm ("rocclr_elf_removedata"); +char *elf_getident(Elf *_elf, size_t *_ptr) asm ("rocclr_elf_getident"); +int elf_getphdrnum(Elf *_elf, size_t *_dst) asm ("rocclr_elf_getphdrnum"); +int elf_getphnum(Elf *_elf, size_t *_dst) asm ("rocclr_elf_getphnum"); /* Deprecated */ +Elf_Scn *elf_getscn(Elf *_elf, size_t _index) asm ("rocclr_elf_getscn"); +int elf_getshdrnum(Elf *_elf, size_t *_dst) asm ("rocclr_elf_getshdrnum"); +int elf_getshnum(Elf *_elf, size_t *_dst) asm ("rocclr_elf_getshnum"); /* Deprecated */ +int elf_getshdrstrndx(Elf *_elf, size_t *_dst) asm ("rocclr_elf_getshdrstrndx"); +int elf_getshstrndx(Elf *_elf, size_t *_dst) asm ("rocclr_elf_getshstrndx"); /* Deprecated */ +unsigned long elf_hash(const char *_name) asm ("rocclr_elf_hash"); +Elf_Kind elf_kind(Elf *_elf) asm ("rocclr_elf_kind"); +Elf *elf_memory(char *_image, size_t _size, Elf_Mem *mem) asm ("rocclr_elf_memory"); +size_t elf_ndxscn(Elf_Scn *_scn) asm ("rocclr_elf_ndxscn"); +Elf_Data *elf_newdata(Elf_Scn *_scn) asm ("rocclr_elf_newdata"); +Elf_Scn *elf_newscn(Elf *_elf) asm ("rocclr_elf_newscn"); +Elf_Scn *elf_nextscn(Elf *_elf, Elf_Scn *_scn) asm ("rocclr_elf_nextscn"); +Elf_Cmd elf_next(Elf *_elf) asm ("rocclr_elf_next"); +off_t elf_rand(Elf *_elf, off_t _off) asm ("rocclr_elf_rand"); +Elf_Data *elf_rawdata(Elf_Scn *_scn, Elf_Data *_data) asm ("rocclr_elf_rawdata"); +char *elf_rawfile(Elf *_elf, size_t *_size) asm ("rocclr_elf_rawfile"); +int elf_setshstrndx(Elf *_elf, size_t _shnum) asm ("rocclr_elf_setshstrndx"); +char *elf_strptr(Elf *_elf, size_t _section, size_t _offset) asm ("rocclr_elf_strptr"); +off_t elf_update(Elf *_elf, Elf_Cmd _cmd) asm ("rocclr_elf_update"); +unsigned int elf_version(unsigned int _version) asm ("rocclr_elf_version"); -long elf32_checksum(Elf *_elf); +long elf32_checksum(Elf *_elf) asm ("rocclr_elf32_checksum"); size_t elf32_fsize(Elf_Type _type, size_t _count, - unsigned int _version); -Elf32_Ehdr *elf32_getehdr(Elf *_elf); -Elf32_Phdr *elf32_getphdr(Elf *_elf); -Elf32_Shdr *elf32_getshdr(Elf_Scn *_scn); -Elf32_Ehdr *elf32_newehdr(Elf *_elf); -Elf32_Phdr *elf32_newphdr(Elf *_elf, size_t _count); + unsigned int _version) asm ("rocclr_elf32_fsize"); +Elf32_Ehdr *elf32_getehdr(Elf *_elf) asm ("rocclr_elf32_getehdr"); +Elf32_Phdr *elf32_getphdr(Elf *_elf) asm ("rocclr_elf32_getphdr"); +Elf32_Shdr *elf32_getshdr(Elf_Scn *_scn) asm ("rocclr_elf32_getshdr"); +Elf32_Ehdr *elf32_newehdr(Elf *_elf) asm ("rocclr_elf32_newehdr"); +Elf32_Phdr *elf32_newphdr(Elf *_elf, size_t _count) asm ("rocclr_elf32_newphdr"); Elf_Data *elf32_xlatetof(Elf_Data *_dst, const Elf_Data *_src, - unsigned int _enc); + unsigned int _enc) asm ("rocclr_elf32_xlatetof"); Elf_Data *elf32_xlatetom(Elf_Data *_dst, const Elf_Data *_src, - unsigned int _enc); + unsigned int _enc) asm ("rocclr_elf32_xlatetom"); -long elf64_checksum(Elf *_elf); +long elf64_checksum(Elf *_elf) asm ("rocclr_elf64_checksum"); size_t elf64_fsize(Elf_Type _type, size_t _count, - unsigned int _version); -Elf64_Ehdr *elf64_getehdr(Elf *_elf); -Elf64_Phdr *elf64_getphdr(Elf *_elf); -Elf64_Shdr *elf64_getshdr(Elf_Scn *_scn); -Elf64_Ehdr *elf64_newehdr(Elf *_elf); -Elf64_Phdr *elf64_newphdr(Elf *_elf, size_t _count); + unsigned int _version) asm ("rocclr_elf64_fsize"); +Elf64_Ehdr *elf64_getehdr(Elf *_elf) asm ("rocclr_elf64_getehdr"); +Elf64_Phdr *elf64_getphdr(Elf *_elf) asm ("rocclr_elf64_getphdr"); +Elf64_Shdr *elf64_getshdr(Elf_Scn *_scn) asm ("rocclr_elf64_getshdr"); +Elf64_Ehdr *elf64_newehdr(Elf *_elf) asm ("rocclr_elf64_newehdr"); +Elf64_Phdr *elf64_newphdr(Elf *_elf, size_t _count) asm ("rocclr_elf64_newphdr"); Elf_Data *elf64_xlatetof(Elf_Data *_dst, const Elf_Data *_src, - unsigned int _enc); + unsigned int _enc) asm ("rocclr_elf64_xlatetof"); Elf_Data *elf64_xlatetom(Elf_Data *_dst, const Elf_Data *_src, - unsigned int _enc); + unsigned int _enc) asm ("rocclr_elf64_xlatetom"); __END_DECLS #pragma GCC visibility pop