* [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
@ 2013-05-28 18:31 Ben Cheng
2013-05-29 10:17 ` Gary Benson
` (2 more replies)
0 siblings, 3 replies; 14+ messages in thread
From: Ben Cheng @ 2013-05-28 18:31 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 644 bytes --]
The first entry in the xml list returned by
svr4_current_sos_via_xfer_libraries() is the executable itself. For
dynamically linked programs, the existing code that deals with
gdbserver that doesn't support svr4_current_sos_via_xfer_libraries is
ignoring the first entry. This patch applies the same logic on the
result returned by svr4_current_sos_via_xfer_libraries().
See GDB PR/15507 for more details.
--
2013-05-28 Ben Cheng <bccheng@android.com>
PR gdb/15507:
* solib-svr4.c (svr4_current_sos): Ignore the first library list
entry returned by svr4_current_sos_via_xfer_libraries call for
dynamically linked programs.
[-- Attachment #2: diff.txt --]
[-- Type: text/plain, Size: 656 bytes --]
Index: solib-svr4.c
===================================================================
RCS file: /cvs/src/src/gdb/solib-svr4.c,v
retrieving revision 1.178
diff -r1.178 solib-svr4.c
1285c1285,1291
< return library_list.head ? library_list.head : svr4_default_sos ();
---
> /* Use the same logic that determines the 'ignore_first' variable
> below. PR - 15507 */
> if (exec_bfd && bfd_get_section_by_name (exec_bfd, ".dynamic") == NULL)
> return library_list.head ? library_list.head : svr4_default_sos ();
> else
> return library_list.head && library_list.head->next ?
> library_list.head->next : svr4_default_sos ();
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
2013-05-28 18:31 [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs Ben Cheng
@ 2013-05-29 10:17 ` Gary Benson
2013-06-04 8:58 ` Jan Kratochvil
2013-06-04 18:07 ` Jan Kratochvil
2 siblings, 0 replies; 14+ messages in thread
From: Gary Benson @ 2013-05-29 10:17 UTC (permalink / raw)
To: Ben Cheng; +Cc: gdb-patches
Ben Cheng wrote:
> The first entry in the xml list returned by
> svr4_current_sos_via_xfer_libraries() is the executable itself. For
> dynamically linked programs, the existing code that deals with
> gdbserver that doesn't support svr4_current_sos_via_xfer_libraries
> is ignoring the first entry. This patch applies the same logic on
> the result returned by svr4_current_sos_via_xfer_libraries().
>
> See GDB PR/15507 for more details.
>
> --
>
> 2013-05-28 Ben Cheng <bccheng@android.com>
>
> PR gdb/15507:
> * solib-svr4.c (svr4_current_sos): Ignore the first library list
> entry returned by svr4_current_sos_via_xfer_libraries call for
> dynamically linked programs.
>
> Index: solib-svr4.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/solib-svr4.c,v
> retrieving revision 1.178
> diff -r1.178 solib-svr4.c
> 1285c1285,1291
> < return library_list.head ? library_list.head : svr4_default_sos ();
> ---
> > /* Use the same logic that determines the 'ignore_first' variable
> > below. PR - 15507 */
> > if (exec_bfd && bfd_get_section_by_name (exec_bfd, ".dynamic") == NULL)
> > return library_list.head ? library_list.head : svr4_default_sos ();
> > else
> > return library_list.head && library_list.head->next ?
> > library_list.head->next : svr4_default_sos ();
This seems reasonable to me, though in future please use "diff -u" to
generate patches.
Thanks,
Gary
--
http://gbenson.net/
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
2013-05-28 18:31 [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs Ben Cheng
2013-05-29 10:17 ` Gary Benson
@ 2013-06-04 8:58 ` Jan Kratochvil
2013-06-04 17:19 ` Ben Cheng
2013-06-04 18:07 ` Jan Kratochvil
2 siblings, 1 reply; 14+ messages in thread
From: Jan Kratochvil @ 2013-06-04 8:58 UTC (permalink / raw)
To: Ben Cheng; +Cc: gdb-patches
Hello Ben,
the patch looks fine but I do not see GDB copyright assignment either yours or
a Google global one. Hopefully this patch is small enough to need one.
I will check it in reformatted after possibly copyright assignment reply.
On Tue, 28 May 2013 20:31:31 +0200, Ben Cheng wrote:
> < return library_list.head ? library_list.head : svr4_default_sos ();
> ---
> > /* Use the same logic that determines the 'ignore_first' variable
> > below. PR - 15507 */
There should be two spaces between . and */ so that PR could be for example in
parentheses.
> > if (exec_bfd && bfd_get_section_by_name (exec_bfd, ".dynamic") == NULL)
> > return library_list.head ? library_list.head : svr4_default_sos ();
> > else
> > return library_list.head && library_list.head->next ?
> > library_list.head->next : svr4_default_sos ();
http://www.gnu.org/prep/standards/standards.html formatting says:
return (library_list.head && library_list.head->next
? library_list.head->next : svr4_default_sos ());
Thanks,
Jan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
2013-06-04 8:58 ` Jan Kratochvil
@ 2013-06-04 17:19 ` Ben Cheng
0 siblings, 0 replies; 14+ messages in thread
From: Ben Cheng @ 2013-06-04 17:19 UTC (permalink / raw)
To: Jan Kratochvil; +Cc: gdb-patches
Hi Jan,
Hope the copyright assignment issue has been taken care now. And
thanks for taking care of the formatting changes.
Thanks,
-Ben
On Tue, Jun 4, 2013 at 1:58 AM, Jan Kratochvil
<jan.kratochvil@redhat.com> wrote:
> Hello Ben,
>
> the patch looks fine but I do not see GDB copyright assignment either yours or
> a Google global one. Hopefully this patch is small enough to need one.
>
> I will check it in reformatted after possibly copyright assignment reply.
>
>
> On Tue, 28 May 2013 20:31:31 +0200, Ben Cheng wrote:
>> < return library_list.head ? library_list.head : svr4_default_sos ();
>> ---
>> > /* Use the same logic that determines the 'ignore_first' variable
>> > below. PR - 15507 */
>
> There should be two spaces between . and */ so that PR could be for example in
> parentheses.
>
>
>> > if (exec_bfd && bfd_get_section_by_name (exec_bfd, ".dynamic") == NULL)
>> > return library_list.head ? library_list.head : svr4_default_sos ();
>> > else
>> > return library_list.head && library_list.head->next ?
>> > library_list.head->next : svr4_default_sos ();
>
> http://www.gnu.org/prep/standards/standards.html formatting says:
> return (library_list.head && library_list.head->next
> ? library_list.head->next : svr4_default_sos ());
>
>
> Thanks,
> Jan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
2013-05-28 18:31 [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs Ben Cheng
2013-05-29 10:17 ` Gary Benson
2013-06-04 8:58 ` Jan Kratochvil
@ 2013-06-04 18:07 ` Jan Kratochvil
2013-06-04 18:18 ` Ben Cheng
2 siblings, 1 reply; 14+ messages in thread
From: Jan Kratochvil @ 2013-06-04 18:07 UTC (permalink / raw)
To: Ben Cheng; +Cc: gdb-patches
Hi Ben,
On Tue, 28 May 2013 20:31:31 +0200, Ben Cheng wrote:
> The first entry in the xml list returned by
> svr4_current_sos_via_xfer_libraries() is the executable itself.
[...]
http://sourceware.org/bugzilla/show_bug.cgi?id=15507
> Currently Android is using gdbserver from 7.1 and gdb from 7.3.
[...]
> <library-list-svr4 version="1.0"><library name="<test_program>"
> lm="0xb6fed108" l_addr="0x0" l_ld="0x0"/><library name="/system/bin/linker"
in fact this GDB patch should be dropped.
Bug is in the Android gdbsever implementation. FSF gdbserver 7.1 did not
support <library-list-svr4/> at all, this feature is in gdbserver 7.4+ only.
Main executable should not have an entry, it has only "main-lm" attribute:
info '(gdb)Library List Format for SVR4 Targets'
Additionally the single `main-lm' attribute specifies address of
`struct link_map' used for the main executable.
GNU/Linux FSF gdbserver-HEAD list looks like:
Sending packet: $qXfer:libraries-svr4:read::0,fff#91...Packet received: l<library-list-svr4 version="1.0" main-lm="0x7ffff7ffe208"><library name="/home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.base/gcore-relro-lib.so" lm="0x7ffff7ff97f0" l_addr="0x7ffff7bda000" l_ld="0x7ffff7ddadf8"/><library name="/lib64/libm.so.6" lm="0x7ffff7fe8000" l_addr="0x7ffff78d8000" l_ld="0x7ffff7bd8da8"/><library name="/lib64/libc.so.6" lm="0x7ffff7fe84c8" l_addr="0x7ffff7518000" l_ld="0x7ffff78d0b80"/><library name="/lib64/ld-linux-x86-64.so.2" lm="0x7ffff7ffd998" l_addr="0x7ffff7ddc000" l_ld="0x7ffff7ffcdf0"/></library-list-svr4>^M
Regards,
Jan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
2013-06-04 18:07 ` Jan Kratochvil
@ 2013-06-04 18:18 ` Ben Cheng
2013-06-04 20:23 ` Jan Kratochvil
0 siblings, 1 reply; 14+ messages in thread
From: Ben Cheng @ 2013-06-04 18:18 UTC (permalink / raw)
To: Jan Kratochvil; +Cc: gdb-patches
Hmm this problem only shows up after I refresh gdbserver from the
unmodified gdb 7.6 tree. As you mentioned, gdb 7.1 did not support
library-list-svr4, so when I paired gdbserver 7.1 with gdb 7.6 they
also work fine.
On Tue, Jun 4, 2013 at 11:07 AM, Jan Kratochvil
<jan.kratochvil@redhat.com> wrote:
> Hi Ben,
>
> On Tue, 28 May 2013 20:31:31 +0200, Ben Cheng wrote:
>> The first entry in the xml list returned by
>> svr4_current_sos_via_xfer_libraries() is the executable itself.
> [...]
> http://sourceware.org/bugzilla/show_bug.cgi?id=15507
>> Currently Android is using gdbserver from 7.1 and gdb from 7.3.
> [...]
>> <library-list-svr4 version="1.0"><library name="<test_program>"
>> lm="0xb6fed108" l_addr="0x0" l_ld="0x0"/><library name="/system/bin/linker"
>
> in fact this GDB patch should be dropped.
>
> Bug is in the Android gdbsever implementation. FSF gdbserver 7.1 did not
> support <library-list-svr4/> at all, this feature is in gdbserver 7.4+ only.
>
> Main executable should not have an entry, it has only "main-lm" attribute:
> info '(gdb)Library List Format for SVR4 Targets'
> Additionally the single `main-lm' attribute specifies address of
> `struct link_map' used for the main executable.
>
> GNU/Linux FSF gdbserver-HEAD list looks like:
>
> Sending packet: $qXfer:libraries-svr4:read::0,fff#91...Packet received: l<library-list-svr4 version="1.0" main-lm="0x7ffff7ffe208"><library name="/home/jkratoch/redhat/gdb-clean/gdb/testsuite/gdb.base/gcore-relro-lib.so" lm="0x7ffff7ff97f0" l_addr="0x7ffff7bda000" l_ld="0x7ffff7ddadf8"/><library name="/lib64/libm.so.6" lm="0x7ffff7fe8000" l_addr="0x7ffff78d8000" l_ld="0x7ffff7bd8da8"/><library name="/lib64/libc.so.6" lm="0x7ffff7fe84c8" l_addr="0x7ffff7518000" l_ld="0x7ffff78d0b80"/><library name="/lib64/ld-linux-x86-64.so.2" lm="0x7ffff7ffd998" l_addr="0x7ffff7ddc000" l_ld="0x7ffff7ffcdf0"/></library-list-svr4>^M
>
>
> Regards,
> Jan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
2013-06-04 18:18 ` Ben Cheng
@ 2013-06-04 20:23 ` Jan Kratochvil
2013-06-04 20:36 ` Ben Cheng
0 siblings, 1 reply; 14+ messages in thread
From: Jan Kratochvil @ 2013-06-04 20:23 UTC (permalink / raw)
To: Ben Cheng; +Cc: gdb-patches
On Tue, 04 Jun 2013 20:18:10 +0200, Ben Cheng wrote:
> Hmm this problem only shows up after I refresh gdbserver from the
> unmodified gdb 7.6 tree. As you mentioned, gdb 7.1 did not support
> library-list-svr4, so when I paired gdbserver 7.1 with gdb 7.6 they
> also work fine.
In such case there is a bug in FSF gdbserver as it ignores only entries with
name "". Normal glibc uses name "" for the first entry for the executable but
Android Bionic apparently uses "<test_program>" as the first entry instead.
The bug is in gdbserver/linux-low.c linux_qxfer_libraries_svr4() which should
always ignore the first entry, even if it is not "".
The test IGNORE_FIRST does not need to be done there. The check
/* Assume that everything is a library if the dynamic loader was loaded
late by a static executable. */
if (exec_bfd && bfd_get_section_by_name (exec_bfd, ".dynamic") == NULL)
is in fact already done by gdbserver/linux-low.c get_dynamic(): If PT_DYNAMIC
(".dynamic") is not found gdbserver will never send <library-list-svr4/> and
solib-svr4.c falls back to the memory reads where it copes with static
executables fine.
Thanks,
Jan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
2013-06-04 20:23 ` Jan Kratochvil
@ 2013-06-04 20:36 ` Ben Cheng
2013-06-04 20:45 ` Ben Cheng
0 siblings, 1 reply; 14+ messages in thread
From: Ben Cheng @ 2013-06-04 20:36 UTC (permalink / raw)
To: Jan Kratochvil; +Cc: gdb-patches
Perfect timing. :) I was playing with Android's dynamic linker and
fount out that after setting the l_name field to NULL for the first
entry gdb/gdbserver 7.6 start to work on Android.
diff --git a/linker/linker.cpp b/linker/linker.cpp
index c97b712..ddc16d8 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -1644,7 +1644,8 @@ static Elf32_Addr __linker_init_post_relocation(KernelArgu
link_map_t* map = &(si->link_map);
map->l_addr = 0;
- map->l_name = args.argv[0];
+ //map->l_name = args.argv[0];
+ map->l_name = NULL;
map->l_prev = NULL;
map->l_next = NULL;
Thanks,
-Ben
On Tue, Jun 4, 2013 at 1:23 PM, Jan Kratochvil
<jan.kratochvil@redhat.com> wrote:
> On Tue, 04 Jun 2013 20:18:10 +0200, Ben Cheng wrote:
>> Hmm this problem only shows up after I refresh gdbserver from the
>> unmodified gdb 7.6 tree. As you mentioned, gdb 7.1 did not support
>> library-list-svr4, so when I paired gdbserver 7.1 with gdb 7.6 they
>> also work fine.
>
> In such case there is a bug in FSF gdbserver as it ignores only entries with
> name "". Normal glibc uses name "" for the first entry for the executable but
> Android Bionic apparently uses "<test_program>" as the first entry instead.
>
> The bug is in gdbserver/linux-low.c linux_qxfer_libraries_svr4() which should
> always ignore the first entry, even if it is not "".
>
> The test IGNORE_FIRST does not need to be done there. The check
> /* Assume that everything is a library if the dynamic loader was loaded
> late by a static executable. */
> if (exec_bfd && bfd_get_section_by_name (exec_bfd, ".dynamic") == NULL)
>
> is in fact already done by gdbserver/linux-low.c get_dynamic(): If PT_DYNAMIC
> (".dynamic") is not found gdbserver will never send <library-list-svr4/> and
> solib-svr4.c falls back to the memory reads where it copes with static
> executables fine.
>
>
> Thanks,
> Jan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
2013-06-04 20:36 ` Ben Cheng
@ 2013-06-04 20:45 ` Ben Cheng
2013-06-04 20:57 ` Jan Kratochvil
0 siblings, 1 reply; 14+ messages in thread
From: Ben Cheng @ 2013-06-04 20:45 UTC (permalink / raw)
To: Jan Kratochvil; +Cc: gdb-patches
And it looks like reversing the order of checks for lm_prev and
libname in gdbserver/linux_qxfer_libraries_svr4:linux_qxfer_libraries_svr4()
is a possible fix for this problem.
On Tue, Jun 4, 2013 at 1:36 PM, Ben Cheng <bccheng@google.com> wrote:
> Perfect timing. :) I was playing with Android's dynamic linker and
> fount out that after setting the l_name field to NULL for the first
> entry gdb/gdbserver 7.6 start to work on Android.
>
> diff --git a/linker/linker.cpp b/linker/linker.cpp
> index c97b712..ddc16d8 100644
> --- a/linker/linker.cpp
> +++ b/linker/linker.cpp
> @@ -1644,7 +1644,8 @@ static Elf32_Addr __linker_init_post_relocation(KernelArgu
> link_map_t* map = &(si->link_map);
>
> map->l_addr = 0;
> - map->l_name = args.argv[0];
> + //map->l_name = args.argv[0];
> + map->l_name = NULL;
> map->l_prev = NULL;
> map->l_next = NULL;
>
> Thanks,
> -Ben
>
> On Tue, Jun 4, 2013 at 1:23 PM, Jan Kratochvil
> <jan.kratochvil@redhat.com> wrote:
>> On Tue, 04 Jun 2013 20:18:10 +0200, Ben Cheng wrote:
>>> Hmm this problem only shows up after I refresh gdbserver from the
>>> unmodified gdb 7.6 tree. As you mentioned, gdb 7.1 did not support
>>> library-list-svr4, so when I paired gdbserver 7.1 with gdb 7.6 they
>>> also work fine.
>>
>> In such case there is a bug in FSF gdbserver as it ignores only entries with
>> name "". Normal glibc uses name "" for the first entry for the executable but
>> Android Bionic apparently uses "<test_program>" as the first entry instead.
>>
>> The bug is in gdbserver/linux-low.c linux_qxfer_libraries_svr4() which should
>> always ignore the first entry, even if it is not "".
>>
>> The test IGNORE_FIRST does not need to be done there. The check
>> /* Assume that everything is a library if the dynamic loader was loaded
>> late by a static executable. */
>> if (exec_bfd && bfd_get_section_by_name (exec_bfd, ".dynamic") == NULL)
>>
>> is in fact already done by gdbserver/linux-low.c get_dynamic(): If PT_DYNAMIC
>> (".dynamic") is not found gdbserver will never send <library-list-svr4/> and
>> solib-svr4.c falls back to the memory reads where it copes with static
>> executables fine.
>>
>>
>> Thanks,
>> Jan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
2013-06-04 20:45 ` Ben Cheng
@ 2013-06-04 20:57 ` Jan Kratochvil
2013-06-04 21:21 ` Ben Cheng
0 siblings, 1 reply; 14+ messages in thread
From: Jan Kratochvil @ 2013-06-04 20:57 UTC (permalink / raw)
To: Ben Cheng; +Cc: gdb-patches
On Tue, 04 Jun 2013 22:45:22 +0200, Ben Cheng wrote:
> And it looks like reversing the order of checks for lm_prev and
> libname in gdbserver/linux_qxfer_libraries_svr4:linux_qxfer_libraries_svr4()
> is a possible fix for this problem.
I agree.
Jan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
2013-06-04 20:57 ` Jan Kratochvil
@ 2013-06-04 21:21 ` Ben Cheng
2013-06-05 11:38 ` [patchv2] " Jan Kratochvil
0 siblings, 1 reply; 14+ messages in thread
From: Ben Cheng @ 2013-06-04 21:21 UTC (permalink / raw)
To: Jan Kratochvil; +Cc: gdb-patches
Hi Jan,
If you don't mind I'll let you take care of it. :)
Thanks,
-Ben
On Tue, Jun 4, 2013 at 1:57 PM, Jan Kratochvil
<jan.kratochvil@redhat.com> wrote:
> On Tue, 04 Jun 2013 22:45:22 +0200, Ben Cheng wrote:
>> And it looks like reversing the order of checks for lm_prev and
>> libname in gdbserver/linux_qxfer_libraries_svr4:linux_qxfer_libraries_svr4()
>> is a possible fix for this problem.
>
> I agree.
>
>
> Jan
^ permalink raw reply [flat|nested] 14+ messages in thread
* [patchv2] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
2013-06-04 21:21 ` Ben Cheng
@ 2013-06-05 11:38 ` Jan Kratochvil
[not found] ` <51AF4C5B.5080104@redhat.com>
0 siblings, 1 reply; 14+ messages in thread
From: Jan Kratochvil @ 2013-06-05 11:38 UTC (permalink / raw)
To: Ben Cheng; +Cc: gdb-patches
On Tue, 04 Jun 2013 23:21:36 +0200, Ben Cheng wrote:
> If you don't mind I'll let you take care of it. :)
I will check it in in some time.
Regards,
Jan
gdb/gdbserver/
2013-06-05 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix compatibility with Android Bionic.
* linux-low.c (linux_qxfer_libraries_svr4): Ignore first entry even if
it is not empty.
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index 03ac469..0f3e0f0 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -5829,45 +5829,54 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
break;
}
- /* Not checking for error because reading may stop before
- we've got PATH_MAX worth of characters. */
- libname[0] = '\0';
- linux_read_memory (l_name, libname, sizeof (libname) - 1);
- libname[sizeof (libname) - 1] = '\0';
- if (libname[0] != '\0')
+ /* Ignore the first entry even if it has valid name as the first entry
+ corresponds to the main executable. The first entry should not be
+ skipped if the dynamic loader was loaded late by a static executable
+ (see solib-svr4.c parameter ignore_first). But in such case the main
+ executable does not have PT_DYNAMIC present and this function already
+ exited above due to failed get_r_debug. */
+ if (lm_prev == 0)
{
- /* 6x the size for xml_escape_text below. */
- size_t len = 6 * strlen ((char *) libname);
- char *name;
-
- if (!header_done)
+ sprintf (p, " main-lm=\"0x%lx\"", (unsigned long) lm_addr);
+ p = p + strlen (p);
+ }
+ else
+ {
+ /* Not checking for error because reading may stop before
+ we've got PATH_MAX worth of characters. */
+ libname[0] = '\0';
+ linux_read_memory (l_name, libname, sizeof (libname) - 1);
+ libname[sizeof (libname) - 1] = '\0';
+ if (libname[0] != '\0')
{
- /* Terminate `<library-list-svr4'. */
- *p++ = '>';
- header_done = 1;
- }
+ /* 6x the size for xml_escape_text below. */
+ size_t len = 6 * strlen ((char *) libname);
+ char *name;
- while (allocated < p - document + len + 200)
- {
- /* Expand to guarantee sufficient storage. */
- uintptr_t document_len = p - document;
+ if (!header_done)
+ {
+ /* Terminate `<library-list-svr4'. */
+ *p++ = '>';
+ header_done = 1;
+ }
- document = xrealloc (document, 2 * allocated);
- allocated *= 2;
- p = document + document_len;
- }
+ while (allocated < p - document + len + 200)
+ {
+ /* Expand to guarantee sufficient storage. */
+ uintptr_t document_len = p - document;
- name = xml_escape_text ((char *) libname);
- p += sprintf (p, "<library name=\"%s\" lm=\"0x%lx\" "
- "l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>",
- name, (unsigned long) lm_addr,
- (unsigned long) l_addr, (unsigned long) l_ld);
- free (name);
- }
- else if (lm_prev == 0)
- {
- sprintf (p, " main-lm=\"0x%lx\"", (unsigned long) lm_addr);
- p = p + strlen (p);
+ document = xrealloc (document, 2 * allocated);
+ allocated *= 2;
+ p = document + document_len;
+ }
+
+ name = xml_escape_text ((char *) libname);
+ p += sprintf (p, "<library name=\"%s\" lm=\"0x%lx\" "
+ "l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>",
+ name, (unsigned long) lm_addr,
+ (unsigned long) l_addr, (unsigned long) l_ld);
+ free (name);
+ }
}
lm_prev = lm_addr;
^ permalink raw reply [flat|nested] 14+ messages in thread
* [commit] [patchv2] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
[not found] ` <51AF4C5B.5080104@redhat.com>
@ 2013-06-09 18:08 ` Jan Kratochvil
2013-06-11 6:32 ` Ben Cheng
0 siblings, 1 reply; 14+ messages in thread
From: Jan Kratochvil @ 2013-06-09 18:08 UTC (permalink / raw)
To: Pedro Alves; +Cc: Ben Cheng, gdb-patches
On Wed, 05 Jun 2013 16:34:03 +0200, Pedro Alves wrote:
> On 06/05/2013 12:38 PM, Jan Kratochvil wrote:
> > Fix compatibility with Android Bionic.
> > * linux-low.c (linux_qxfer_libraries_svr4): Ignore first entry even if
> > it is not empty.
>
> Looks right to me.
Checked in:
http://sourceware.org/ml/gdb-cvs/2013-06/msg00065.html
Thanks,
Jan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [commit] [patchv2] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs
2013-06-09 18:08 ` [commit] " Jan Kratochvil
@ 2013-06-11 6:32 ` Ben Cheng
0 siblings, 0 replies; 14+ messages in thread
From: Ben Cheng @ 2013-06-11 6:32 UTC (permalink / raw)
To: Jan Kratochvil; +Cc: Pedro Alves, gdb-patches
Awesome thanks!
On Sun, Jun 9, 2013 at 10:09 AM, Jan Kratochvil
<jan.kratochvil@redhat.com> wrote:
> On Wed, 05 Jun 2013 16:34:03 +0200, Pedro Alves wrote:
>> On 06/05/2013 12:38 PM, Jan Kratochvil wrote:
>> > Fix compatibility with Android Bionic.
>> > * linux-low.c (linux_qxfer_libraries_svr4): Ignore first entry even if
>> > it is not empty.
>>
>> Looks right to me.
>
> Checked in:
> http://sourceware.org/ml/gdb-cvs/2013-06/msg00065.html
>
>
> Thanks,
> Jan
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2013-06-10 19:34 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-28 18:31 [PATCH] Ignore the first entry returned by svr4_current_sos_via_xfer_libraries for dynamically linked programs Ben Cheng
2013-05-29 10:17 ` Gary Benson
2013-06-04 8:58 ` Jan Kratochvil
2013-06-04 17:19 ` Ben Cheng
2013-06-04 18:07 ` Jan Kratochvil
2013-06-04 18:18 ` Ben Cheng
2013-06-04 20:23 ` Jan Kratochvil
2013-06-04 20:36 ` Ben Cheng
2013-06-04 20:45 ` Ben Cheng
2013-06-04 20:57 ` Jan Kratochvil
2013-06-04 21:21 ` Ben Cheng
2013-06-05 11:38 ` [patchv2] " Jan Kratochvil
[not found] ` <51AF4C5B.5080104@redhat.com>
2013-06-09 18:08 ` [commit] " Jan Kratochvil
2013-06-11 6:32 ` Ben Cheng
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox