* set sysroot command on AIX has no effect.
@ 2016-09-13 9:05 Sangamesh Mallayya
2016-09-29 15:33 ` Ulrich Weigand
0 siblings, 1 reply; 16+ messages in thread
From: Sangamesh Mallayya @ 2016-09-13 9:05 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 4153 bytes --]
set sysroot command on AIX has no effect if a program depends on shared
library archives (.a).
This is the original behaviour if we use "set sysroot" command.
(gdb) set sysroot /tmp
warning: while parsing aix library list: no element found
(gdb) file /home/sysroot/testApp
Reading symbols from /home/sysroot/testApp...done.
(gdb) core-file /home/sysroot/core
warning: core file may not match specified executable file.
warning: Unexpected size of section `.reg' in core file.
warning: Could not open `/home/sysroot/libTest.a' as an executable file: A
file or directory in the path name does not exist.
warning: Could not load shared library symbols for
/home/sysroot/libTest.a(func.o).
Do you need "set solib-search-path" or "set sysroot"?
Program terminated with signal SIGABRT, Aborted.
warning: Unexpected size of section `.reg' in core file.
#0 0xd013a820 in raise () from /usr/lib/libc.a(shr.o)
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0xd04da240 0xd04daa3e Yes (*) /usr/lib/libcrypt.a(shr.o)
No /home/sysroot/libTest.a(func.o)
0xd010c880 0xd049b13d Yes (*) /usr/lib/libc.a(shr.o)
(*): Shared library is missing debugging information.
(gdb) bt
#0 0xd013a820 in raise () from /usr/lib/libc.a(shr.o)
#1 0xd01b3088 in abort () from /usr/lib/libc.a(shr.o)
#2 0xd2fd82a4 in ?? ()
#3 0x100003a4 in main () at main.c:8
(gdb)
After applying the attached patch.
Patch doesn't cause any change in original behaviour while handling shared
library with .so names.
".a" name archives case.
(gdb) set sysroot /tmp
warning: while parsing aix library list: no element found
(gdb) file /home/sysroot/testApp
Reading symbols from /home/sysroot/testApp...done.
(gdb) core-file /home/sysroot/core
warning: core file may not match specified executable file.
warning: Unexpected size of section `.reg' in core file.
Program terminated with signal SIGABRT, Aborted.
warning: Unexpected size of section `.reg' in core file.
#0 0xd013a820 in raise () from /tmp/usr/lib/libc.a(shr.o)
(gdb) inf sharedlibrary
From To Syms Read Shared Object Library
0xd04da240 0xd04daa3e Yes (*) /tmp/usr/lib/libcrypt.a(shr.o)
0xd2fd6250 0xd2fd64aa Yes /tmp/home/sysroot/libTest.a(func.o)
0xd010c880 0xd049b13d Yes (*) /tmp/usr/lib/libc.a(shr.o)
(*): Shared library is missing debugging information.
(gdb) bt
#0 0xd013a820 in raise () from /tmp/usr/lib/libc.a(shr.o)
#1 0xd01b3088 in abort () from /tmp/usr/lib/libc.a(shr.o)
#2 0xd2fd6364 in func () from /tmp/home/sysroot/libTest.a(func.o)
#3 0x100003a4 in main () at main.c:8
(gdb)
.a & .so library names
(gdb) set sysroot /tmp
warning: while parsing aix library list: no element found
(gdb) file /home/sysroot/testApp
Reading symbols from /home/sysroot/testApp...done.
(gdb) core-file /home/sysroot/core
warning: core file may not match specified executable file.
warning: Unexpected size of section `.reg' in core file.
Program terminated with signal SIGABRT, Aborted.
warning: Unexpected size of section `.reg' in core file.
#0 0xd013a820 in raise () from /tmp/usr/lib/libc.a(shr.o)
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0xd04da240 0xd04daa3e Yes (*) /tmp/usr/lib/libcrypt.a(shr.o)
0xd2536250 0xd25499fc Yes
/tmp/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.8.5/libgcc_s.a(shr.o)
0xd0566c80 0xd0566db6 Yes (*) /tmp/usr/lib/librtl.a(shr.o)
0xd010c880 0xd049b13d Yes (*) /tmp/usr/lib/libc.a(shr.o)
0xd2fd7150 0xd2fd78e1 Yes /tmp/home/sysroot/libTest.so
(*): Shared library is missing debugging information.
(gdb) bt
#0 0xd013a820 in raise () from /tmp/usr/lib/libc.a(shr.o)
#1 0xd01b3088 in abort () from /tmp/usr/lib/libc.a(shr.o)
#2 0xd2fd749c in func () from /tmp/home/sysroot/libTest.so
#3 0x100003fc in main () at main.c:8
(gdb)
Please review and let me know the comments.
Thanks & Regards,
-Sangamesh
AIX BOS Development
[-- Attachment #2: ChangeLog --]
[-- Type: application/octet-stream, Size: 120 bytes --]
*solib-aix.c (solib_aix_bfd_open): Recognise sysroot path if a program on AIX
requires shared library archives (.a).
[-- Attachment #3: set_sysroot.patch --]
[-- Type: application/octet-stream, Size: 1197 bytes --]
--- ./gdb/solib-aix.c.sysroot 2016-02-09 21:19:39.000000000 -0600
+++ ./gdb/solib-aix.c 2016-09-13 02:21:22.000000000 -0500
@@ -642,17 +642,28 @@
FIXME: This is a little hacky. Perhaps we should provide access
to the solib's lm_info here? */
- const int path_len = strlen (pathname);
+ int path_len = strlen (pathname);
char *sep;
char *filename;
int filename_len;
- char *member_name;
+ char *member_name, *sys_path;
bfd *archive_bfd, *object_bfd;
struct cleanup *cleanup;
- if (pathname[path_len - 1] != ')')
+ if (pathname[path_len - 1] != ')') /* .so case */
return solib_bfd_open (pathname);
+ /* If gdb_sysroot is set via set sysroot command,
+ then we need to prefix gdb_sysroot to shared library path */
+ /* .a shared library archives case */
+ if (gdb_sysroot != NULL && *gdb_sysroot != 0) {
+ sys_path = alloca (sizeof(gdb_sysroot)+strlen(pathname));
+ memset (sys_path, 0, sizeof(sys_path));
+ strcpy(sys_path, gdb_sysroot);
+ pathname = strcat (sys_path, pathname);
+ }
+ path_len = strlen (pathname);
+
/* Search for the associated parens. */
sep = strrchr (pathname, '(');
if (sep == NULL)
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-09-13 9:05 set sysroot command on AIX has no effect Sangamesh Mallayya
@ 2016-09-29 15:33 ` Ulrich Weigand
2016-09-30 14:15 ` Sangamesh Mallayya
0 siblings, 1 reply; 16+ messages in thread
From: Ulrich Weigand @ 2016-09-29 15:33 UTC (permalink / raw)
To: Sangamesh Mallayya; +Cc: gdb-patches
Sangamesh Mallaya wrote:
> set sysroot command on AIX has no effect if a program depends on shared
> library archives (.a).
Yes, that seems a bug.
> + /* If gdb_sysroot is set via set sysroot command,
> + then we need to prefix gdb_sysroot to shared library path */
> + /* .a shared library archives case */
> + if (gdb_sysroot != NULL && *gdb_sysroot != 0) {
> + sys_path = alloca (sizeof(gdb_sysroot)+strlen(pathname));
> + memset (sys_path, 0, sizeof(sys_path));
> + strcpy(sys_path, gdb_sysroot);
> + pathname = strcat (sys_path, pathname);
> + }
> + path_len = strlen (pathname);
This duplicates some of the logic in solib_find. It would be better
to avoid that duplication ...
Is there any reason why you cannot use solib_find / solib_bfd_fopen
to open the archive file, like solib_bfd_open does? This would ensure
we're always using the same search logic for .a files as for .so files.
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU/Linux compilers and toolchain
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-09-29 15:33 ` Ulrich Weigand
@ 2016-09-30 14:15 ` Sangamesh Mallayya
2016-09-30 14:38 ` Ulrich Weigand
0 siblings, 1 reply; 16+ messages in thread
From: Sangamesh Mallayya @ 2016-09-30 14:15 UTC (permalink / raw)
To: Ulrich Weigand; +Cc: gdb-patches
Hi Ulrich,
Thanks for the review and comments.
If we call solib_bfd_open for .a files then the call to open file using
gdb_open_cloexec inside solib_find function is failing.
The reason for this is,
we will be getting library information from ld_info in the form of
"/usr/lib/libc.a(shr.o)", but actually we will be having the
file in filesystem as /usr/lib/libc.a. This is the reason initially i
didn't use solib_bfd_open.
But i experimented some more and tried to see how gdb behaves if we pass
modified pathname exactly as the file which we are having in the machine,
like "/usr/lib/libc.a".
Then bfd bfd_check_format is failing with the error "not in executable
format".
Looks like bfd isn't able to recognise the .a archives.
I can have a look on why bfd check is failing.
Please let me know if this is the right way to move forward or you have
any suggestions.
Thanks,
-Sangamesh
From: "Ulrich Weigand" <uweigand@de.ibm.com>
To: Sangamesh Mallayya/India/IBM@IBMIN
Cc: gdb-patches@sourceware.org
Date: 09/29/2016 08:52 PM
Subject: Re: set sysroot command on AIX has no effect.
Sangamesh Mallaya wrote:
> set sysroot command on AIX has no effect if a program depends on shared
> library archives (.a).
Yes, that seems a bug.
> + /* If gdb_sysroot is set via set sysroot command,
> + then we need to prefix gdb_sysroot to shared library path */
> + /* .a shared library archives case */
> + if (gdb_sysroot != NULL && *gdb_sysroot != 0) {
> + sys_path = alloca (sizeof(gdb_sysroot)+strlen(pathname));
> + memset (sys_path, 0, sizeof(sys_path));
> + strcpy(sys_path, gdb_sysroot);
> + pathname = strcat (sys_path, pathname);
> + }
> + path_len = strlen (pathname);
This duplicates some of the logic in solib_find. It would be better
to avoid that duplication ...
Is there any reason why you cannot use solib_find / solib_bfd_fopen
to open the archive file, like solib_bfd_open does? This would ensure
we're always using the same search logic for .a files as for .so files.
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU/Linux compilers and toolchain
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-09-30 14:15 ` Sangamesh Mallayya
@ 2016-09-30 14:38 ` Ulrich Weigand
2016-10-04 13:19 ` Sangamesh Mallayya
0 siblings, 1 reply; 16+ messages in thread
From: Ulrich Weigand @ 2016-09-30 14:38 UTC (permalink / raw)
To: Sangamesh Mallayya; +Cc: gdb-patches
Hi Sangamesh,
> If we call solib_bfd_open for .a files then the call to open file using
> gdb_open_cloexec inside solib_find function is failing.
> The reason for this is,
> we will be getting library information from ld_info in the form of
> "/usr/lib/libc.a(shr.o)", but actually we will be having the
> file in filesystem as /usr/lib/libc.a. This is the reason initially i
> didn't use solib_bfd_open.
Yes, I understand why you cannot use solib_bfd_open directly. That's why
I suggested to use *solib_bfd_fopen* (note the "f") :-)
> But i experimented some more and tried to see how gdb behaves if we pass
> modified pathname exactly as the file which we are having in the machine,
> like "/usr/lib/libc.a".
> Then bfd bfd_check_format is failing with the error "not in executable
> format".
> Looks like bfd isn't able to recognise the .a archives.
> I can have a look on why bfd check is failing.
That's because solib_bfd_open uses the bfd_object argument to
bfd_check_format, which is explicitly supposed to reject .a archives.
Instead, to check for archives, you need to use bfd_archive, like
solib_aix_bfd_open does. I'm not suggesting to change that, just to
open the bfd using solib_find and solib_bfd_fopen before performing
the check, instead of using gdb_bfd_open.
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU/Linux compilers and toolchain
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-09-30 14:38 ` Ulrich Weigand
@ 2016-10-04 13:19 ` Sangamesh Mallayya
2016-10-07 19:31 ` Ulrich Weigand
0 siblings, 1 reply; 16+ messages in thread
From: Sangamesh Mallayya @ 2016-10-04 13:19 UTC (permalink / raw)
To: Ulrich Weigand; +Cc: gdb-patches
Hi Ulrich,
>
> > If we call solib_bfd_open for .a files then the call to open file
using
> > gdb_open_cloexec inside solib_find function is failing.
> > The reason for this is,
> > we will be getting library information from ld_info in the form of
> > "/usr/lib/libc.a(shr.o)", but actually we will be having the
> > file in filesystem as /usr/lib/libc.a. This is the reason initially i
> > didn't use solib_bfd_open.
>
> Yes, I understand why you cannot use solib_bfd_open directly. That's
why
> I suggested to use *solib_bfd_fopen* (note the "f") :-)
>
> > But i experimented some more and tried to see how gdb behaves if we
pass
> > modified pathname exactly as the file which we are having in the
machine,
> > like "/usr/lib/libc.a".
> > Then bfd bfd_check_format is failing with the error "not in executable
> > format".
> > Looks like bfd isn't able to recognise the .a archives.
> > I can have a look on why bfd check is failing.
>
> That's because solib_bfd_open uses the bfd_object argument to
> bfd_check_format, which is explicitly supposed to reject .a archives.
> Instead, to check for archives, you need to use bfd_archive, like
> solib_aix_bfd_open does. I'm not suggesting to change that, just to
> open the bfd using solib_find and solib_bfd_fopen before performing
> the check, instead of using gdb_bfd_open.
Calling solib_find returning a prefixed sysroot path and the duplication
can be avoided as you suggested.
But calling solib_bfd_fopen after this is causing the assertion to fail on
NULL path as solib_bfd_fopen doing xfree of pathname at the end.
As we still want to refer to sysroot path returned from solib_find or
filename inside solib_aix_bfd_open until assigning path to bfd filename "(
object_bfd->filename = xstrdup (pathname)"
So calling solib_bfd_fopen is causing assertion failure like this.
utils.c:2971: internal-error: char* gdb_abspath(const char*): Assertion
`path != NULL && path[0] != '\0'' failed.
This is the change i have it right now.
char *member_name;
bfd *archive_bfd, *object_bfd;
struct cleanup *cleanup;
+ int found_file;
if (pathname[path_len - 1] != ')')
return solib_bfd_open (pathname);
@@ -669,6 +670,9 @@
member_name = xstrprintf ("%.*s", path_len - filename_len - 2, sep +
1);
make_cleanup (xfree, member_name);
+ pathname = solib_find (filename, &found_file);
+ if (pathname == NULL)
+ perror_with_name (filename);
archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
if (archive_bfd == NULL)
{
Let me know your view.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-10-04 13:19 ` Sangamesh Mallayya
@ 2016-10-07 19:31 ` Ulrich Weigand
2016-10-08 13:15 ` Sangamesh Mallayya
0 siblings, 1 reply; 16+ messages in thread
From: Ulrich Weigand @ 2016-10-07 19:31 UTC (permalink / raw)
To: Sangamesh Mallayya; +Cc: gdb-patches
Sangamesh Mallaya wrote:
> Calling solib_find returning a prefixed sysroot path and the duplication
> can be avoided as you suggested.
> But calling solib_bfd_fopen after this is causing the assertion to fail on
> NULL path as solib_bfd_fopen doing xfree of pathname at the end.
Well, of course, you have to check for NULL. What I'm suggesting is to
use something along the lines of:
found_pathname = solib_find (filename, &found_file);
if (found_pathname == NULL)
// error handling
archive_bfd = solib_bfd_fopen (found_pathname, found_file);
where the code currently does:
archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
if (archive_bfd == NULL)
// error handling
> + pathname = solib_find (filename, &found_file);
> + if (pathname == NULL)
> + perror_with_name (filename);
> archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
> if (archive_bfd == NULL)
> {
This has a number of problems:
- you still use gdb_bfd_open with filename, which means it still won't
find the file (I assume you meant to use pathname?)
- if solib_find actually finds the file, "found_file" is an open file
descriptor, which the code now leaks
- actually, the pathname string now also leaks
- and finally, at the bottom:
object_bfd->filename = xstrdup (pathname);
you now miss the object file name (in parentheses), so
"info sharedlibrary" will no longer show it
Most of those should be fixed when using the approach above.
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU/Linux compilers and toolchain
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-10-07 19:31 ` Ulrich Weigand
@ 2016-10-08 13:15 ` Sangamesh Mallayya
2016-10-08 14:38 ` Ulrich Weigand
0 siblings, 1 reply; 16+ messages in thread
From: Sangamesh Mallayya @ 2016-10-08 13:15 UTC (permalink / raw)
To: Ulrich Weigand; +Cc: gdb-patches
Hi Ulrich,
>
> > Calling solib_find returning a prefixed sysroot path and the
duplication
> > can be avoided as you suggested.
> > But calling solib_bfd_fopen after this is causing the assertion to
fail on
> > NULL path as solib_bfd_fopen doing xfree of pathname at the end.
>
> Well, of course, you have to check for NULL. What I'm suggesting is to
> use something along the lines of:
>
> found_pathname = solib_find (filename, &found_file);
> if (found_pathname == NULL)
> // error handling
> archive_bfd = solib_bfd_fopen (found_pathname, found_file);
>
Yes, i did try these steps. But this won't set the sysroot path as we
intend to.
The final object filename we want is the one returned from solib_find,
which is a sysroot prefixed pathname.
After solib_bfd_fopen call we can't refer to found_pathname as it's been
freed in solib_bfd_fopen at the end, and assertion failure later.
> where the code currently does:
>
> archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
> if (archive_bfd == NULL)
> // error handling
>
>
> > + pathname = solib_find (filename, &found_file);
> > + if (pathname == NULL)
> > + perror_with_name (filename);
> > archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
> > if (archive_bfd == NULL)
> > {
>
> This has a number of problems:
> - you still use gdb_bfd_open with filename, which means it still won't
> find the file (I assume you meant to use pathname?)
pathname we get is something like "/usr/lib/libc.a(shr.o)", Offcourse
their is no such file with this pathname in the system.
So we set a filename as "/usr/lib/libc.a" after separating member name
from actual file and gdb_bfd_open does find the file and return it's bfd.
Here if we pass the path returned from solib_find to gdb_bfd_open instead
of filename then no issue is seen.
filename is a malloc'ed string which will be freed up when do_cleanups is
called before existing from solib_aix_bfd_open.
> - if solib_find actually finds the file, "found_file" is an open file
> descriptor, which the code now leaks
I too was bit reluctant about found_file use after solib_find, but wanted
to have your view.
> - actually, the pathname string now also leaks
> - and finally, at the bottom:
> object_bfd->filename = xstrdup (pathname);
> you now miss the object file name (in parentheses), so
> "info sharedlibrary" will no longer show it
>
> Most of those should be fixed when using the approach above.
pathname string we need to assign to object filename is the one which is
returned from solib_find which gives us sysroot path.
We aren't modifying actual pathname which we got from solib_map_sections,
just reusing the pathname variable locally, so as to assign that to object
filename.
I confirmed this with debugging gdb and pasted the output of gdb session
below.
I think, better we use found_pathname variable to store returned value
from solib_find instead of using existing pathname variable to avoid
confusion.
And may assign object filename as "object_bfd->filename = xstrdup
(found_pathname);" ?
The only problem i think if we use solib_find without using
solib_bfd_fopen is found_file descriptor.
Let me know your view.
output of gdb session before call to solib_aix_bfd_open & after return
from solib_aix_bfd_open
----------------------------------------------------------------------------------------------
Breakpoint 3, _ZL18solib_map_sectionsP7so_list (so=0x1102d8bd0) at
solib.c:547
547 abfd = ops->bfd_open (filename);
(top-gdb) p *so
$7 = {next = 0x1102d9030, lm_info = 0x1102ca310,
so_original_name = "/usr/lib/libc.a(shr.o)", '\000' <repeats 489 times>,
so_name = "/usr/lib/libc.a(shr.o)", '\000' <repeats 489 times>, pspace =
0x11025be70,
abfd = 0x0, symbols_loaded = 0 '�', objfile = 0x0, sections = 0x0,
sections_end = 0x0,
addr_low = 0, addr_high = 0}
(top-gdb) p filename
$8 = 0x110273b70 "/usr/lib/libc.a(shr.o)"
(top-gdb) n
548 do_cleanups (old_chain);
(top-gdb) p *so
$9 = {next = 0x1102d9030, lm_info = 0x1102ca310,
so_original_name = "/usr/lib/libc.a(shr.o)", '\000' <repeats 489 times>,
so_name = "/usr/lib/libc.a(shr.o)", '\000' <repeats 489 times>, pspace =
0x11025be70,
abfd = 0x0, symbols_loaded = 0 '�', objfile = 0x0, sections = 0x0,
sections_end = 0x0,
addr_low = 0, addr_high = 0}
(top-gdb) p filename
$10 = 0x110273b70 "/usr/lib/libc.a(shr.o)"
(top-gdb)
Thanks,
-Sangamesh
From: "Ulrich Weigand" <uweigand@de.ibm.com>
To: Sangamesh Mallayya/India/IBM@IBMIN
Cc: gdb-patches@sourceware.org
Date: 10/08/2016 01:01 AM
Subject: Re: set sysroot command on AIX has no effect.
Sangamesh Mallaya wrote:
> Calling solib_find returning a prefixed sysroot path and the duplication
> can be avoided as you suggested.
> But calling solib_bfd_fopen after this is causing the assertion to fail
on
> NULL path as solib_bfd_fopen doing xfree of pathname at the end.
Well, of course, you have to check for NULL. What I'm suggesting is to
use something along the lines of:
found_pathname = solib_find (filename, &found_file);
if (found_pathname == NULL)
// error handling
archive_bfd = solib_bfd_fopen (found_pathname, found_file);
where the code currently does:
archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
if (archive_bfd == NULL)
// error handling
> + pathname = solib_find (filename, &found_file);
> + if (pathname == NULL)
> + perror_with_name (filename);
> archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
> if (archive_bfd == NULL)
> {
This has a number of problems:
- you still use gdb_bfd_open with filename, which means it still won't
find the file (I assume you meant to use pathname?)
- if solib_find actually finds the file, "found_file" is an open file
descriptor, which the code now leaks
- actually, the pathname string now also leaks
- and finally, at the bottom:
object_bfd->filename = xstrdup (pathname);
you now miss the object file name (in parentheses), so
"info sharedlibrary" will no longer show it
Most of those should be fixed when using the approach above.
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU/Linux compilers and toolchain
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-10-08 13:15 ` Sangamesh Mallayya
@ 2016-10-08 14:38 ` Ulrich Weigand
2016-10-10 12:11 ` Sangamesh Mallayya
0 siblings, 1 reply; 16+ messages in thread
From: Ulrich Weigand @ 2016-10-08 14:38 UTC (permalink / raw)
To: Sangamesh Mallayya; +Cc: gdb-patches
Sangamesh Mallayya wrote:
>> Well, of course, you have to check for NULL. What I'm suggesting is to
>> use something along the lines of:
>>
>> found_pathname = solib_find (filename, &found_file);
>> if (found_pathname == NULL)
>> // error handling
>> archive_bfd = solib_bfd_fopen (found_pathname, found_file);
>
>Yes, i did try these steps. But this won't set the sysroot path as we
>intend to.
>The final object filename we want is the one returned from solib_find,
>which is a sysroot prefixed pathname.
>After solib_bfd_fopen call we can't refer to found_pathname as it's been
>freed in solib_bfd_fopen at the end, and assertion failure later.
Well, if you want to reuse the found_pathname, you'll just have to
duplicate it (there's already a call to xstrdup later in the function,
you may have to move it earlier).
>> > + pathname = solib_find (filename, &found_file);
>> > + if (pathname == NULL)
>> > + perror_with_name (filename);
>> > archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
>> > if (archive_bfd == NULL)
>> > {
>>
>> This has a number of problems:
>> - you still use gdb_bfd_open with filename, which means it still won't
>> find the file (I assume you meant to use pathname?)
>
>pathname we get is something like "/usr/lib/libc.a(shr.o)", Offcourse
>their is no such file with this pathname in the system.
>So we set a filename as "/usr/lib/libc.a" after separating member name
>from actual file and gdb_bfd_open does find the file and return it's bfd.
>Here if we pass the path returned from solib_find to gdb_bfd_open instead
>of filename then no issue is seen.
My point was, the code as shown above does *not* pass the path returned
from solib_find to gdb_bfd_open! The path returned from solib_find is
assigned to "pathname" (overriding the value pathname that was input to
the function), but then gdb_bfd_open is still called with "filename".
>I think, better we use found_pathname variable to store returned value
>from solib_find instead of using existing pathname variable to avoid
>confusion.
>And may assign object filename as "object_bfd->filename = xstrdup
>(found_pathname);" ?
Agreed (see above). However, note that this will *not* contain the
object name in parentheses. For example, if you initially get a
pathname of:
/usr/lib/libc.a(shr.o)
Then you separate out the filename into:
/usr/lib/libc.a
Then you pass this to solib_find and get a full name including sysroot:
/path/to/sysroot/usr/lib/libc.a
But what you probably want to use as name in the final solib object is:
/path/to/sysroot/usr/lib/libc.a(shr.o)
My point was that in order to get this, you'll have to append the
"(shr.o)" back on to the result you got from solib_find.
>The only problem i think if we use solib_find without using
>solib_bfd_fopen is found_file descriptor.
>Let me know your view.
Please do use the pair of solib_find / solib_bfd_fopen; they were
designed to be used with each other, that's why they have the
interface they do.
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU/Linux compilers and toolchain
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-10-08 14:38 ` Ulrich Weigand
@ 2016-10-10 12:11 ` Sangamesh Mallayya
2016-10-10 16:29 ` Ulrich Weigand
0 siblings, 1 reply; 16+ messages in thread
From: Sangamesh Mallayya @ 2016-10-10 12:11 UTC (permalink / raw)
To: Ulrich Weigand; +Cc: gdb-patches
Hi Ulrich,
> Sangamesh Mallayya wrote:
>
> >> Well, of course, you have to check for NULL. What I'm suggesting is
to
> >> use something along the lines of:
> >>
> >> found_pathname = solib_find (filename, &found_file);
> >> if (found_pathname == NULL)
> >> // error handling
> >> archive_bfd = solib_bfd_fopen (found_pathname, found_file);
> >
> >Yes, i did try these steps. But this won't set the sysroot path as we
> >intend to.
> >The final object filename we want is the one returned from solib_find,
> >which is a sysroot prefixed pathname.
> >After solib_bfd_fopen call we can't refer to found_pathname as it's
been
> >freed in solib_bfd_fopen at the end, and assertion failure later.
>
> Well, if you want to reuse the found_pathname, you'll just have to
> duplicate it (there's already a call to xstrdup later in the function,
> you may have to move it earlier).
>
> >> > + pathname = solib_find (filename, &found_file);
> >> > + if (pathname == NULL)
> >> > + perror_with_name (filename);
> >> > archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
> >> > if (archive_bfd == NULL)
> >> > {
> >>
> >> This has a number of problems:
> >> - you still use gdb_bfd_open with filename, which means it still
won't
> >> find the file (I assume you meant to use pathname?)
> >
> >pathname we get is something like "/usr/lib/libc.a(shr.o)", Offcourse
> >their is no such file with this pathname in the system.
> >So we set a filename as "/usr/lib/libc.a" after separating member name
> >from actual file and gdb_bfd_open does find the file and return it's
bfd.
> >Here if we pass the path returned from solib_find to gdb_bfd_open
instead
> >of filename then no issue is seen.
>
> My point was, the code as shown above does *not* pass the path returned
> from solib_find to gdb_bfd_open! The path returned from solib_find is
> assigned to "pathname" (overriding the value pathname that was input to
> the function), but then gdb_bfd_open is still called with "filename".
>
> >I think, better we use found_pathname variable to store returned value
> >from solib_find instead of using existing pathname variable to avoid
> >confusion.
> >And may assign object filename as "object_bfd->filename = xstrdup
> >(found_pathname);" ?
>
> Agreed (see above). However, note that this will *not* contain the
> object name in parentheses. For example, if you initially get a
> pathname of:
> /usr/lib/libc.a(shr.o)
> Then you separate out the filename into:
> /usr/lib/libc.a
> Then you pass this to solib_find and get a full name including sysroot:
> /path/to/sysroot/usr/lib/libc.a
> But what you probably want to use as name in the final solib object is:
> /path/to/sysroot/usr/lib/libc.a(shr.o)
>
> My point was that in order to get this, you'll have to append the
> "(shr.o)" back on to the result you got from solib_find.
>
> >The only problem i think if we use solib_find without using
> >solib_bfd_fopen is found_file descriptor.
> >Let me know your view.
>
> Please do use the pair of solib_find / solib_bfd_fopen; they were
> designed to be used with each other, that's why they have the
> interface they do.
Thanks a lot for the detailed explanation and guidance.
Here is the change i have it right now which takes care of.
1) calling solib_find and then solib_bfd_fopen.
2) Appending parenthesized member name.
Let me know your view on this.
--- ./gdb/solib-aix.c_orig 2016-10-04 03:22:01.000000000 -0500
+++ ./gdb/solib-aix.c 2016-10-10 06:23:32.000000000 -0500
@@ -648,6 +648,8 @@
char *member_name;
bfd *archive_bfd, *object_bfd;
struct cleanup *cleanup;
+ int found_file, found_path_len;
+ char *found_pathname, *found_pathname1;
if (pathname[path_len - 1] != ')')
return solib_bfd_open (pathname);
@@ -669,12 +671,24 @@
member_name = xstrprintf ("%.*s", path_len - filename_len - 2, sep +
1);
make_cleanup (xfree, member_name);
- archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
+ /* Calling solib_find makes certain that sysroot path is set properly
+ if program has a dependency on .a archive and sysroot is set via
+ set sysroot command */
+ found_pathname = solib_find (filename, &found_file);
+ if (found_pathname == NULL)
+ perror_with_name (pathname);
+ found_pathname1 = xstrdup (found_pathname);
+ found_path_len = strlen (found_pathname1) + strlen (sep);
+ /* Reserve a space for appending parenthesized member name to
filename,
+ as path returned from solib_find is just a filename */
+ found_pathname1 = xrealloc (found_pathname1, found_path_len);
+ archive_bfd = solib_bfd_fopen (found_pathname, found_file);
if (archive_bfd == NULL)
{
warning (_("Could not open `%s' as an executable file: %s"),
filename, bfd_errmsg (bfd_get_error ()));
do_cleanups (cleanup);
+ xfree (found_pathname1);
return NULL;
}
@@ -681,6 +695,7 @@
if (bfd_check_format (archive_bfd, bfd_object))
{
do_cleanups (cleanup);
+ xfree (found_pathname1);
return archive_bfd;
}
@@ -690,6 +705,7 @@
filename, bfd_errmsg (bfd_get_error ()));
gdb_bfd_unref (archive_bfd);
do_cleanups (cleanup);
+ xfree (found_pathname1);
return NULL;
}
@@ -711,6 +727,7 @@
warning (_("\"%s\": member \"%s\" missing."), filename,
member_name);
gdb_bfd_unref (archive_bfd);
do_cleanups (cleanup);
+ xfree (found_pathname1);
return NULL;
}
@@ -721,6 +738,7 @@
gdb_bfd_unref (archive_bfd);
gdb_bfd_unref (object_bfd);
do_cleanups (cleanup);
+ xfree (found_pathname1);
return NULL;
}
@@ -729,7 +747,8 @@
synthetic name. Otherwise, we would only be displaying the name
of the archive member object. */
xfree (bfd_get_filename (object_bfd));
- object_bfd->filename = xstrdup (pathname);
+ strcat (found_pathname1, sep);
+ object_bfd->filename = found_pathname1;
gdb_bfd_unref (archive_bfd);
do_cleanups (cleanup);
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-10-10 12:11 ` Sangamesh Mallayya
@ 2016-10-10 16:29 ` Ulrich Weigand
2016-10-11 7:17 ` Ulrich Weigand
0 siblings, 1 reply; 16+ messages in thread
From: Ulrich Weigand @ 2016-10-10 16:29 UTC (permalink / raw)
To: Sangamesh Mallayya; +Cc: gdb-patches
Sangamesh Mallayya wrote:
> Here is the change i have it right now which takes care of.
>
> 1) calling solib_find and then solib_bfd_fopen.
> 2) Appending parenthesized member name.
This is looking mostly good. The one thing I don't like is all the extra
xfree calls. I think a better way would to not actually xstrdup the found
pathname early after all, but instead just get it from the BFD. So instead
of the original:
xfree (bfd_get_filename (object_bfd));
object_bfd->filename = xstrdup (pathname);
you'd do something like:
object_bfd->filename = xrealloc (object_bfd->filename, ...);
strcat (object_bfd->filename, sep);
> + /* Calling solib_find makes certain that sysroot path is set properly
> + if program has a dependency on .a archive and sysroot is set via
> + set sysroot command */
Minor coding style issue: sentences in a comment should end with a '.'
followed by two spaces, like so:
... set sysroot command. */
> + found_pathname1 = xstrdup (found_pathname);
> + found_path_len = strlen (found_pathname1) + strlen (sep);
> + found_pathname1 = xrealloc (found_pathname1, found_path_len);
See comment above, but also: there should be a "+ 1" for the null
terminator in the length computation somewhere.
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU/Linux compilers and toolchain
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-10-10 16:29 ` Ulrich Weigand
@ 2016-10-11 7:17 ` Ulrich Weigand
2016-10-13 13:42 ` Sangamesh Mallayya
0 siblings, 1 reply; 16+ messages in thread
From: Ulrich Weigand @ 2016-10-11 7:17 UTC (permalink / raw)
To: Ulrich Weigand; +Cc: Sangamesh Mallayya, gdb-patches
I wrote:
> This is looking mostly good. The one thing I don't like is all the extra
> xfree calls. I think a better way would to not actually xstrdup the found
> pathname early after all, but instead just get it from the BFD. So instead
> of the original:
>
> xfree (bfd_get_filename (object_bfd));
> object_bfd->filename = xstrdup (pathname);
>
> you'd do something like:
>
> object_bfd->filename = xrealloc (object_bfd->filename, ...);
> strcat (object_bfd->filename, sep);
Sorry, I mixed up the two BFDs here, we need to get the pathname from
the archive_bfd, of coutse. So this would be something like:
xfree (bfd_get_filename (object_bfd));
object_bfd->filename = xstrprintf ("%s%s", bfd_get_filename (archive_bfd), sep);
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU/Linux compilers and toolchain
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-10-11 7:17 ` Ulrich Weigand
@ 2016-10-13 13:42 ` Sangamesh Mallayya
2016-10-13 14:03 ` Ulrich Weigand
0 siblings, 1 reply; 16+ messages in thread
From: Sangamesh Mallayya @ 2016-10-13 13:42 UTC (permalink / raw)
To: Ulrich Weigand; +Cc: gdb-patches
Hi Ulrich,
> > This is looking mostly good. The one thing I don't like is all the
extra
> > xfree calls. I think a better way would to not actually xstrdup the
found
> > pathname early after all, but instead just get it from the BFD. So
instead
> > of the original:
> >
> > xfree (bfd_get_filename (object_bfd));
> > object_bfd->filename = xstrdup (pathname);
> >
> > you'd do something like:
> >
> > object_bfd->filename = xrealloc (object_bfd->filename, ...);
> > strcat (object_bfd->filename, sep);
>
> Sorry, I mixed up the two BFDs here, we need to get the pathname from
> the archive_bfd, of coutse. So this would be something like:
>
> xfree (bfd_get_filename (object_bfd));
> object_bfd->filename = xstrprintf ("%s%s", bfd_get_filename
> (archive_bfd), sep);
>
Thanks again. Here is the updated patch and looks much better than the
previous one.
--- ./gdb/solib-aix.c_orig 2016-10-04 03:22:01.000000000 -0500
+++ ./gdb/solib-aix.c 2016-10-13 03:09:26.000000000 -0500
@@ -648,6 +648,8 @@
char *member_name;
bfd *archive_bfd, *object_bfd;
struct cleanup *cleanup;
+ int found_file;
+ char *found_pathname;
if (pathname[path_len - 1] != ')')
return solib_bfd_open (pathname);
@@ -669,7 +671,13 @@
member_name = xstrprintf ("%.*s", path_len - filename_len - 2, sep +
1);
make_cleanup (xfree, member_name);
- archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
+ /* Calling solib_find makes certain that sysroot path is set properly
+ if program has a dependency on .a archive and sysroot is set via
+ set sysroot command. */
+ found_pathname = solib_find (filename, &found_file);
+ if (found_pathname == NULL)
+ perror_with_name (pathname);
+ archive_bfd = solib_bfd_fopen (found_pathname, found_file);
if (archive_bfd == NULL)
{
warning (_("Could not open `%s' as an executable file: %s"),
@@ -724,12 +732,14 @@
return NULL;
}
- /* Override the returned bfd's name with our synthetic name in order
- to allow commands listing all shared libraries to display that
- synthetic name. Otherwise, we would only be displaying the name
- of the archive member object. */
+ /* Override the returned bfd's name with the name returned from
solib_find
+ along with appended parenthesized member name in order to allow
commands
+ listing all shared libraries to display.
+ Otherwise, we would only be displaying the name of the archive
member
+ object. */
xfree (bfd_get_filename (object_bfd));
- object_bfd->filename = xstrdup (pathname);
+ object_bfd->filename = xstrprintf ("%s%s",
+ bfd_get_filename (archive_bfd),
sep);
gdb_bfd_unref (archive_bfd);
do_cleanups (cleanup);
I ran gdb.base regression test too and no new failures are seen.
Here is the summary.
# of expected passes 9860
# of unexpected failures 1594
# of expected failures 14
# of unresolved testcases 1
# of untested testcases 60
# of unsupported tests 30
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-10-13 13:42 ` Sangamesh Mallayya
@ 2016-10-13 14:03 ` Ulrich Weigand
2016-10-13 17:44 ` Sangamesh Mallayya
0 siblings, 1 reply; 16+ messages in thread
From: Ulrich Weigand @ 2016-10-13 14:03 UTC (permalink / raw)
To: Sangamesh Mallayya; +Cc: gdb-patches
Sangamesh Mallayya wrote:
> Thanks again. Here is the updated patch and looks much better than the
> previous one.
Indeed, this looks good to me now. We still need a ChangeLog entry,
but apart from that, this is ready to check in.
> I ran gdb.base regression test too and no new failures are seen.
Thanks!
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU/Linux compilers and toolchain
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-10-13 14:03 ` Ulrich Weigand
@ 2016-10-13 17:44 ` Sangamesh Mallayya
2016-10-14 13:13 ` Ulrich Weigand
0 siblings, 1 reply; 16+ messages in thread
From: Sangamesh Mallayya @ 2016-10-13 17:44 UTC (permalink / raw)
To: Ulrich Weigand; +Cc: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 322 bytes --]
Hi Ulrich,
> > Thanks again. Here is the updated patch and looks much better than the
> > previous one.
>
> Indeed, this looks good to me now. We still need a ChangeLog entry,
> but apart from that, this is ready to check in.
>
Please find the ChangeLog & patch file attached.
Thanks,
Sangamesh
[-- Attachment #2: ChangeLog --]
[-- Type: application/octet-stream, Size: 178 bytes --]
* solib-aix.c (solib_aix_bfd_open): Call solib_find so that sysroot
path is set properly if program has a dependency on .a archive and
sysroot is set via set sysroot command.
[-- Attachment #3: sysroot.patch --]
[-- Type: application/octet-stream, Size: 1919 bytes --]
--- ./gdb/solib-aix.c_orig 2016-10-04 03:22:01.000000000 -0500
+++ ./gdb/solib-aix.c 2016-10-13 03:09:26.000000000 -0500
@@ -648,6 +648,8 @@
char *member_name;
bfd *archive_bfd, *object_bfd;
struct cleanup *cleanup;
+ int found_file;
+ char *found_pathname;
if (pathname[path_len - 1] != ')')
return solib_bfd_open (pathname);
@@ -669,7 +671,13 @@
member_name = xstrprintf ("%.*s", path_len - filename_len - 2, sep + 1);
make_cleanup (xfree, member_name);
- archive_bfd = gdb_bfd_open (filename, gnutarget, -1);
+ /* Calling solib_find makes certain that sysroot path is set properly
+ if program has a dependency on .a archive and sysroot is set via
+ set sysroot command. */
+ found_pathname = solib_find (filename, &found_file);
+ if (found_pathname == NULL)
+ perror_with_name (pathname);
+ archive_bfd = solib_bfd_fopen (found_pathname, found_file);
if (archive_bfd == NULL)
{
warning (_("Could not open `%s' as an executable file: %s"),
@@ -724,12 +732,14 @@
return NULL;
}
- /* Override the returned bfd's name with our synthetic name in order
- to allow commands listing all shared libraries to display that
- synthetic name. Otherwise, we would only be displaying the name
- of the archive member object. */
+ /* Override the returned bfd's name with the name returned from solib_find
+ along with appended parenthesized member name in order to allow commands
+ listing all shared libraries to display.
+ Otherwise, we would only be displaying the name of the archive member
+ object. */
xfree (bfd_get_filename (object_bfd));
- object_bfd->filename = xstrdup (pathname);
+ object_bfd->filename = xstrprintf ("%s%s",
+ bfd_get_filename (archive_bfd), sep);
gdb_bfd_unref (archive_bfd);
do_cleanups (cleanup);
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
2016-10-13 17:44 ` Sangamesh Mallayya
@ 2016-10-14 13:13 ` Ulrich Weigand
0 siblings, 0 replies; 16+ messages in thread
From: Ulrich Weigand @ 2016-10-14 13:13 UTC (permalink / raw)
To: Sangamesh Mallayya; +Cc: gdb-patches
Sangamesh Mallayya wrote:
> > > Thanks again. Here is the updated patch and looks much better than the
> > > previous one.
> > Indeed, this looks good to me now. We still need a ChangeLog entry,
> > but apart from that, this is ready to check in.
>
> Please find the ChangeLog & patch file attached.
I've pushed this to mainline now.
Note that the patch didn't cleanly apply before I manually fixed some
white space issues. I find the simplest way to create patches that
are good to apply (and contain proper commit messages etc.) is to work
in a local git repo and use "git format-patch".
Thanks,
Ulrich
--
Dr. Ulrich Weigand
GNU/Linux compilers and toolchain
Ulrich.Weigand@de.ibm.com
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: set sysroot command on AIX has no effect.
[not found] <OFBAE0EEF6.511F8BA2-ON6525802D.00305F69-6525802D.0031DA2D@LocalDomain>
@ 2016-09-27 11:39 ` Sangamesh Mallayya
0 siblings, 0 replies; 16+ messages in thread
From: Sangamesh Mallayya @ 2016-09-27 11:39 UTC (permalink / raw)
To: gdb-patches
Hi,
Please review the attached patch and let me know the comments.
Thanks & Regards,
-Sangamesh
AIX BOS Development
From: Sangamesh Mallayya/India/IBM
To: gdb-patches@sourceware.org
Date: 09/13/2016 02:34 PM
Subject: set sysroot command on AIX has no effect.
set sysroot command on AIX has no effect if a program depends on shared
library archives (.a).
This is the original behaviour if we use "set sysroot" command.
(gdb) set sysroot /tmp
warning: while parsing aix library list: no element found
(gdb) file /home/sysroot/testApp
Reading symbols from /home/sysroot/testApp...done.
(gdb) core-file /home/sysroot/core
warning: core file may not match specified executable file.
warning: Unexpected size of section `.reg' in core file.
warning: Could not open `/home/sysroot/libTest.a' as an executable file: A
file or directory in the path name does not exist.
warning: Could not load shared library symbols for
/home/sysroot/libTest.a(func.o).
Do you need "set solib-search-path" or "set sysroot"?
Program terminated with signal SIGABRT, Aborted.
warning: Unexpected size of section `.reg' in core file.
#0 0xd013a820 in raise () from /usr/lib/libc.a(shr.o)
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0xd04da240 0xd04daa3e Yes (*) /usr/lib/libcrypt.a(shr.o)
No /home/sysroot/libTest.a(func.o)
0xd010c880 0xd049b13d Yes (*) /usr/lib/libc.a(shr.o)
(*): Shared library is missing debugging information.
(gdb) bt
#0 0xd013a820 in raise () from /usr/lib/libc.a(shr.o)
#1 0xd01b3088 in abort () from /usr/lib/libc.a(shr.o)
#2 0xd2fd82a4 in ?? ()
#3 0x100003a4 in main () at main.c:8
(gdb)
After applying the attached patch.
Patch doesn't cause any change in original behaviour while handling shared
library with .so names.
".a" name archives case.
(gdb) set sysroot /tmp
warning: while parsing aix library list: no element found
(gdb) file /home/sysroot/testApp
Reading symbols from /home/sysroot/testApp...done.
(gdb) core-file /home/sysroot/core
warning: core file may not match specified executable file.
warning: Unexpected size of section `.reg' in core file.
Program terminated with signal SIGABRT, Aborted.
warning: Unexpected size of section `.reg' in core file.
#0 0xd013a820 in raise () from /tmp/usr/lib/libc.a(shr.o)
(gdb) inf sharedlibrary
From To Syms Read Shared Object Library
0xd04da240 0xd04daa3e Yes (*) /tmp/usr/lib/libcrypt.a(shr.o)
0xd2fd6250 0xd2fd64aa Yes /tmp/home/sysroot/libTest.a(func.o)
0xd010c880 0xd049b13d Yes (*) /tmp/usr/lib/libc.a(shr.o)
(*): Shared library is missing debugging information.
(gdb) bt
#0 0xd013a820 in raise () from /tmp/usr/lib/libc.a(shr.o)
#1 0xd01b3088 in abort () from /tmp/usr/lib/libc.a(shr.o)
#2 0xd2fd6364 in func () from /tmp/home/sysroot/libTest.a(func.o)
#3 0x100003a4 in main () at main.c:8
(gdb)
.a & .so library names
(gdb) set sysroot /tmp
warning: while parsing aix library list: no element found
(gdb) file /home/sysroot/testApp
Reading symbols from /home/sysroot/testApp...done.
(gdb) core-file /home/sysroot/core
warning: core file may not match specified executable file.
warning: Unexpected size of section `.reg' in core file.
Program terminated with signal SIGABRT, Aborted.
warning: Unexpected size of section `.reg' in core file.
#0 0xd013a820 in raise () from /tmp/usr/lib/libc.a(shr.o)
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0xd04da240 0xd04daa3e Yes (*) /tmp/usr/lib/libcrypt.a(shr.o)
0xd2536250 0xd25499fc Yes
/tmp/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.8.5/libgcc_s.a(shr.o)
0xd0566c80 0xd0566db6 Yes (*) /tmp/usr/lib/librtl.a(shr.o)
0xd010c880 0xd049b13d Yes (*) /tmp/usr/lib/libc.a(shr.o)
0xd2fd7150 0xd2fd78e1 Yes /tmp/home/sysroot/libTest.so
(*): Shared library is missing debugging information.
(gdb) bt
#0 0xd013a820 in raise () from /tmp/usr/lib/libc.a(shr.o)
#1 0xd01b3088 in abort () from /tmp/usr/lib/libc.a(shr.o)
#2 0xd2fd749c in func () from /tmp/home/sysroot/libTest.so
#3 0x100003fc in main () at main.c:8
(gdb)
Please review and let me know the comments.
[attachment "ChangeLog" deleted by Sangamesh Mallayya/India/IBM]
[attachment "set_sysroot.patch" deleted by Sangamesh Mallayya/India/IBM]
Thanks & Regards,
-Sangamesh
AIX BOS Development
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2016-10-14 13:13 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-13 9:05 set sysroot command on AIX has no effect Sangamesh Mallayya
2016-09-29 15:33 ` Ulrich Weigand
2016-09-30 14:15 ` Sangamesh Mallayya
2016-09-30 14:38 ` Ulrich Weigand
2016-10-04 13:19 ` Sangamesh Mallayya
2016-10-07 19:31 ` Ulrich Weigand
2016-10-08 13:15 ` Sangamesh Mallayya
2016-10-08 14:38 ` Ulrich Weigand
2016-10-10 12:11 ` Sangamesh Mallayya
2016-10-10 16:29 ` Ulrich Weigand
2016-10-11 7:17 ` Ulrich Weigand
2016-10-13 13:42 ` Sangamesh Mallayya
2016-10-13 14:03 ` Ulrich Weigand
2016-10-13 17:44 ` Sangamesh Mallayya
2016-10-14 13:13 ` Ulrich Weigand
[not found] <OFBAE0EEF6.511F8BA2-ON6525802D.00305F69-6525802D.0031DA2D@LocalDomain>
2016-09-27 11:39 ` Sangamesh Mallayya
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).