libproc_impl.c revision 4204
4204N/A * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. 0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 0N/A * This code is free software; you can redistribute it and/or modify it 0N/A * under the terms of the GNU General Public License version 2 only, as 0N/A * published by the Free Software Foundation. 0N/A * This code is distributed in the hope that it will be useful, but WITHOUT 0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 0N/A * version 2 for more details (a copy is included in the LICENSE file that 0N/A * accompanied this code). 0N/A * You should have received a copy of the GNU General Public License version 0N/A * 2 along with this work; if not, write to the Free Software Foundation, 0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 1472N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 0N/A// initialize libproc 0N/A // initialize the thread_db library 0N/A// ps_prochandle cleanup 0N/A// ps_prochandle cleanup 0N/A // do the "derived class" clean-up first 0N/A // check whether we have got an ELF file. /proc/<pid>/map 0N/A // gives out all file mappings and not just shared objects 0N/A // even if symbol table building fails, we add the lib_info. 0N/A // This is because we may need to read from the ELF file for core file 0N/A // address read functionality. lookup_symbol checks for NULL symtab. 0N/A// lookup for a specific symbol 0N/A // ignore object_name. search in all libraries 0N/A // FIXME: what should we do with object_name?? The library names are obtained 0N/A // by parsing /proc/<pid>/maps, which may not be the same as object_name. 0N/A // What we need is a utility to map object_name to real file name, something 0N/A // now, we just ignore object_name and do a global search for the symbol. 0N/A// add a thread to ps_prochandle 0N/A // initialize thread info 0N/A // add new thread to the list 0N/A// struct used for client data from thread_db callback 0N/A// callback function for libthread_db 0N/A print_debug(
"libthread_db : td_thr_get_info failed, can't get thread info\n");
0N/A// read thread_info using libthread_db 0N/A // we use libthread_db iterator to iterate thru list of threads. 0N/A // delete thread agent 0N/A// get number of threads 0N/A// get lwp_id of n'th thread 0N/A// get regs for a given lwp 0N/A// get number of shared objects 0N/A// get name of n'th solib 0N/A// get base address of a lib 0N/A//-------------------------------------------------------------------------- 0N/A// proc service functions 0N/A// ps_pglobal_lookup() looks up the symbol sym_name in the symbol table 0N/A// of the load object object_name in the target process identified by ph. 0N/A// It returns the symbol's value as an address in the target process in 0N/A// read "size" bytes info "buf" from address "addr" 0N/A// write "size" bytes of data to debuggee at address "addr" 0N/A// ------------------------------------------------------------------------ 0N/A// Functions below this point are not yet implemented. They are here only 0N/A// to make the linker happy. 0N/A// new libthread_db of NPTL seem to require this symbol