mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-11-16 12:34:43 +00:00
Compare commits
1 Commits
binutils-2
...
users/hjl/
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
58002c6409 |
@@ -17,6 +17,9 @@
|
||||
/* Define to choose default GOT handling scheme */
|
||||
#undef GOT_HANDLING_DEFAULT
|
||||
|
||||
/* Define to 1 if you have the `atexit' function. */
|
||||
#undef HAVE_ATEXIT
|
||||
|
||||
/* Define to 1 if you have the `close' function. */
|
||||
#undef HAVE_CLOSE
|
||||
|
||||
|
||||
12
ld/configure
vendored
12
ld/configure
vendored
@@ -16549,6 +16549,18 @@ fi
|
||||
fi
|
||||
|
||||
|
||||
for ac_func in atexit
|
||||
do :
|
||||
ac_fn_c_check_func "$LINENO" "atexit" "ac_cv_func_atexit"
|
||||
if test "x$ac_cv_func_atexit" = x""yes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_ATEXIT 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
for ac_header in stdlib.h unistd.h
|
||||
do :
|
||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
|
||||
@@ -195,6 +195,8 @@ AC_CHECK_FUNCS(glob mkstemp realpath sbrk setlocale waitpid)
|
||||
AC_CHECK_FUNCS(open lseek close)
|
||||
AC_HEADER_DIRENT
|
||||
|
||||
AC_CHECK_FUNCS(atexit)
|
||||
|
||||
dnl AC_CHECK_HEADERS(sys/mman.h)
|
||||
AC_FUNC_MMAP
|
||||
|
||||
|
||||
31
ld/plugin.c
31
ld/plugin.c
@@ -88,6 +88,8 @@ typedef struct plugin
|
||||
ld_plugin_cleanup_handler cleanup_handler;
|
||||
/* TRUE if the cleanup handlers have been called. */
|
||||
bfd_boolean cleanup_done;
|
||||
/* TRUE if output should be disabled. */
|
||||
bfd_boolean disable_output;
|
||||
} plugin_t;
|
||||
|
||||
typedef struct view_buffer
|
||||
@@ -283,6 +285,11 @@ plugin_opt_plugin_arg (const char *arg)
|
||||
*last_plugin_args_tail_chain_ptr = newarg;
|
||||
last_plugin_args_tail_chain_ptr = &newarg->next;
|
||||
last_plugin->n_args++;
|
||||
|
||||
/* LLVM plugin uses --plugin-opt=disable-output to disable output. */
|
||||
if (strcmp (arg, "disable-output") == 0)
|
||||
last_plugin->disable_output = TRUE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -934,6 +941,24 @@ set_tv_plugin_args (plugin_t *plugin, struct ld_plugin_tv *tv)
|
||||
tv->tv_u.tv_val = 0;
|
||||
}
|
||||
|
||||
#if HAVE_ATEXIT
|
||||
static void
|
||||
plugin_cleanup (void)
|
||||
{
|
||||
plugin_t *curplug = plugins_list;
|
||||
while (curplug)
|
||||
{
|
||||
if (curplug->all_symbols_read_handler
|
||||
&& curplug->disable_output)
|
||||
{
|
||||
unlink_if_ordinary (output_filename);
|
||||
break;
|
||||
}
|
||||
curplug = curplug->next;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Load up and initialise all plugins after argument parsing. */
|
||||
void
|
||||
plugin_load_plugins (void)
|
||||
@@ -994,6 +1019,12 @@ plugin_load_plugins (void)
|
||||
|
||||
register_ld_plugin_object_p (plugin_object_p);
|
||||
|
||||
#if HAVE_ATEXIT
|
||||
/* Since all_symbols_read_hook() in LLVM plugin calls exit() to
|
||||
disable output, we must register plugin_cleanup() with atexit(). */
|
||||
atexit (plugin_cleanup);
|
||||
#endif
|
||||
|
||||
#if HAVE_MMAP && HAVE_GETPAGESIZE
|
||||
plugin_pagesize = getpagesize ();;
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user