This is the mail archive of the gdb-patches@sourceware.cygnus.com mailing list for the GDB project. See the GDB home page for more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Hi! Tried gdb-4.17.85 on i586-pc-linux-gnu (with glibc-2.1) and met following problem that was no with gdb-4.17: Some global symbols are defined in gdb/main.c (eg. gdb_stdout, gdb-stderr, etc). As the result if I'm building all except main.c in object library to use with some IDE that uses gdb for debugging (rhide-1.4.7), I'm getting unresolved references. So I'm suggesting rather ugly hack (moving these definitions to top.c and puting there static constructor that initializes gdb_std*). I agree does not look nice, but I'm sending it only to point to possible problem. I cannot use _initialize_* here as files must be defined before running all _initialize_* procedures. An alternative idea could be duplicating init code and global vrariables in rhide. Andris --- main.c~1 Wed Feb 24 22:55:05 1999 +++ main.c Mon Mar 8 16:38:44 1999 @@ -54,18 +54,6 @@ int display_space; -/* Whether this is the command line version or not */ -int tui_version = 0; - -/* Whether xdb commands will be handled */ -int xdb_commands = 0; - -/* Whether dbx commands will be handled */ -int dbx_commands = 0; - -GDB_FILE *gdb_stdout; -GDB_FILE *gdb_stderr; - /* Whether to enable writing into executable and core files */ extern int write_files; @@ -161,20 +149,6 @@ getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)); current_directory = gdb_dirbuf; - - gdb_file_size = sizeof(GDB_FILE); - - gdb_stdout = (GDB_FILE *)xmalloc (gdb_file_size); - gdb_stdout->ts_streamtype = afile; - gdb_stdout->ts_filestream = stdout; - gdb_stdout->ts_strbuf = NULL; - gdb_stdout->ts_buflen = 0; - - gdb_stderr = (GDB_FILE *)xmalloc (gdb_file_size); - gdb_stderr->ts_streamtype = afile; - gdb_stderr->ts_filestream = stderr; - gdb_stderr->ts_strbuf = NULL; - gdb_stderr->ts_buflen = 0; /* Parse arguments and options. */ { --- top.c~1 Fri Jan 29 11:46:03 1999 +++ top.c Mon Mar 8 16:37:03 1999 @@ -53,6 +53,19 @@ extern void initialize_utils PARAMS ((void)); + +/* Whether this is the command line version or not */ +int tui_version = 0; + +/* Whether xdb commands will be handled */ +int xdb_commands = 0; + +/* Whether dbx commands will be handled */ +int dbx_commands = 0; + +GDB_FILE *gdb_stdout; +GDB_FILE *gdb_stderr; + /* Prototypes for local functions */ static void dont_repeat_command PARAMS ((char *, int)); @@ -467,6 +480,28 @@ SIGJMP_BUF error_return; /* Where to go for return_to_top_level (RETURN_QUIT). */ SIGJMP_BUF quit_return; + + + +void __attribute__((constructor)) +_init_gdb_stdio (void) +{ + int gdb_file_size; + gdb_file_size = sizeof(GDB_FILE); + + gdb_stdout = (GDB_FILE *)xmalloc (gdb_file_size); + gdb_stdout->ts_streamtype = afile; + gdb_stdout->ts_filestream = stdout; + gdb_stdout->ts_strbuf = NULL; + gdb_stdout->ts_buflen = 0; + + gdb_stderr = (GDB_FILE *)xmalloc (gdb_file_size); + gdb_stderr->ts_streamtype = afile; + gdb_stderr->ts_filestream = stderr; + gdb_stderr->ts_strbuf = NULL; + gdb_stderr->ts_buflen = 0; +} + /* Return for reason REASON. This generally gets back to the command loop, but can be caught via catch_errors. */