This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFC: Correct "paddr_t" in gdb_proc_service.h


> Date: Wed, 15 Mar 2006 11:36:50 -0500
> From: Daniel Jacobowitz <drow@false.org>
> 
> If there is no <proc_service.h>, GDB will typedef unsigned long to paddr_t,
> which is then used in various libthread_db interfaces.  Even when this code
> was designed to work on Solaris systems in addition to GNU/Linux, this
> wasn't right; Solaris doesn't provide a paddr_t that has anything to do with
> libthread_db, only an unrelated one that deals with physical addressing.

Yes indeed.  On BSD paddr_t is an usnigned integer type used to store
physical memory addresses

> The type that glibc's libthread_db uses is psaddr_t, which is a pointer
> type.
> 
> When I wrote this patch (last year) I went through the original changelog
> entries for this file from 2000; they suggest that this change is correct
> and there should be no paddr_t references in GDB.

I think that's right, and therefore I don't understand your change at all :(.

> 2006-03-15  Daniel Jacobowitz  <dan@codesourcery.com>
> 
> 	* gdb_proc_service.h (paddr_t): Use psaddr_t if available.
> 	* proc-service.c (ps_xfer_memory): Cast paddr_t to unsigned
> 	long.
> 	(ps_pglobal_lookup): Cast CORE_ADDR to paddr_t.
> 
> Index: src/gdb/gdb_proc_service.h
> ===================================================================
> --- src.orig/gdb/gdb_proc_service.h	2006-03-15 10:21:32.000000000 -0500
> +++ src/gdb/gdb_proc_service.h	2006-03-15 10:21:36.000000000 -0500
> @@ -1,5 +1,5 @@
>  /* <proc_service.h> replacement for systems that don't have it.
> -   Copyright (C) 2000 Free Software Foundation, Inc.
> +   Copyright (C) 2000, 2006 Free Software Foundation, Inc.
>  
>     This file is part of GDB.
>  
> @@ -48,10 +48,11 @@ typedef enum
>  typedef unsigned int lwpid_t;
>  #endif
>  
> -typedef unsigned long paddr_t;
> -
>  #ifndef HAVE_PSADDR_T
>  typedef unsigned long psaddr_t;
> +typedef unsigned long paddr_t;
> +#else
> +typedef psaddr_t paddr_t;
>  #endif
>  
>  #ifndef HAVE_PRGREGSET_T
> Index: src/gdb/proc-service.c
> ===================================================================
> --- src.orig/gdb/proc-service.c	2006-03-15 10:21:32.000000000 -0500
> +++ src/gdb/proc-service.c	2006-03-15 10:22:49.000000000 -0500
> @@ -75,9 +75,9 @@ ps_xfer_memory (const struct ps_prochand
>    inferior_ptid = pid_to_ptid (ph->pid);
>  
>    if (write)
> -    ret = target_write_memory (addr, buf, len);
> +    ret = target_write_memory ((unsigned long) addr, buf, len);
>    else
> -    ret = target_read_memory (addr, buf, len);
> +    ret = target_read_memory ((unsigned long) addr, buf, len);
>  
>    do_cleanups (old_chain);
>  
> @@ -181,7 +181,7 @@ ps_pglobal_lookup (gdb_ps_prochandle_t p
>    if (ms == NULL)
>      return PS_NOSYM;
>  
> -  *sym_addr = SYMBOL_VALUE_ADDRESS (ms);
> +  *sym_addr = (paddr_t) (unsigned long) SYMBOL_VALUE_ADDRESS (ms);
>    return PS_OK;
>  }
>  
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]