16ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
26ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Copyright (C) 2012 The Android Open Source Project
36ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * All rights reserved.
46ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *
56ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Redistribution and use in source and binary forms, with or without
66ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * modification, are permitted provided that the following conditions
76ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * are met:
86ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *  * Redistributions of source code must retain the above copyright
96ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *    notice, this list of conditions and the following disclaimer.
106ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *  * Redistributions in binary form must reproduce the above copyright
116ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *    notice, this list of conditions and the following disclaimer in
126ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *    the documentation and/or other materials provided with the
136ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *    distribution.
146ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *
156ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
166ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
176ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
186ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
196ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
206ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
216ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
226ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
236ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
246ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
256ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
266ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * SUCH DAMAGE.
276ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
286ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#ifndef _LINK_H_
296ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define _LINK_H_
306ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
316ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#include <sys/types.h>
326ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#include <elf.h>
336ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
346ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh__BEGIN_DECLS
356ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
366ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/* bionic is currently only 32-bit. */
376ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define ElfW(type) Elf32_##type
386ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
396ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehstruct dl_phdr_info {
406ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh  ElfW(Addr) dlpi_addr;
416ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh  const char* dlpi_name;
426ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh  const ElfW(Phdr)* dlpi_phdr;
436ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh  ElfW(Half) dlpi_phnum;
446ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh};
456ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
466ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#ifdef __arm__
476ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehtypedef long unsigned int* _Unwind_Ptr;
486ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh_Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int* pcount);
496ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#else
506ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehint dl_iterate_phdr(int (*cb)(struct dl_phdr_info*, size_t, void*), void*);
516ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#endif
526ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
536ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh__END_DECLS
546ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
556ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#endif /* _LINK_H_ */
56