Merge "Add link.h for all platforms with dl_phdr_info"
This commit is contained in:
		@@ -25,12 +25,8 @@
 | 
			
		||||
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
typedef long unsigned int *_Unwind_Ptr;
 | 
			
		||||
 | 
			
		||||
/* Stubbed out in libdl and defined in the dynamic linker.
 | 
			
		||||
 * Same semantics as __gnu_Unwind_Find_exidx().
 | 
			
		||||
 */
 | 
			
		||||
extern _Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int *pcount);
 | 
			
		||||
#include <link.h>
 | 
			
		||||
 | 
			
		||||
/* For a given PC, find the .so that it belongs to.
 | 
			
		||||
 * Returns the base address of the .ARM.exidx section
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,8 @@
 | 
			
		||||
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
typedef long unsigned int *_Unwind_Ptr;
 | 
			
		||||
 | 
			
		||||
#include <link.h>
 | 
			
		||||
 | 
			
		||||
/* Find the .ARM.exidx section (which in the case of a static executable
 | 
			
		||||
 * can be identified through its start and end symbols), and return its
 | 
			
		||||
 
 | 
			
		||||
@@ -28,16 +28,7 @@
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <linux/elf.h>
 | 
			
		||||
 | 
			
		||||
/* TODO: Move this into a header that linker.h can also pull it in.
 | 
			
		||||
 * Silly to have same struct in 2 places. This is temporary. */
 | 
			
		||||
struct dl_phdr_info
 | 
			
		||||
{
 | 
			
		||||
    Elf32_Addr dlpi_addr;
 | 
			
		||||
    const char *dlpi_name;
 | 
			
		||||
    const Elf32_Phdr *dlpi_phdr;
 | 
			
		||||
    Elf32_Half dlpi_phnum;
 | 
			
		||||
};
 | 
			
		||||
#include <link.h>
 | 
			
		||||
 | 
			
		||||
/* Dynamic binaries get this from the dynamic linker (system/linker), which
 | 
			
		||||
 * we don't pull in for static bins. We also don't have a list of so's to
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								libc/include/link.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								libc/include/link.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2012 The Android Open Source Project
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *  * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *  * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 | 
			
		||||
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 | 
			
		||||
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 | 
			
		||||
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 | 
			
		||||
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 | 
			
		||||
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 | 
			
		||||
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 | 
			
		||||
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef _LINK_H_
 | 
			
		||||
#define _LINK_H_
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <elf.h>
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
/* bionic is currently only 32-bit. */
 | 
			
		||||
#define ElfW(type) Elf32_##type
 | 
			
		||||
 | 
			
		||||
struct dl_phdr_info {
 | 
			
		||||
  ElfW(Addr) dlpi_addr;
 | 
			
		||||
  const char* dlpi_name;
 | 
			
		||||
  const ElfW(Phdr)* dlpi_phdr;
 | 
			
		||||
  ElfW(Half) dlpi_phnum;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef __arm__
 | 
			
		||||
typedef long unsigned int* _Unwind_Ptr;
 | 
			
		||||
_Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int* pcount);
 | 
			
		||||
#else
 | 
			
		||||
int dl_iterate_phdr(int (*cb)(struct dl_phdr_info*, size_t, void*), void*);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
__END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* _LINK_H_ */
 | 
			
		||||
@@ -37,6 +37,7 @@
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
#include <link.h>
 | 
			
		||||
 | 
			
		||||
#undef PAGE_MASK
 | 
			
		||||
#undef PAGE_SIZE
 | 
			
		||||
@@ -72,16 +73,6 @@ struct link_map
 | 
			
		||||
    struct link_map * l_prev;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* needed for dl_iterate_phdr to be passed to the callbacks provided */
 | 
			
		||||
struct dl_phdr_info
 | 
			
		||||
{
 | 
			
		||||
    Elf32_Addr dlpi_addr;
 | 
			
		||||
    const char *dlpi_name;
 | 
			
		||||
    const Elf32_Phdr *dlpi_phdr;
 | 
			
		||||
    Elf32_Half dlpi_phnum;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Values for r_debug->state
 | 
			
		||||
enum {
 | 
			
		||||
    RT_CONSISTENT,
 | 
			
		||||
@@ -241,13 +232,6 @@ Elf32_Sym *soinfo_find_symbol(soinfo* si, const void *addr);
 | 
			
		||||
Elf32_Sym *soinfo_lookup(soinfo *si, const char *name);
 | 
			
		||||
void soinfo_call_constructors(soinfo *si);
 | 
			
		||||
 | 
			
		||||
#if defined(ANDROID_ARM_LINKER)
 | 
			
		||||
typedef long unsigned int *_Unwind_Ptr;
 | 
			
		||||
_Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int *pcount);
 | 
			
		||||
#elif defined(ANDROID_X86_LINKER) || defined(ANDROID_MIPS_LINKER)
 | 
			
		||||
int dl_iterate_phdr(int (*cb)(struct dl_phdr_info *, size_t, void *), void *);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user