/* Append the .init prologue to crti.s-new. */
asm ("cat >> crti.s-new <<\\EOF.crti.init");
+
SECTION (".init")
void
_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
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
" (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);
}
return (t);
}
+static char *skip __P((char *)), *value __P((char *));
+
struct ttyent *
getttyent()
{
register char *p;
#define MAXLINELENGTH 100
static char line[MAXLINELENGTH];
- static char *skip(), *value();
if (!tf && !setttyent())
return (NULL);