]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
(dl_main): Support additional args in --list mode for debugging: look them up as...
authorRoland McGrath <roland@gnu.org>
Wed, 24 Jan 1996 01:34:10 +0000 (01:34 +0000)
committerRoland McGrath <roland@gnu.org>
Wed, 24 Jan 1996 01:34:10 +0000 (01:34 +0000)
csu/initfini.c
elf/rtld.c
misc/getttyent.c

index a3c3b3b7bcc8d650ef9760583b6c76551944e01c..e1bf2b8284b277201899d370947ee1bc7d574ba0 100644 (file)
@@ -59,6 +59,7 @@ cp crti.s-new crtn.s-new");
 
 /* Append the .init prologue to crti.s-new.  */
 asm ("cat >> crti.s-new <<\\EOF.crti.init");
+
 SECTION (".init")
 void
 _init (void)
@@ -69,10 +70,13 @@ _init (void)
      gcrt1.o to reference a symbol which would be defined by some library
      module which has a constructor; but then user code's constructors
      would come first, and not be profiled.  */
-  extern void __gmon_start__ (void) __attribute__ ((weak));
+  extern volatile void __gmon_start__ (void) __attribute__ ((weak));
+  /* This volatile variable is necessary to avoid GCC optimizing
+     out the test.  */
+  register volatile void (*g) (void) = &__gmon_start__;
   weak_symbol (__gmon_start__)
-  if (&__gmon_start__)
-    __gmon_start__ ();
+  if (g)
+    (*g) ();
 
   /* End the here document containing the .init prologue code.
      Then fetch the .section directive just written and append that
index 070febc59f9f1a1e53ffbf97f6b2ff173b3c15d0..aa004f325e240d115f5b95ea523dd92898534acd 100644 (file)
@@ -300,6 +300,8 @@ of this helper program; chances are you did not intend to run this program.\n",
             functions we call below for output may no longer work properly
             after relocation.  */
 
+         int i;
+
          if (! _dl_loaded->l_info[DT_NEEDED])
            _dl_sysdep_message ("\t", "statically linked\n", NULL);
          else
@@ -314,6 +316,25 @@ of this helper program; chances are you did not intend to run this program.\n",
                                    " (0x", bp, ")\n", NULL);
              }
 
+         for (i = 1; i < _dl_argc; ++i)
+           {
+             const Elf32_Sym *ref = NULL;
+             Elf32_Addr loadbase = _dl_lookup_symbol (_dl_argv[i], &ref,
+                                                      _dl_loaded, "argument",
+                                                      1);
+             char buf[20], *bp;
+             buf[sizeof buf - 1] = '\0';
+             bp = _itoa (ref->st_value, &buf[sizeof buf - 1], 16, 0);
+             while (&buf[sizeof buf - 1] - bp < sizeof loadbase * 2)
+               *--bp = '0';
+             _dl_sysdep_message (_dl_argv[i], " found at 0x", bp, NULL);
+             buf[sizeof buf - 1] = '\0';
+             bp = _itoa (loadbase, &buf[sizeof buf - 1], 16, 0);
+             while (&buf[sizeof buf - 1] - bp < sizeof loadbase * 2)
+               *--bp = '0';
+             _dl_sysdep_message (" in object at 0x", bp, "\n", NULL);
+           }
+
          _exit (0);
        }
 
index f9b1e0d8547732d2edb2da88a54382859bc795d7..777108ff709ab7976e1b8e1f1d253fbedd0e531c 100644 (file)
@@ -57,6 +57,8 @@ getttynam(tty)
        return (t);
 }
 
+static char *skip __P((char *)), *value __P((char *));
+
 struct ttyent *
 getttyent()
 {
@@ -65,7 +67,6 @@ getttyent()
        register char *p;
 #define        MAXLINELENGTH   100
        static char line[MAXLINELENGTH];
-       static char *skip(), *value();
 
        if (!tf && !setttyent())
                return (NULL);