From: Pedro Alves <pedro_alves@portugalmail.pt>
To: gdb-patches@sourceware.org
Subject: Re: Building solib-target.c when CORE_ADDR != ULONGEST.
Date: Sun, 08 Jul 2007 14:46:00 -0000 [thread overview]
Message-ID: <4690F562.9060009@portugalmail.pt> (raw)
In-Reply-To: <20070708012711.GA12934@caradoc.them.org>
[-- Attachment #1: Type: text/plain, Size: 2733 bytes --]
Daniel Jacobowitz wrote:
> On Sun, Jul 08, 2007 at 02:20:49AM +0100, Pedro Alves wrote:
>> I'm using the attached patch to try to catch invalid data send by a
>> (remote) target, but I guess it isn't correct for all archs.
>
> I don't think this check is worth doing, honestly. Does it work fine
> with just the cast?
>
Sure. I used it to double check gdbserver was passing right
values, and I agree that it is overkill.
About the VEC in question. I noticed that the xml parsing
xmalloc's the memory for the ULONGEST, but it is safe to
pass a pointer in a local var, right?
I got confused because in vec.h:
"Because of the different behavior of structure objects, scalar
objects and of pointers, there are three flavors, one for each of
these variants. Both the structure object and pointer variants
pass pointers to objects around -- in the former case the pointers
are stored into the vector and in the latter case the pointers are
dereferenced and the objects copied into the vector. The scalar
object variant is suitable for int-like objects, and the vector
elements are returned by value. "
Something in there confuses me. The former/latter type of
descriptions adds an indirection that I always find
distracting.
Here:
"in the latter case the pointers are dereferenced and the objects
copied into the vector."
... is it talking about the latter from the immediately previous sentence ?:
"Both the structure object and pointer variants pass pointers
to objects around"
Seems strange if so.
The 'by value' statement isn't clear to me either:
"object variant is suitable for int-like objects, and the vector
elements are returned by value. "
T *VEC_T_index(VEC(T) *v, unsigned ix); // Object
? What does 'by value' mean then?
How about this, it is right?
"Because of the different behavior of structure objects, scalar
objects and of pointers, there are three flavors, one for each of
these variants. Both the structure object and pointer variants
pass pointers to objects around.
The pointer variant simply stores pointer directly in the vector.
In the structure object variant, the pointers are dereferenced
and the objects copied into the vector. In this variant, the
vector elements are returned by value, making it suitable for
int-like objects. "
I understood it as if they were analogous of:
struct type;
pointer -> std::vector<type*>
object -> std::vector<type>
integral -> std::vector<int>
I guess I'm pretty much confused. :(
Attached is a new patch. Tested that shreloc.exp still passes
all the tests on WinCE, testing from a Cygwin host.
Cheers,
Pedro Alves
[-- Attachment #2: solib-target_CORE_ADDR_cast.diff --]
[-- Type: text/x-diff, Size: 902 bytes --]
2007-07-08 Pedro Alves <pedro_alves@portugalmail.pt>
* solib-target.c (library_list_start_segment): Cast address to CORE_ADDR.
---
gdb/solib-target.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Index: src/gdb/solib-target.c
===================================================================
--- src.orig/gdb/solib-target.c 2007-07-08 02:04:24.000000000 +0100
+++ src/gdb/solib-target.c 2007-07-08 12:19:12.000000000 +0100
@@ -82,8 +82,9 @@ library_list_start_segment (struct gdb_x
VEC(lm_info_p) **list = user_data;
struct lm_info *last = VEC_last (lm_info_p, *list);
ULONGEST *address_p = VEC_index (gdb_xml_value_s, attributes, 0)->value;
+ CORE_ADDR address = (CORE_ADDR) *address_p;
- VEC_safe_push (CORE_ADDR, last->segment_bases, address_p);
+ VEC_safe_push (CORE_ADDR, last->segment_bases, &address);
}
/* Handle the start of a <library> element. */
next prev parent reply other threads:[~2007-07-08 14:46 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-08 1:22 Pedro Alves
2007-07-08 1:27 ` Daniel Jacobowitz
2007-07-08 14:46 ` Pedro Alves [this message]
2007-07-08 17:21 ` Daniel Jacobowitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4690F562.9060009@portugalmail.pt \
--to=pedro_alves@portugalmail.pt \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox