1b725ae77Skettenis /* Handle shared libraries for GDB, the GNU Debugger. 2b725ae77Skettenis 3b725ae77Skettenis Copyright 2000, 2004 4b725ae77Skettenis Free Software Foundation, Inc. 5b725ae77Skettenis 6b725ae77Skettenis This file is part of GDB. 7b725ae77Skettenis 8b725ae77Skettenis This program is free software; you can redistribute it and/or modify 9b725ae77Skettenis it under the terms of the GNU General Public License as published by 10b725ae77Skettenis the Free Software Foundation; either version 2 of the License, or 11b725ae77Skettenis (at your option) any later version. 12b725ae77Skettenis 13b725ae77Skettenis This program is distributed in the hope that it will be useful, 14b725ae77Skettenis but WITHOUT ANY WARRANTY; without even the implied warranty of 15b725ae77Skettenis MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16b725ae77Skettenis GNU General Public License for more details. 17b725ae77Skettenis 18b725ae77Skettenis You should have received a copy of the GNU General Public License 19b725ae77Skettenis along with this program; if not, write to the Free Software 20b725ae77Skettenis Foundation, Inc., 59 Temple Place - Suite 330, 21b725ae77Skettenis Boston, MA 02111-1307, USA. */ 22b725ae77Skettenis 23*11efff7fSkettenis #ifndef SOLIB_SVR4_H 24*11efff7fSkettenis #define SOLIB_SVR4_H 25*11efff7fSkettenis 26b725ae77Skettenis struct objfile; 27b725ae77Skettenis 28b725ae77Skettenis /* Critical offsets and sizes which describe struct r_debug and 29b725ae77Skettenis struct link_map on SVR4-like targets. All offsets and sizes are 30b725ae77Skettenis in bytes unless otherwise specified. */ 31b725ae77Skettenis 32b725ae77Skettenis struct link_map_offsets 33b725ae77Skettenis { 34b725ae77Skettenis /* Size of struct r_debug (or equivalent), or at least enough of it to 35b725ae77Skettenis be able to obtain the r_map field. */ 36b725ae77Skettenis int r_debug_size; 37b725ae77Skettenis 38b725ae77Skettenis /* Offset to the r_map field in struct r_debug. */ 39b725ae77Skettenis int r_map_offset; 40b725ae77Skettenis 41b725ae77Skettenis /* Size of the r_map field in struct r_debug. */ 42b725ae77Skettenis int r_map_size; 43b725ae77Skettenis 44b725ae77Skettenis /* Size of struct link_map (or equivalent), or at least enough of it 45b725ae77Skettenis to be able to obtain the fields below. */ 46b725ae77Skettenis int link_map_size; 47b725ae77Skettenis 48b725ae77Skettenis /* Offset to l_addr field in struct link_map. */ 49b725ae77Skettenis int l_addr_offset; 50b725ae77Skettenis 51b725ae77Skettenis /* Size of l_addr field in struct link_map. */ 52b725ae77Skettenis int l_addr_size; 53b725ae77Skettenis 54b725ae77Skettenis /* Offset to l_next field in struct link_map. */ 55b725ae77Skettenis int l_next_offset; 56b725ae77Skettenis 57b725ae77Skettenis /* Size of l_next field in struct link_map. */ 58b725ae77Skettenis int l_next_size; 59b725ae77Skettenis 60b725ae77Skettenis /* Offset to l_prev field in struct link_map. */ 61b725ae77Skettenis int l_prev_offset; 62b725ae77Skettenis 63b725ae77Skettenis /* Size of l_prev field in struct link_map. */ 64b725ae77Skettenis int l_prev_size; 65b725ae77Skettenis 66b725ae77Skettenis /* Offset to l_name field in struct link_map. */ 67b725ae77Skettenis int l_name_offset; 68b725ae77Skettenis 69b725ae77Skettenis /* Size of l_name field in struct link_map. */ 70b725ae77Skettenis int l_name_size; 71b725ae77Skettenis }; 72b725ae77Skettenis 73b725ae77Skettenis /* set_solib_svr4_fetch_link_map_offsets() is intended to be called by 74b725ae77Skettenis a <arch>_gdbarch_init() function. It is used to establish an 75b725ae77Skettenis architecture specific link_map_offsets fetcher for the architecture 76b725ae77Skettenis being defined. */ 77b725ae77Skettenis 78b725ae77Skettenis extern void set_solib_svr4_fetch_link_map_offsets 79b725ae77Skettenis (struct gdbarch *gdbarch, struct link_map_offsets *(*func) (void)); 80b725ae77Skettenis 81b725ae77Skettenis /* This function is called by thread_db.c. Return the address of the 82b725ae77Skettenis link map for the given objfile. */ 83b725ae77Skettenis extern CORE_ADDR svr4_fetch_objfile_link_map (struct objfile *objfile); 84b725ae77Skettenis 85b725ae77Skettenis /* legacy_svr4_fetch_link_map_offsets_hook is a pointer to a function 86b725ae77Skettenis which is used to fetch link map offsets. It will only be set 87b725ae77Skettenis by solib-legacy.c, if at all. */ 88b725ae77Skettenis extern struct link_map_offsets *(*legacy_svr4_fetch_link_map_offsets_hook)(void); 89b725ae77Skettenis 90b725ae77Skettenis /* Fetch (and possibly build) an appropriate `struct link_map_offsets' 91b725ae77Skettenis for ILP32 and LP64 SVR4 systems. */ 92b725ae77Skettenis extern struct link_map_offsets *svr4_ilp32_fetch_link_map_offsets (void); 93b725ae77Skettenis extern struct link_map_offsets *svr4_lp64_fetch_link_map_offsets (void); 94*11efff7fSkettenis 95*11efff7fSkettenis #endif /* solib-svr4.h */ 96