* Signed vs. unsigned adresses in solib-svr4
@ 2007-03-27 19:16 Andreas Schwab
2007-03-27 19:21 ` Daniel Jacobowitz
0 siblings, 1 reply; 11+ messages in thread
From: Andreas Schwab @ 2007-03-27 19:16 UTC (permalink / raw)
To: gdb-patches
All but two places in solib-svr4.c assume unsigned target addresses. This
patch fixes these two occurences of extract_signed_integer to make things
consistent.
Andreas.
2007-03-27 Andreas Schwab <schwab@suse.de>
* solib-svr4.c (LM_ADDR_FROM_LINK_MAP): Use
extract_unsigned_integer instead of extract_signed_integer.
(LM_DYNAMIC_FROM_LINK_MAP): Likewise.
Index: solib-svr4.c
===================================================================
RCS file: /cvs/src/src/gdb/solib-svr4.c,v
retrieving revision 1.61
diff -u -a -p -u -p -a -r1.61 solib-svr4.c
--- solib-svr4.c 9 Jan 2007 17:58:58 -0000 1.61
+++ solib-svr4.c 27 Mar 2007 19:12:52 -0000
@@ -138,9 +138,9 @@ LM_ADDR_FROM_LINK_MAP (struct so_list *s
{
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
- return (CORE_ADDR) extract_signed_integer (so->lm_info->lm
- + lmo->l_addr_offset,
- lmo->l_addr_size);
+ return (CORE_ADDR) extract_unsigned_integer (so->lm_info->lm
+ + lmo->l_addr_offset,
+ lmo->l_addr_size);
}
static int
@@ -158,9 +158,9 @@ LM_DYNAMIC_FROM_LINK_MAP (struct so_list
gdb_assert (lmo->l_ld_size != 0);
- return (CORE_ADDR) extract_signed_integer (so->lm_info->lm
- + lmo->l_ld_offset,
- lmo->l_ld_size);
+ return (CORE_ADDR) extract_unsigned_integer (so->lm_info->lm
+ + lmo->l_ld_offset,
+ lmo->l_ld_size);
}
static CORE_ADDR
--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, MaxfeldstraÃe 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Signed vs. unsigned adresses in solib-svr4
2007-03-27 19:16 Signed vs. unsigned adresses in solib-svr4 Andreas Schwab
@ 2007-03-27 19:21 ` Daniel Jacobowitz
2007-03-27 20:20 ` Andreas Schwab
0 siblings, 1 reply; 11+ messages in thread
From: Daniel Jacobowitz @ 2007-03-27 19:21 UTC (permalink / raw)
To: Andreas Schwab; +Cc: gdb-patches
On Tue, Mar 27, 2007 at 09:16:28PM +0200, Andreas Schwab wrote:
> All but two places in solib-svr4.c assume unsigned target addresses. This
> patch fixes these two occurences of extract_signed_integer to make things
> consistent.
>
> Andreas.
>
> 2007-03-27 Andreas Schwab <schwab@suse.de>
>
> * solib-svr4.c (LM_ADDR_FROM_LINK_MAP): Use
> extract_unsigned_integer instead of extract_signed_integer.
> (LM_DYNAMIC_FROM_LINK_MAP): Likewise.
I'd rather not unless this fixes a real problem - since I know that
the assumption is wrong for MIPS. Isn't there an extract_address or
something like that which would be suitable?
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Signed vs. unsigned adresses in solib-svr4
2007-03-27 19:21 ` Daniel Jacobowitz
@ 2007-03-27 20:20 ` Andreas Schwab
2007-03-27 20:36 ` Daniel Jacobowitz
0 siblings, 1 reply; 11+ messages in thread
From: Andreas Schwab @ 2007-03-27 20:20 UTC (permalink / raw)
To: gdb-patches
Daniel Jacobowitz <drow@false.org> writes:
> On Tue, Mar 27, 2007 at 09:16:28PM +0200, Andreas Schwab wrote:
>> All but two places in solib-svr4.c assume unsigned target addresses. This
>> patch fixes these two occurences of extract_signed_integer to make things
>> consistent.
>>
>> Andreas.
>>
>> 2007-03-27 Andreas Schwab <schwab@suse.de>
>>
>> * solib-svr4.c (LM_ADDR_FROM_LINK_MAP): Use
>> extract_unsigned_integer instead of extract_signed_integer.
>> (LM_DYNAMIC_FROM_LINK_MAP): Likewise.
>
> I'd rather not unless this fixes a real problem
If your CORE_ADDR is 64bit, but the target is 32bit you get an address
that does not exist on the target.
> - since I know that the assumption is wrong for MIPS. Isn't there an
> extract_address or something like that which would be suitable?
There is extract_typed_address, but I don't know how to construct the
struct type that it needs.
Andreas.
--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, MaxfeldstraÃe 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Signed vs. unsigned adresses in solib-svr4
2007-03-27 20:20 ` Andreas Schwab
@ 2007-03-27 20:36 ` Daniel Jacobowitz
2007-03-29 11:38 ` Andreas Schwab
0 siblings, 1 reply; 11+ messages in thread
From: Daniel Jacobowitz @ 2007-03-27 20:36 UTC (permalink / raw)
To: gdb-patches
On Tue, Mar 27, 2007 at 10:20:23PM +0200, Andreas Schwab wrote:
> > - since I know that the assumption is wrong for MIPS. Isn't there an
> > extract_address or something like that which would be suitable?
>
> There is extract_typed_address, but I don't know how to construct the
> struct type that it needs.
Probably builtin_type_void_data_ptr is all you need.
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Signed vs. unsigned adresses in solib-svr4
2007-03-27 20:36 ` Daniel Jacobowitz
@ 2007-03-29 11:38 ` Andreas Schwab
2007-03-29 17:56 ` Daniel Jacobowitz
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Andreas Schwab @ 2007-03-29 11:38 UTC (permalink / raw)
To: gdb-patches
Daniel Jacobowitz <drow@false.org> writes:
> On Tue, Mar 27, 2007 at 10:20:23PM +0200, Andreas Schwab wrote:
>> > - since I know that the assumption is wrong for MIPS. Isn't there an
>> > extract_address or something like that which would be suitable?
>>
>> There is extract_typed_address, but I don't know how to construct the
>> struct type that it needs.
>
> Probably builtin_type_void_data_ptr is all you need.
How about this then? Regtestest on
{i386,ia64,ppc,ppc64,s390,s390x,x86_64}-linux.
Andreas.
2007-03-29 Andreas Schwab <schwab@suse.de>
* solib-svr4.h (struct link_map_offsets): Remove l_addr_size,
l_ld_size, l_next_size, l_prev_size, l_name_size.
* solib-svr4.c (LM_ADDR_FROM_LINK_MAP): Use extract_typed_address
to extract addresses from link map.
(LM_DYNAMIC_FROM_LINK_MAP): Likewise.
(LM_NEXT): Likewise.
(LM_NAME): Likewise.
(IGNORE_FIRST_LINK_MAP_ENTRY): Likewise.
(elf_locate_base): Likewise.
(open_symbol_file_object): Likewise.
(svr4_fetch_objfile_link_map): Likewise.
(SOLIB_EXTRACT_ADDRESS): Remove unused macro.
(HAS_LM_DYNAMIC_FROM_LINK_MAP): Test l_ld_offset instead of
l_ld_size.
(svr4_ilp32_fetch_link_map_offsets): Don't set removed members.
(svr4_lp64_fetch_link_map_offsets): Likewise.
* solib-legacy.c (legacy_svr4_fetch_link_map_offsets): Don't set
removed members. Set l_ld_offset to -1 if not present.
--- gdb/solib-legacy.c.~1.11.~ 2007-01-10 11:18:50.000000000 +0100
+++ gdb/solib-legacy.c 2007-03-29 12:56:05.000000000 +0200
@@ -63,51 +63,28 @@ legacy_svr4_fetch_link_map_offsets (void
lmo.link_map_size = sizeof (struct link_map);
lmo.l_addr_offset = offsetof (struct link_map, l_addr);
- lmo.l_addr_size = fieldsize (struct link_map, l_addr);
-
lmo.l_next_offset = offsetof (struct link_map, l_next);
- lmo.l_next_size = fieldsize (struct link_map, l_next);
-
lmo.l_ld_offset = offsetof (struct link_map, l_ld);
- lmo.l_ld_size = fieldsize (struct link_map, l_ld);
-
lmo.l_prev_offset = offsetof (struct link_map, l_prev);
- lmo.l_prev_size = fieldsize (struct link_map, l_prev);
-
lmo.l_name_offset = offsetof (struct link_map, l_name);
- lmo.l_name_size = fieldsize (struct link_map, l_name);
#else /* !defined(HAVE_STRUCT_LINK_MAP_WITH_L_MEMBERS) */
#ifdef HAVE_STRUCT_LINK_MAP_WITH_LM_MEMBERS
lmo.link_map_size = sizeof (struct link_map);
lmo.l_addr_offset = offsetof (struct link_map, lm_addr);
- lmo.l_addr_size = fieldsize (struct link_map, lm_addr);
-
lmo.l_next_offset = offsetof (struct link_map, lm_next);
- lmo.l_next_size = fieldsize (struct link_map, lm_next);
-
/* FIXME: Is this the right field name, or is it available at all? */
lmo.l_ld_offset = offsetof (struct link_map, lm_ld);
- lmo.l_ld_size = fieldsize (struct link_map, lm_ld);
-
lmo.l_name_offset = offsetof (struct link_map, lm_name);
- lmo.l_name_size = fieldsize (struct link_map, lm_name);
#else /* !defined(HAVE_STRUCT_LINK_MAP_WITH_LM_MEMBERS) */
#if HAVE_STRUCT_SO_MAP_WITH_SOM_MEMBERS
lmo.link_map_size = sizeof (struct so_map);
lmo.l_addr_offset = offsetof (struct so_map, som_addr);
- lmo.l_addr_size = fieldsize (struct so_map, som_addr);
-
lmo.l_next_offset = offsetof (struct so_map, som_next);
- lmo.l_next_size = fieldsize (struct so_map, som_next);
-
lmo.l_name_offset = offsetof (struct so_map, som_path);
- lmo.l_name_size = fieldsize (struct so_map, som_path);
-
/* FIXME: Is the address of the dynamic table available? */
- lmo.l_ld_offset = 0;
- lmo.l_ld_size = 0;
+ lmo.l_ld_offset = -1;
#endif /* HAVE_STRUCT_SO_MAP_WITH_SOM_MEMBERS */
#endif /* HAVE_STRUCT_LINK_MAP_WITH_LM_MEMBERS */
#endif /* HAVE_STRUCT_LINK_MAP_WITH_L_MEMBERS */
@@ -126,16 +103,9 @@ legacy_svr4_fetch_link_map_offsets (void
lmo32.link_map_size = sizeof (struct link_map32);
lmo32.l_addr_offset = offsetof (struct link_map32, l_addr);
- lmo32.l_addr_size = fieldsize (struct link_map32, l_addr);
-
lmo32.l_next_offset = offsetof (struct link_map32, l_next);
- lmo32.l_next_size = fieldsize (struct link_map32, l_next);
-
lmo32.l_prev_offset = offsetof (struct link_map32, l_prev);
- lmo32.l_prev_size = fieldsize (struct link_map32, l_prev);
-
lmo32.l_name_offset = offsetof (struct link_map32, l_name);
- lmo32.l_name_size = fieldsize (struct link_map32, l_name);
}
#endif /* defined (HAVE_STRUCT_LINK_MAP32) */
--- gdb/solib-svr4.c.~1.61.~ 2007-03-27 21:15:04.000000000 +0200
+++ gdb/solib-svr4.c 2007-03-29 12:56:47.000000000 +0200
@@ -118,19 +118,6 @@ static char *main_name_list[] =
NULL
};
-/* Macro to extract an address from a solib structure. When GDB is
- configured for some 32-bit targets (e.g. Solaris 2.7 sparc), BFD is
- configured to handle 64-bit targets, so CORE_ADDR is 64 bits. We
- have to extract only the significant bits of addresses to get the
- right address when accessing the core file BFD.
-
- Assume that the address is unsigned. */
-
-#define SOLIB_EXTRACT_ADDRESS(MEMBER) \
- extract_unsigned_integer (&(MEMBER), sizeof (MEMBER))
-
-/* local data declarations */
-
/* link map access functions */
static CORE_ADDR
@@ -138,9 +125,8 @@ LM_ADDR_FROM_LINK_MAP (struct so_list *s
{
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
- return (CORE_ADDR) extract_signed_integer (so->lm_info->lm
- + lmo->l_addr_offset,
- lmo->l_addr_size);
+ return extract_typed_address (so->lm_info->lm + lmo->l_addr_offset,
+ builtin_type_void_data_ptr);
}
static int
@@ -148,7 +134,7 @@ HAS_LM_DYNAMIC_FROM_LINK_MAP ()
{
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
- return (lmo->l_ld_size != 0);
+ return lmo->l_ld_offset >= 0;
}
static CORE_ADDR
@@ -156,11 +142,8 @@ LM_DYNAMIC_FROM_LINK_MAP (struct so_list
{
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
- gdb_assert (lmo->l_ld_size != 0);
-
- return (CORE_ADDR) extract_signed_integer (so->lm_info->lm
- + lmo->l_ld_offset,
- lmo->l_ld_size);
+ return extract_typed_address (so->lm_info->lm + lmo->l_ld_offset,
+ builtin_type_void_data_ptr);
}
static CORE_ADDR
@@ -238,9 +221,8 @@ LM_NEXT (struct so_list *so)
{
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
- /* Assume that the address is unsigned. */
- return extract_unsigned_integer (so->lm_info->lm + lmo->l_next_offset,
- lmo->l_next_size);
+ return extract_typed_address (so->lm_info->lm + lmo->l_next_offset,
+ builtin_type_void_data_ptr);
}
static CORE_ADDR
@@ -248,9 +230,8 @@ LM_NAME (struct so_list *so)
{
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
- /* Assume that the address is unsigned. */
- return extract_unsigned_integer (so->lm_info->lm + lmo->l_name_offset,
- lmo->l_name_size);
+ return extract_typed_address (so->lm_info->lm + lmo->l_name_offset,
+ builtin_type_void_data_ptr);
}
static int
@@ -258,9 +239,8 @@ IGNORE_FIRST_LINK_MAP_ENTRY (struct so_l
{
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
- /* Assume that the address is unsigned. */
- return extract_unsigned_integer (so->lm_info->lm + lmo->l_prev_offset,
- lmo->l_prev_size) == 0;
+ return extract_typed_address (so->lm_info->lm + lmo->l_prev_offset,
+ builtin_type_void_data_ptr) == 0;
}
static CORE_ADDR debug_base; /* Base of dynamic linker structures */
@@ -446,7 +426,7 @@ elf_locate_base (void)
else if (dyn_tag == DT_MIPS_RLD_MAP)
{
gdb_byte *pbuf;
- int pbuf_size = TARGET_PTR_BIT / HOST_CHAR_BIT;
+ int pbuf_size = TYPE_LENGTH (builtin_type_void_data_ptr);
pbuf = alloca (pbuf_size);
/* DT_MIPS_RLD_MAP contains a pointer to the address
@@ -455,7 +435,7 @@ elf_locate_base (void)
(bfd_byte *) x_dynp->d_un.d_ptr);
if (target_read_memory (dyn_ptr, pbuf, pbuf_size))
return 0;
- return extract_unsigned_integer (pbuf, pbuf_size);
+ return extract_typed_address (pbuf, builtin_type_void_data_ptr);
}
}
}
@@ -481,7 +461,7 @@ elf_locate_base (void)
else if (dyn_tag == DT_MIPS_RLD_MAP)
{
gdb_byte *pbuf;
- int pbuf_size = TARGET_PTR_BIT / HOST_CHAR_BIT;
+ int pbuf_size = TYPE_LENGTH (builtin_type_void_data_ptr);
pbuf = alloca (pbuf_size);
/* DT_MIPS_RLD_MAP contains a pointer to the address
@@ -490,7 +470,7 @@ elf_locate_base (void)
(bfd_byte *) x_dynp->d_un.d_ptr);
if (target_read_memory (dyn_ptr, pbuf, pbuf_size))
return 0;
- return extract_unsigned_integer (pbuf, pbuf_size);
+ return extract_typed_address (pbuf, builtin_type_void_data_ptr);
}
}
}
@@ -620,7 +600,8 @@ open_symbol_file_object (void *from_ttyp
int errcode;
int from_tty = *(int *)from_ttyp;
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
- gdb_byte *l_name_buf = xmalloc (lmo->l_name_size);
+ int l_name_size = TYPE_LENGTH (builtin_type_void_data_ptr);
+ gdb_byte *l_name_buf = xmalloc (l_name_size);
struct cleanup *cleanups = make_cleanup (xfree, l_name_buf);
if (symfile_objfile)
@@ -636,11 +617,10 @@ open_symbol_file_object (void *from_ttyp
return 0; /* failed somehow... */
/* Read address of name from target memory to GDB. */
- read_memory (lm + lmo->l_name_offset, l_name_buf, lmo->l_name_size);
+ read_memory (lm + lmo->l_name_offset, l_name_buf, l_name_size);
- /* Convert the address to host format. Assume that the address is
- unsigned. */
- l_name = extract_unsigned_integer (l_name_buf, lmo->l_name_size);
+ /* Convert the address to host format. */
+ l_name = extract_typed_address (l_name_buf, builtin_type_void_data_ptr);
/* Free l_name_buf. */
do_cleanups (cleanups);
@@ -836,7 +816,8 @@ svr4_fetch_objfile_link_map (struct objf
struct lm_info objfile_lm_info;
struct cleanup *old_chain;
CORE_ADDR name_address;
- gdb_byte *l_name_buf = xmalloc (lmo->l_name_size);
+ int l_name_size = TYPE_LENGTH (builtin_type_void_data_ptr);
+ gdb_byte *l_name_buf = xmalloc (l_name_size);
old_chain = make_cleanup (xfree, l_name_buf);
/* Set up the buffer to contain the portion of the link_map
@@ -849,11 +830,11 @@ svr4_fetch_objfile_link_map (struct objf
read_memory (lm, objfile_lm_info.lm, lmo->link_map_size);
/* Read address of name from target memory to GDB. */
- read_memory (lm + lmo->l_name_offset, l_name_buf, lmo->l_name_size);
+ read_memory (lm + lmo->l_name_offset, l_name_buf, l_name_size);
- /* Extract this object's name. Assume that the address is
- unsigned. */
- name_address = extract_unsigned_integer (l_name_buf, lmo->l_name_size);
+ /* Extract this object's name. */
+ name_address = extract_typed_address (l_name_buf,
+ builtin_type_void_data_ptr);
target_read_string (name_address, &buffer,
SO_NAME_MAX_PATH_SIZE - 1, &errcode);
make_cleanup (xfree, buffer);
@@ -872,10 +853,9 @@ svr4_fetch_objfile_link_map (struct objf
return lm;
}
}
- /* Not the file we wanted, continue checking. Assume that the
- address is unsigned. */
- lm = extract_unsigned_integer (objfile_lm_info.lm + lmo->l_next_offset,
- lmo->l_next_size);
+ /* Not the file we wanted, continue checking. */
+ lm = extract_typed_address (objfile_lm_info.lm + lmo->l_next_offset,
+ builtin_type_void_data_ptr);
do_cleanups (old_chain);
}
return 0;
@@ -1521,15 +1501,10 @@ svr4_ilp32_fetch_link_map_offsets (void)
/* Everything we need is in the first 20 bytes. */
lmo.link_map_size = 20;
lmo.l_addr_offset = 0;
- lmo.l_addr_size = 4;
lmo.l_name_offset = 4;
- lmo.l_name_size = 4;
lmo.l_ld_offset = 8;
- lmo.l_ld_size = 4;
lmo.l_next_offset = 12;
- lmo.l_next_size = 4;
lmo.l_prev_offset = 16;
- lmo.l_prev_size = 4;
}
return lmp;
@@ -1556,15 +1531,10 @@ svr4_lp64_fetch_link_map_offsets (void)
/* Everything we need is in the first 40 bytes. */
lmo.link_map_size = 40;
lmo.l_addr_offset = 0;
- lmo.l_addr_size = 8;
lmo.l_name_offset = 8;
- lmo.l_name_size = 8;
lmo.l_ld_offset = 16;
- lmo.l_ld_size = 8;
lmo.l_next_offset = 24;
- lmo.l_next_size = 8;
lmo.l_prev_offset = 32;
- lmo.l_prev_size = 8;
}
return lmp;
--- gdb/solib-svr4.h.~1.13.~ 2007-01-10 11:18:50.000000000 +0100
+++ gdb/solib-svr4.h 2007-03-29 13:37:05.000000000 +0200
@@ -46,32 +46,17 @@ struct link_map_offsets
/* Offset to l_addr field in struct link_map. */
int l_addr_offset;
- /* Size of l_addr field in struct link_map. */
- int l_addr_size;
-
/* Offset to l_ld field in struct link_map. */
int l_ld_offset;
- /* Size of l_ld field in struct link_map. */
- int l_ld_size;
-
/* Offset to l_next field in struct link_map. */
int l_next_offset;
- /* Size of l_next field in struct link_map. */
- int l_next_size;
-
/* Offset to l_prev field in struct link_map. */
int l_prev_offset;
- /* Size of l_prev field in struct link_map. */
- int l_prev_size;
-
/* Offset to l_name field in struct link_map. */
int l_name_offset;
-
- /* Size of l_name field in struct link_map. */
- int l_name_size;
};
/* set_solib_svr4_fetch_link_map_offsets() is intended to be called by
--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, MaxfeldstraÃe 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Signed vs. unsigned adresses in solib-svr4
2007-03-29 11:38 ` Andreas Schwab
@ 2007-03-29 17:56 ` Daniel Jacobowitz
2007-04-10 6:57 ` Kevin Buettner
2007-03-31 9:10 ` Mark Kettenis
2007-05-09 17:55 ` Ulrich Weigand
2 siblings, 1 reply; 11+ messages in thread
From: Daniel Jacobowitz @ 2007-03-29 17:56 UTC (permalink / raw)
To: gdb-patches; +Cc: Kevin Buettner
On Thu, Mar 29, 2007 at 01:38:36PM +0200, Andreas Schwab wrote:
> Daniel Jacobowitz <drow@false.org> writes:
>
> > On Tue, Mar 27, 2007 at 10:20:23PM +0200, Andreas Schwab wrote:
> >> > - since I know that the assumption is wrong for MIPS. Isn't there an
> >> > extract_address or something like that which would be suitable?
> >>
> >> There is extract_typed_address, but I don't know how to construct the
> >> struct type that it needs.
> >
> > Probably builtin_type_void_data_ptr is all you need.
>
> How about this then? Regtestest on
> {i386,ia64,ppc,ppc64,s390,s390x,x86_64}-linux.
Looks good to me. Kevin, what do you think?
> 2007-03-29 Andreas Schwab <schwab@suse.de>
>
> * solib-svr4.h (struct link_map_offsets): Remove l_addr_size,
> l_ld_size, l_next_size, l_prev_size, l_name_size.
>
> * solib-svr4.c (LM_ADDR_FROM_LINK_MAP): Use extract_typed_address
> to extract addresses from link map.
> (LM_DYNAMIC_FROM_LINK_MAP): Likewise.
> (LM_NEXT): Likewise.
> (LM_NAME): Likewise.
> (IGNORE_FIRST_LINK_MAP_ENTRY): Likewise.
> (elf_locate_base): Likewise.
> (open_symbol_file_object): Likewise.
> (svr4_fetch_objfile_link_map): Likewise.
> (SOLIB_EXTRACT_ADDRESS): Remove unused macro.
> (HAS_LM_DYNAMIC_FROM_LINK_MAP): Test l_ld_offset instead of
> l_ld_size.
> (svr4_ilp32_fetch_link_map_offsets): Don't set removed members.
> (svr4_lp64_fetch_link_map_offsets): Likewise.
>
> * solib-legacy.c (legacy_svr4_fetch_link_map_offsets): Don't set
> removed members. Set l_ld_offset to -1 if not present.
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Signed vs. unsigned adresses in solib-svr4
2007-03-29 11:38 ` Andreas Schwab
2007-03-29 17:56 ` Daniel Jacobowitz
@ 2007-03-31 9:10 ` Mark Kettenis
2007-05-09 17:55 ` Ulrich Weigand
2 siblings, 0 replies; 11+ messages in thread
From: Mark Kettenis @ 2007-03-31 9:10 UTC (permalink / raw)
To: schwab; +Cc: gdb-patches
> From: Andreas Schwab <schwab@suse.de>
> Date: Thu, 29 Mar 2007 13:38:36 +0200
>
> Daniel Jacobowitz <drow@false.org> writes:
>
> > On Tue, Mar 27, 2007 at 10:20:23PM +0200, Andreas Schwab wrote:
> >> > - since I know that the assumption is wrong for MIPS. Isn't there an
> >> > extract_address or something like that which would be suitable?
> >>
> >> There is extract_typed_address, but I don't know how to construct the
> >> struct type that it needs.
> >
> > Probably builtin_type_void_data_ptr is all you need.
>
> How about this then? Regtestest on
> {i386,ia64,ppc,ppc64,s390,s390x,x86_64}-linux.
I like this.
>
> Andreas.
>
> 2007-03-29 Andreas Schwab <schwab@suse.de>
>
> * solib-svr4.h (struct link_map_offsets): Remove l_addr_size,
> l_ld_size, l_next_size, l_prev_size, l_name_size.
>
> * solib-svr4.c (LM_ADDR_FROM_LINK_MAP): Use extract_typed_address
> to extract addresses from link map.
> (LM_DYNAMIC_FROM_LINK_MAP): Likewise.
> (LM_NEXT): Likewise.
> (LM_NAME): Likewise.
> (IGNORE_FIRST_LINK_MAP_ENTRY): Likewise.
> (elf_locate_base): Likewise.
> (open_symbol_file_object): Likewise.
> (svr4_fetch_objfile_link_map): Likewise.
> (SOLIB_EXTRACT_ADDRESS): Remove unused macro.
> (HAS_LM_DYNAMIC_FROM_LINK_MAP): Test l_ld_offset instead of
> l_ld_size.
> (svr4_ilp32_fetch_link_map_offsets): Don't set removed members.
> (svr4_lp64_fetch_link_map_offsets): Likewise.
>
> * solib-legacy.c (legacy_svr4_fetch_link_map_offsets): Don't set
> removed members. Set l_ld_offset to -1 if not present.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Signed vs. unsigned adresses in solib-svr4
2007-03-29 17:56 ` Daniel Jacobowitz
@ 2007-04-10 6:57 ` Kevin Buettner
0 siblings, 0 replies; 11+ messages in thread
From: Kevin Buettner @ 2007-04-10 6:57 UTC (permalink / raw)
To: gdb-patches
On Thu, 29 Mar 2007 13:56:07 -0400
Daniel Jacobowitz <drow@false.org> wrote:
> On Thu, Mar 29, 2007 at 01:38:36PM +0200, Andreas Schwab wrote:
> > Daniel Jacobowitz <drow@false.org> writes:
> >
> > > On Tue, Mar 27, 2007 at 10:20:23PM +0200, Andreas Schwab wrote:
> > >> > - since I know that the assumption is wrong for MIPS. Isn't there an
> > >> > extract_address or something like that which would be suitable?
> > >>
> > >> There is extract_typed_address, but I don't know how to construct the
> > >> struct type that it needs.
> > >
> > > Probably builtin_type_void_data_ptr is all you need.
> >
> > How about this then? Regtestest on
> > {i386,ia64,ppc,ppc64,s390,s390x,x86_64}-linux.
>
> Looks good to me. Kevin, what do you think?
I like it.
Andreas, please commit this patch.
Thanks,
Kevin
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Signed vs. unsigned adresses in solib-svr4
2007-03-29 11:38 ` Andreas Schwab
2007-03-29 17:56 ` Daniel Jacobowitz
2007-03-31 9:10 ` Mark Kettenis
@ 2007-05-09 17:55 ` Ulrich Weigand
2007-05-09 18:38 ` Andreas Schwab
2 siblings, 1 reply; 11+ messages in thread
From: Ulrich Weigand @ 2007-05-09 17:55 UTC (permalink / raw)
To: Andreas Schwab; +Cc: gdb-patches
> 2007-03-29 Andreas Schwab <schwab@suse.de>
>
> * solib-svr4.h (struct link_map_offsets): Remove l_addr_size,
> l_ld_size, l_next_size, l_prev_size, l_name_size.
>
> * solib-svr4.c (LM_ADDR_FROM_LINK_MAP): Use extract_typed_address
> to extract addresses from link map.
> (LM_DYNAMIC_FROM_LINK_MAP): Likewise.
> (LM_NEXT): Likewise.
> (LM_NAME): Likewise.
> (IGNORE_FIRST_LINK_MAP_ENTRY): Likewise.
> (elf_locate_base): Likewise.
> (open_symbol_file_object): Likewise.
> (svr4_fetch_objfile_link_map): Likewise.
> (SOLIB_EXTRACT_ADDRESS): Remove unused macro.
> (HAS_LM_DYNAMIC_FROM_LINK_MAP): Test l_ld_offset instead of
> l_ld_size.
> (svr4_ilp32_fetch_link_map_offsets): Don't set removed members.
> (svr4_lp64_fetch_link_map_offsets): Likewise.
>
> * solib-legacy.c (legacy_svr4_fetch_link_map_offsets): Don't set
> removed members. Set l_ld_offset to -1 if not present.
Looks like this patch broke building mipsnbsd-tdep.c
(mipsnbsd_ilp32_fetch_link_map_offsets,
mipsnbsd_lp64_fetch_link_map_offsets).
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Signed vs. unsigned adresses in solib-svr4
2007-05-09 17:55 ` Ulrich Weigand
@ 2007-05-09 18:38 ` Andreas Schwab
2007-05-09 19:46 ` Ulrich Weigand
0 siblings, 1 reply; 11+ messages in thread
From: Andreas Schwab @ 2007-05-09 18:38 UTC (permalink / raw)
To: Ulrich Weigand; +Cc: gdb-patches
"Ulrich Weigand" <uweigand@de.ibm.com> writes:
> Looks like this patch broke building mipsnbsd-tdep.c
> (mipsnbsd_ilp32_fetch_link_map_offsets,
> mipsnbsd_lp64_fetch_link_map_offsets).
Thanks, I have checked this in as obvious.
Andreas.
2007-05-09 Andreas Schwab <schwab@suse.de>
* mipsnbsd-tdep.c (mipsnbsd_ilp32_fetch_link_map_offsets): Don't
set removed members.
(mipsnbsd_lp64_fetch_link_map_offsets): Likewise.
--- mipsnbsd-tdep.c 6 May 2007 14:29:15 -0000 1.24
+++ mipsnbsd-tdep.c 9 May 2007 18:22:18 -0000
@@ -336,15 +336,10 @@ mipsnbsd_ilp32_fetch_link_map_offsets (v
/* Everything we need is in the first 24 bytes. */
lmo.link_map_size = 24;
lmo.l_addr_offset = 4;
- lmo.l_addr_size = 4;
lmo.l_name_offset = 8;
- lmo.l_name_size = 4;
lmo.l_ld_offset = 12;
- lmo.l_ld_size = 4;
lmo.l_next_offset = 16;
- lmo.l_next_size = 4;
lmo.l_prev_offset = 20;
- lmo.l_prev_size = 4;
}
return lmp;
@@ -368,15 +363,10 @@ mipsnbsd_lp64_fetch_link_map_offsets (vo
/* Everything we need is in the first 40 bytes. */
lmo.link_map_size = 48;
lmo.l_addr_offset = 0;
- lmo.l_addr_size = 8;
lmo.l_name_offset = 16;
- lmo.l_name_size = 8;
lmo.l_ld_offset = 24;
- lmo.l_ld_size = 8;
lmo.l_next_offset = 32;
- lmo.l_next_size = 8;
lmo.l_prev_offset = 40;
- lmo.l_prev_size = 8;
}
return lmp;
--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, MaxfeldstraÃe 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Signed vs. unsigned adresses in solib-svr4
2007-05-09 18:38 ` Andreas Schwab
@ 2007-05-09 19:46 ` Ulrich Weigand
0 siblings, 0 replies; 11+ messages in thread
From: Ulrich Weigand @ 2007-05-09 19:46 UTC (permalink / raw)
To: Andreas Schwab; +Cc: gdb-patches
Andreas Schwab wrote:
> * mipsnbsd-tdep.c (mipsnbsd_ilp32_fetch_link_map_offsets): Don't
> set removed members.
> (mipsnbsd_lp64_fetch_link_map_offsets): Likewise.
Thanks!
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2007-05-09 19:46 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-03-27 19:16 Signed vs. unsigned adresses in solib-svr4 Andreas Schwab
2007-03-27 19:21 ` Daniel Jacobowitz
2007-03-27 20:20 ` Andreas Schwab
2007-03-27 20:36 ` Daniel Jacobowitz
2007-03-29 11:38 ` Andreas Schwab
2007-03-29 17:56 ` Daniel Jacobowitz
2007-04-10 6:57 ` Kevin Buettner
2007-03-31 9:10 ` Mark Kettenis
2007-05-09 17:55 ` Ulrich Weigand
2007-05-09 18:38 ` Andreas Schwab
2007-05-09 19:46 ` Ulrich Weigand
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox