Browse Source

Trying yet again to check this in.

dejagnu-1.4
Rob Savoye 25 years ago
parent
commit
a23e19e7e8
  1. 4
      lib/libgloss.exp
  2. 34
      testglue.c

4
lib/libgloss.exp

@ -823,10 +823,8 @@ proc build_wrapper { gluefile } {
set flags "";
if [target_info exists is_vxworks] {
set flags "additional_flags=-DVXWORKS";
set result "-Wl,-wrap,exit -Wl,-wrap,main -Wl,-wrap,abort";
} else {
set result "-Wl,-wrap,exit -Wl,-wrap,_exit -Wl,-wrap,main -Wl,-wrap,abort";
}
set result "-Wl,-wrap,exit -Wl,-wrap,main -Wl,-wrap,abort";
}
if [target_info exists wrap_compile_flags] {
lappend flags "additional_flags=[target_info wrap_compile_flags]";

34
testglue.c

@ -12,7 +12,8 @@
because currently GNU ld doesn't deal well with a.out targets and
the -wrap option. When GNU ld is fixed, this should definitely be
removed. Note that we actually wrap __exit, not _exit on a target
that has UNDERSCORES defined. */
that has UNDERSCORES defined. On non-UNDERSCORE targets, we
wrap _exit separately; it's actually a different function. */
#ifdef WRAP_M68K_AOUT
#define REAL_EXIT(code) asm ( "trap %0" : : "i" (0) );
@ -29,9 +30,13 @@
#define ORIG_MAIN _wrap__main
#else
#define REAL_EXIT __real_exit
#ifndef VXWORKS
#define REAL__EXIT __real__exit
#endif
#define REAL_MAIN __real_main
#define REAL_ABORT __real_abort
#define ORIG_EXIT __wrap_exit
#define ORIG__EXIT __wrap__exit
#define ORIG_ABORT __wrap_abort
#define ORIG_MAIN __wrap_main
#endif
@ -42,7 +47,11 @@ extern void REAL_EXIT ();
extern void REAL_ABORT ();
extern int REAL_MAIN (int argc, char **argv, char **envp);
#endif
#ifdef REAL__EXIT
extern void REAL__EXIT ();
#endif
static int done_exit_message = 0;
int ___constval = 1;
#ifdef VXWORKS
@ -81,10 +90,33 @@ ORIG_EXIT (code)
ptr = write_int (code, buf + strlen(buf));
*(ptr++) = '\n';
write (1, buf, ptr-buf);
done_exit_message = 1;
REAL_EXIT (code);
while (___constval);
}
#ifdef ORIG__EXIT
void
ORIG__EXIT (code)
int code;
{
char buf[30];
char *ptr;
/* Since exit may call _exit, we need to avoid a second message. */
if (! done_exit_message)
{
strcpy (buf, "\n*** EXIT code ");
ptr = write_int (code, buf + strlen(buf));
*(ptr++) = '\n';
write (1, buf, ptr-buf);
}
REAL__EXIT (code);
while (___constval);
}
#endif
void
ORIG_ABORT ()
{

Loading…
Cancel
Save