From: "John David Anglin" <dave@hiauly1.hia.nrc.ca>
To: dave@hiauly1.hia.nrc.ca (John David Anglin)
Cc: gdb-patches@sourceware.org
Subject: [patch] Only force private mapping of shared libraries in solib-som.c on HP-UX 10 and earlier
Date: Thu, 07 Aug 2008 21:39:00 -0000 [thread overview]
Message-ID: <20080807213349.1ABC04E99@hiauly1.hia.nrc.ca> (raw)
In-Reply-To: <20080806192413.ABC03431A@hiauly1.hia.nrc.ca> from "John David Anglin" at Aug 6, 2008 03:24:12 pm
This is a comparible patch to the solib-pa64.c patch. This one is
somewhat messier as it has to deal with debugging under HP-UX 10 and 11.
I don't have a perfect solution but I think we only support native
debugging. Another method to get the hpux release might have been
to parse the target_name string, but it is not guaranteed to contain
the OS release information.
The old warning was not accurate as libraries were always forced private
even on the first run.
As mentioned previously, I need this change because I have a GCC libgomp
testsuite failure that fails when shared libraries are not mapped privately,
and passes when they are mapped privately.
Ok?
Thanks,
Dave
2008-08-07 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* solib-som.c: Include string.h and sys/utsname.h.
(get_hpux_major_release): New function.
(som_solib_create_inferior_hook): Read dynamic linker header. Warn
about shared library private mapping on HP-UX 11 and later. Only force
private mapping of shared libraries on HP-UX 10 and earlier.
(link_map_start): Delete warning.
Index: solib-som.c
===================================================================
RCS file: /cvs/src/src/gdb/solib-som.c,v
retrieving revision 1.15
diff -u -3 -p -r1.15 solib-som.c
--- solib-som.c 1 Jan 2008 22:53:13 -0000 1.15
+++ solib-som.c 7 Aug 2008 20:03:53 -0000
@@ -30,6 +30,9 @@
#include "solist.h"
#include "solib.h"
+#include <sys/utsname.h>
+#include <string.h>
+
#undef SOLIB_SOM_DBG
/* These ought to be defined in some public interface, but aren't. They
@@ -125,6 +128,38 @@ som_relocate_section_addresses (struct s
;
}
+/* Get HP-UX major release number. Returns zero if the
+ release is not known. */
+
+static int
+get_hpux_major_release (void)
+{
+ static int hpux_major_release = -1;
+
+ if (hpux_major_release == -1)
+ {
+ struct utsname x;
+ char *p;
+
+ uname (&x);
+ p = strchr (x.release, '.');
+ hpux_major_release = p ? atoi (p + 1) : 0;
+ }
+
+ return hpux_major_release;
+}
+
+/* DL header flag defines. */
+#define SHLIB_TEXT_PRIVATE_ENABLE 0x4000
+
+/* The DL header is documented in <shl.h>. We are only interested
+ in the flags field to determine whether the executable wants shared
+ libraries mapped private. */
+struct {
+ short junk[37];
+ short flags;
+} dl_header;
+
/* This hook gets called just before the first instruction in the
inferior process is executed.
@@ -170,6 +205,10 @@ som_solib_create_inferior_hook (void)
if (bfd_section_size (symfile_objfile->obfd, shlib_info) == 0)
return;
+ /* Read the DL header. */
+ bfd_get_section_contents (symfile_objfile->obfd, shlib_info,
+ (char *) &dl_header, 0, sizeof (dl_header));
+
have_endo = 0;
/* Slam the pid of the process into __d_pid.
@@ -274,8 +313,22 @@ keep_going:
error (_("Unable to read __dld_flags."));
dld_flags = extract_unsigned_integer (buf, 4);
+ /* If the libraries were not mapped private on HP-UX 11 and later, warn
+ the user. On HP-UX 10 and earlier, there is no easy way to specify
+ that shared libraries should be privately mapped. So, we just force
+ private mapping. */
+ if (get_hpux_major_release () >= 11
+ && (dl_header.flags & SHLIB_TEXT_PRIVATE_ENABLE) == 0
+ && (dld_flags & DLD_FLAGS_MAPPRIVATE) == 0)
+ warning
+ (_("Private mapping of shared library text was not specified\n"
+ "by the executable; setting a breakpoint in a shared library which\n"
+ "is not privately mapped will not work. See the HP-UX 11i v3 chatr\n"
+ "manpage for methods to privately map shared library text."));
+
/* Turn on the flags we care about. */
- dld_flags |= DLD_FLAGS_MAPPRIVATE;
+ if (get_hpux_major_release () < 11)
+ dld_flags |= DLD_FLAGS_MAPPRIVATE;
if (have_endo)
dld_flags |= DLD_FLAGS_HOOKVALID;
store_unsigned_integer (buf, 4, dld_flags);
@@ -486,12 +539,6 @@ link_map_start (void)
if ((dld_flags & DLD_FLAGS_LISTVALID) == 0)
error (_("__dld_list is not valid according to __dld_flags."));
- /* If the libraries were not mapped private, warn the user. */
- if ((dld_flags & DLD_FLAGS_MAPPRIVATE) == 0)
- warning (_("The shared libraries were not privately mapped; setting a\n"
- "breakpoint in a shared library will not work until you rerun the "
- "program.\n"));
-
sym = lookup_minimal_symbol ("__dld_list", NULL, NULL);
if (!sym)
{
next prev parent reply other threads:[~2008-08-07 21:39 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-09-10 0:30 [RFA] patch to add 'maint profile-gdb' command Jason Molenda
2001-09-10 8:48 ` Andrew Cagney
2001-09-10 8:58 ` Eli Zaretskii
2001-09-10 9:04 ` Andrew Cagney
2001-09-10 11:52 ` Jason Molenda
2001-09-10 13:43 ` Eli Zaretskii
2001-09-10 13:59 ` Jason Molenda
2001-09-11 0:38 ` Eli Zaretskii
[not found] ` <no.id>
1999-06-15 20:10 ` Missing routines: gdb/top.c John David Anglin
2001-09-11 1:37 ` [RFA] patch to add 'maint profile-gdb' command Jason Molenda
2001-09-11 1:57 ` Eli Zaretskii
2001-09-12 0:00 ` Jason Molenda
2001-09-12 6:00 ` Eli Zaretskii
2001-09-12 7:42 ` Jason Molenda
2001-09-12 9:06 ` Eli Zaretskii
2001-09-12 11:58 ` Tom Tromey
2001-09-12 13:16 ` Jason Molenda
2008-08-06 19:24 ` [patch] Don't set DT_HP_DEBUG_PRIVATE in solib-pa64.c John David Anglin
2008-08-06 19:49 ` Mark Kettenis
2008-08-06 20:09 ` John David Anglin
2008-08-06 23:10 ` John David Anglin
2008-08-07 21:39 ` John David Anglin [this message]
2008-08-08 10:48 ` [patch] Only force private mapping of shared libraries in solib-som.c on HP-UX 10 and earlier Joel Brobecker
2008-08-08 15:34 ` John David Anglin
2008-08-09 14:37 ` Joel Brobecker
2008-08-09 18:59 ` John David Anglin
2008-08-08 19:30 ` ttrace: Protocal error John David Anglin
2008-08-08 20:16 ` John David Anglin
2008-08-09 14:52 ` Pedro Alves
2008-08-09 15:34 ` John David Anglin
2008-08-09 18:49 ` John David Anglin
2008-08-09 22:45 ` Pedro Alves
2008-08-09 22:46 ` Pedro Alves
2008-08-09 22:51 ` Pedro Alves
2008-08-09 23:19 ` John David Anglin
2008-08-09 22:48 ` Pedro Alves
2008-08-09 14:53 ` Joel Brobecker
2008-08-09 23:40 ` John David Anglin
2008-08-10 0:46 ` [4/7] Adjust the ttrace target (HP-UX) to always register the John David Anglin
2008-09-15 2:08 ` [PATCH] Fix dwarf register column to gdb register mapping John David Anglin
2008-09-15 2:24 ` [PATCH] Fix hppa_linux_sigtramp_frame_unwind_cache John David Anglin
2001-09-12 11:28 ` [RFA] patch to add 'maint profile-gdb' command Andrew Cagney
2001-09-12 11:43 ` Andrew Cagney
2001-09-16 17:45 ` [RFA] Version 2 of " Jason Molenda
2001-09-17 22:39 ` Andrew Cagney
2001-09-18 17:52 ` Fernando Nasser
2001-09-18 17:56 ` Andrew Cagney
2001-09-19 7:11 ` Fernando Nasser
2001-09-19 7:28 ` Eli Zaretskii
2001-09-19 9:29 ` Fernando Nasser
2001-09-19 11:30 ` Eli Zaretskii
2001-09-19 11:41 ` Andrew Cagney
2001-09-19 11:53 ` Kevin Buettner
[not found] ` <200109170536.HAA21988@is.elta.co.il>
2001-09-17 15:08 ` Michael Snyder
2001-09-17 22:43 ` Andrew Cagney
2001-09-17 23:59 ` Eli Zaretskii
2001-09-24 13:33 ` Jason Molenda
2001-09-24 14:41 ` Andrew Cagney
2001-09-24 14:58 ` Eli Zaretskii
2001-09-24 15:13 ` Andrew Cagney
2001-09-24 14:53 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080807213349.1ABC04E99@hiauly1.hia.nrc.ca \
--to=dave@hiauly1.hia.nrc.ca \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox