3437254d7b
We have a case in solib-svr4.c where we could reuse symfile-mem.c's vDSO range lookup. Since symfile-mem.c is not present in all configurations solib-svr4.c is, move that lookup to a gdbarch hook. This has the minor (good) side effect that we stop even trying the target_auxv_search lookup against targets that don't have a concept of a vDSO, in case symfile-mem.c happens to be linked in the build (--enable-targets=all). Tested on x86_64 Fedora 20. gdb/ 2014-10-10 Pedro Alves <palves@redhat.com> * arch-utils.c (default_vsyscall_range): New function. * arch-utils.h (default_vsyscall_range): New declaration. * gdbarch.sh (vsyscall_range): New hook. * gdbarch.h, gdbarch.c: Regenerate. * linux-tdep.c (linux_vsyscall_range): New function. (linux_init_abi): Install linux_vsyscall_range as vsyscall_range gdbarch hook. * memrange.c (address_in_mem_range): New function. * memrange.h (address_in_mem_range): New declaration. * symfile-mem.c (find_vdso_size): Delete function. (add_vsyscall_page): Use gdbarch_vsyscall_range.
57 lines
1.6 KiB
C
57 lines
1.6 KiB
C
/* The memory range data structure, and associated utilities.
|
|
|
|
Copyright (C) 2010-2014 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef MEMRANGE_H
|
|
#define MEMRANGE_H
|
|
|
|
#include "vec.h"
|
|
|
|
/* Defines a [START, START + LENGTH) memory range. */
|
|
|
|
struct mem_range
|
|
{
|
|
/* Lowest address in the range. */
|
|
CORE_ADDR start;
|
|
|
|
/* Length of the range. */
|
|
int length;
|
|
};
|
|
|
|
typedef struct mem_range mem_range_s;
|
|
|
|
DEF_VEC_O(mem_range_s);
|
|
|
|
/* Returns true if the ranges defined by [start1, start1+len1) and
|
|
[start2, start2+len2) overlap. */
|
|
|
|
extern int mem_ranges_overlap (CORE_ADDR start1, int len1,
|
|
CORE_ADDR start2, int len2);
|
|
|
|
/* Returns true if ADDR is in RANGE. */
|
|
|
|
extern int address_in_mem_range (CORE_ADDR addr,
|
|
const struct mem_range *range);
|
|
|
|
/* Sort ranges by start address, then coalesce contiguous or
|
|
overlapping ranges. */
|
|
|
|
extern void normalize_mem_ranges (VEC(mem_range_s) *memory);
|
|
|
|
#endif
|