diff options
author | Elliott Hughes <enh@google.com> | 2014-01-28 00:24:57 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-01-28 00:24:57 +0000 |
commit | 652dd5196df87bdeef7bff452f1a4857a96e3133 (patch) | |
tree | 2ff78ef9afd6d49f8a7c793da3865be102d48a6d | |
parent | ba0c668feca851fd52359bee4174a232f27697b4 (diff) | |
parent | d373d0c038d29931a51c7fe11d23b4084e91b837 (diff) | |
download | android_bionic-652dd5196df87bdeef7bff452f1a4857a96e3133.tar.gz android_bionic-652dd5196df87bdeef7bff452f1a4857a96e3133.tar.bz2 android_bionic-652dd5196df87bdeef7bff452f1a4857a96e3133.zip |
Merge "Remove libthread_db from bionic."
-rw-r--r-- | libthread_db/Android.mk | 30 | ||||
-rw-r--r-- | libthread_db/MODULE_LICENSE_BSD | 0 | ||||
-rw-r--r-- | libthread_db/NOTICE | 4 | ||||
-rw-r--r-- | libthread_db/include/sys/procfs.h | 22 | ||||
-rw-r--r-- | libthread_db/include/thread_db.h | 166 | ||||
-rw-r--r-- | libthread_db/libthread_db.c | 247 |
6 files changed, 0 insertions, 469 deletions
diff --git a/libthread_db/Android.mk b/libthread_db/Android.mk deleted file mode 100644 index 5defe011a..000000000 --- a/libthread_db/Android.mk +++ /dev/null @@ -1,30 +0,0 @@ -LOCAL_PATH:= $(call my-dir) - -# -# static -# - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES:= \ - libthread_db.c - -LOCAL_MODULE:= libthread_db -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk - -include $(BUILD_STATIC_LIBRARY) - -# -# shared -# - -include $(CLEAR_VARS) - -LOCAL_WHOLE_STATIC_LIBRARIES := libthread_db -LOCAL_MODULE := libthread_db -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk -LOCAL_SHARED_LIBRARIES := libdl libc -LOCAL_ALLOW_UNDEFINED_SYMBOLS := false -LOCAL_SYSTEM_SHARED_LIBRARIES := - -include $(BUILD_SHARED_LIBRARY) diff --git a/libthread_db/MODULE_LICENSE_BSD b/libthread_db/MODULE_LICENSE_BSD deleted file mode 100644 index e69de29bb..000000000 --- a/libthread_db/MODULE_LICENSE_BSD +++ /dev/null diff --git a/libthread_db/NOTICE b/libthread_db/NOTICE deleted file mode 100644 index 5487df66c..000000000 --- a/libthread_db/NOTICE +++ /dev/null @@ -1,4 +0,0 @@ -Copyright 2006 The Android Open Source Project - -------------------------------------------------------------------- - diff --git a/libthread_db/include/sys/procfs.h b/libthread_db/include/sys/procfs.h deleted file mode 100644 index 0ae7a0bd9..000000000 --- a/libthread_db/include/sys/procfs.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2006 The Android Open Source Project - */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H - -#include <sys/types.h> - - -#ifdef __cplusplus -extern "C"{ -#endif - -typedef pid_t lwpid_t; -typedef void *psaddr_t; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libthread_db/include/thread_db.h b/libthread_db/include/thread_db.h deleted file mode 100644 index 1ed8ffca8..000000000 --- a/libthread_db/include/thread_db.h +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright 2006 The Android Open Source Project - */ - -#ifndef _LIBTHREAD_DB__THREAD_DB_H -#define _LIBTHREAD_DB__THREAD_DB_H - -#include <pthread.h> -#include <signal.h> -#include <stdint.h> -#include <sys/types.h> -#include <sys/procfs.h> - -#define TD_THR_ANY_USER_FLAGS 0xffffffff -#define TD_THR_LOWEST_PRIORITY -20 -#define TD_SIGNO_MASK NULL - -/* td_err_e values */ -enum { - TD_OK, - TD_ERR, - TD_NOTHR, - TD_NOSV, - TD_NOLWP, - TD_BADPH, - TD_BADTH, - TD_BADSH, - TD_BADTA, - TD_BADKEY, - TD_NOMSG, - TD_NOFPREGS, - TD_NOLIBTHREAD, - TD_NOEVENT, - TD_NOCAPAB, - TD_DBERR, - TD_NOAPLIC, - TD_NOTSD, - TD_MALLOC, - TD_PARTIALREG, - TD_NOXREGS, - TD_VERSION -}; - -/* - * td_event_e values - * NOTE: There is a max of 32 events - */ -enum { - TD_CREATE, - TD_DEATH -}; - -/* td_thr_state_e values */ -enum { - TD_THR_ANY_STATE, - TD_THR_UNKNOWN, - TD_THR_SLEEP, - TD_THR_ZOMBIE -}; - -typedef int32_t td_err_e; -typedef uint32_t td_event_e; -typedef uint32_t td_notify_e; -typedef uint32_t td_thr_state_e; -typedef pthread_t thread_t; - -typedef struct -{ - pid_t pid; - struct ps_prochandle *ph; -} td_thragent_t; - -typedef struct -{ - pid_t pid; - pid_t tid; -} td_thrhandle_t; - -typedef struct -{ - td_event_e event; - td_thrhandle_t const * th_p; - union { - void * data; - } msg; -} td_event_msg_t; - -typedef struct -{ - uint32_t events; -} td_thr_events_t; - -typedef struct -{ - union { - void * bptaddr; - } u; -} td_notify_t; - -typedef struct -{ - td_thr_state_e ti_state; - thread_t ti_tid; // pthread's id for the thread - int32_t ti_lid; // the kernel's id for the thread -} td_thrinfo_t; - - -#define td_event_emptyset(set) \ - (set)->events = 0 - -#define td_event_fillset(set) \ - (set)->events = 0xffffffff - -#define td_event_addset(set, n) \ - (set)->events |= (1 << n) - - -typedef int td_thr_iter_f(td_thrhandle_t const *, void *); - - -struct ps_prochandle; - -#ifdef __cplusplus -extern "C"{ -#endif - -extern td_err_e td_ta_new(struct ps_prochandle * proc_handle, td_thragent_t ** thread_agent); - -extern td_err_e td_ta_delete(td_thragent_t * ta); - -extern td_err_e td_ta_set_event(td_thragent_t const * agent, td_thr_events_t * event); - -extern td_err_e td_ta_event_addr(td_thragent_t const * agent, td_event_e event, td_notify_t * notify); - -extern td_err_e td_ta_clear_event(const td_thragent_t * ta_arg, - td_thr_events_t * event); - -extern td_err_e td_ta_event_getmsg(td_thragent_t const * agent, td_event_msg_t * event); - -extern td_err_e td_ta_map_lwp2thr(td_thragent_t const * agent, lwpid_t lwpid, - td_thrhandle_t *th); - -extern td_err_e td_thr_get_info(td_thrhandle_t const * handle, - td_thrinfo_t * info); - -extern td_err_e td_thr_event_enable(td_thrhandle_t const * handle, - td_event_e event); - -extern td_err_e td_ta_thr_iter(td_thragent_t const * agent, td_thr_iter_f * func, void * cookie, - td_thr_state_e state, int32_t prio, sigset_t * sigmask, uint32_t user_flags); - -extern td_err_e td_thr_event_enable(td_thrhandle_t const * handle, td_event_e event); - -extern td_err_e td_thr_get_info(td_thrhandle_t const * handle, td_thrinfo_t * info); - -extern char const ** td_symbol_list(void); - -extern td_err_e td_thr_tls_get_addr(const td_thrhandle_t * th, - psaddr_t map_address, size_t offset, - psaddr_t * address); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libthread_db/libthread_db.c b/libthread_db/libthread_db.c deleted file mode 100644 index d89904515..000000000 --- a/libthread_db/libthread_db.c +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Copyright 2006 The Android Open Source Project - */ - -#include <dirent.h> -#include <sys/ptrace.h> -#include <stdint.h> -#include <thread_db.h> -#include <stdlib.h> -#include <stdio.h> - -extern int ps_pglobal_lookup (void *, const char *obj, const char *name, void **sym_addr); -extern pid_t ps_getpid(struct ps_prochandle *ph); - -/* - * This is the list of "special" symbols we care about whose addresses are - * cached by gdbserver from the host at init time. - */ -enum { - SYM_TD_CREATE, - SYM_THREAD_LIST, - NUM_SYMS -}; - -static char const * gSymbols[] = { - [SYM_TD_CREATE] = "_thread_created_hook", - NULL -}; - - -char const ** -td_symbol_list(void) -{ - return gSymbols; -} - - -td_err_e -td_ta_new(struct ps_prochandle * proc_handle, td_thragent_t ** agent_out) -{ - td_thragent_t * agent; - - agent = (td_thragent_t *)malloc(sizeof(td_thragent_t)); - if (!agent) { - return TD_MALLOC; - } - - agent->pid = ps_getpid(proc_handle); - agent->ph = proc_handle; - *agent_out = agent; - - return TD_OK; -} - - -td_err_e -td_ta_delete(td_thragent_t * ta) -{ - free(ta); - // FIXME: anything else to do? - return TD_OK; -} - - -/* NOTE: not used by gdb 7.0 */ - -td_err_e -td_ta_set_event(td_thragent_t const * agent, td_thr_events_t * events) -{ - return TD_OK; -} - - -/* NOTE: not used by gdb 7.0 */ -static td_thrhandle_t gEventMsgHandle; - -/* NOTE: not used by gdb 7.0 */ - -static int -_event_getmsg_helper(td_thrhandle_t const * handle, void * bkpt_addr) -{ -#if defined(__arm__) - void* pc = (void *)ptrace(PTRACE_PEEKUSR, handle->tid, (void *)60 /* r15/pc */, NULL); - if (pc == bkpt_addr) { - // The hook function takes the id of the new thread as it's first param, - // so grab it from r0. - gEventMsgHandle.pid = ptrace(PTRACE_PEEKUSR, handle->tid, (void *)0 /* r0 */, NULL); - gEventMsgHandle.tid = gEventMsgHandle.pid; - return 0x42; - } -#elif defined(__i386__) - // Get the eip from offset 12*4 = 48 as defined in the struct - // user_regs_struct in user_32.h - void* pc = (void *)ptrace(PTRACE_PEEKUSR, handle->tid, (void *)48 /* eip */, NULL); - // FIXME - pc is a non-decremented breakpoint address, hence the - // addition of 1 on test. This seems to work for the thread hook - // function in libc.so but should be properly fixed. - if (pc == ((int)bkpt_addr + 1)) { - // The hook function takes the id of the new thread as it's first - // param, so grab it from ecx at offset 4 in struct user_regs_struct - // (using fastcall convention for x86) - gEventMsgHandle.pid = ptrace(PTRACE_PEEKUSR, handle->tid, (void *)4 /* ecx */, NULL); - gEventMsgHandle.tid = gEventMsgHandle.pid; - return 0x42; - } -#elif defined(__mips__) - void* pc = (void *)ptrace(PTRACE_PEEKUSR, handle->tid, (void *)(64*4) /* pc */, NULL); - if (pc == bkpt_addr) { - // The hook function takes the id of the new thread as it's first param, - // so grab it from a0 - gEventMsgHandle.pid = ptrace(PTRACE_PEEKUSR, handle->tid, (void *)(4*4) /* a0 */, NULL); - gEventMsgHandle.tid = gEventMsgHandle.pid; - return 0x42; - } -#endif - return 0; -} - -/* NOTE: not used by gdb 7.0 */ - -td_err_e -td_ta_event_getmsg(td_thragent_t const * agent, td_event_msg_t * event) -{ - td_err_e err; - void * bkpt_addr; - - err = ps_pglobal_lookup(NULL, NULL, gSymbols[SYM_TD_CREATE], &bkpt_addr); - if (err) { - return err; - } - - err = td_ta_thr_iter(agent, _event_getmsg_helper, bkpt_addr, 0, 0, NULL, 0); - if (err != 0x42) { - return TD_NOMSG; - } - - event->event = TD_CREATE; - event->th_p = &gEventMsgHandle; // Nasty hack, but it's the only way! - - return TD_OK; -} - - -td_err_e -td_ta_map_lwp2thr(td_thragent_t const * agent, lwpid_t lwpid, - td_thrhandle_t *th) -{ - th->pid = ps_getpid(agent->ph); - th->tid = lwpid; - return TD_OK; -} - - -td_err_e -td_thr_get_info(td_thrhandle_t const * handle, td_thrinfo_t * info) -{ - info->ti_tid = handle->tid; - info->ti_lid = handle->tid; - info->ti_state = TD_THR_SLEEP; /* XXX this needs to be read from /proc/<pid>/task/<tid>. - This is only used to see if the thread is a zombie or not */ - return TD_OK; -} - - -/* NOTE: not used by gdb 7.0 */ - -td_err_e -td_thr_event_enable(td_thrhandle_t const * handle, td_event_e event) -{ - // I don't think we need to do anything here... - return TD_OK; -} - - -/* NOTE: not used by gdb 7.0 */ - -td_err_e -td_ta_event_addr(td_thragent_t const * agent, td_event_e event, td_notify_t * notify_out) -{ - int32_t err; - - /* - * This is nasty, ps_pglobal_lookup is implemented in gdbserver and looks up - * the symbol from it's cache, which is populated at start time with the - * symbols returned from td_symbol_list via calls back to the host. - */ - - switch (event) { - case TD_CREATE: - err = ps_pglobal_lookup(NULL, NULL, gSymbols[SYM_TD_CREATE], ¬ify_out->u.bptaddr); - if (err) { - return TD_NOEVENT; - } - return TD_OK; - } - return TD_NOEVENT; -} - - -td_err_e -td_ta_clear_event(const td_thragent_t * ta_arg, td_thr_events_t * event) -{ - /* Given that gdb 7.0 doesn't use thread events, - there's nothing we need to do here. */ - return TD_OK; -} - - -td_err_e -td_ta_thr_iter(td_thragent_t const * agent, td_thr_iter_f * func, void * cookie, - td_thr_state_e state, int32_t prio, sigset_t * sigmask, uint32_t user_flags) -{ - td_err_e err = TD_OK; - char path[32]; - DIR * dir; - struct dirent * entry; - td_thrhandle_t handle; - - snprintf(path, sizeof(path), "/proc/%d/task/", agent->pid); - dir = opendir(path); - if (!dir) { - return TD_NOEVENT; - } - - handle.pid = agent->pid; - while ((entry = readdir(dir)) != NULL) { - if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { - continue; - } - handle.tid = atoi(entry->d_name); - if (func(&handle, cookie) != 0) { - err = TD_DBERR; - break; - } - } - - closedir(dir); - - return err; -} - -td_err_e -td_thr_tls_get_addr(const td_thrhandle_t * th, - psaddr_t map_address, size_t offset, psaddr_t * address) -{ - return TD_NOAPLIC; // FIXME: TODO -} |