This reproduces the same approach as in GDB to allow us to build
specific files without -Werror.
gdb/gdbserver/ChangeLog:
* Makefile.in (INTERNAL_CFLAGS_BASE): New variable. Extracted
from INTERNAL_CFLAGS.
(INTERNAL_WARN_CFLAGS): New variable.
(INTERNAL_CFLAGS): Adjust, using INTERNAL_WARN_CFLAGS.
snprintf is not available on LynxOS, so I changed the calls to snprintf
to calls to xsnprintf, which should be strictly equivalent.
gdb/gdbserver/ChangeLog:
* utils.c (xsnprintf): Make non-static.
* server.h: Add xsnprintf declaration.
* linux-low.c, nto-low.c, target.c, thread-db.c, tracepoint.c:
replace calls to snprintf by calls to xsnprintf throughout.
On LynxOS, alloca is defined in allocal.h. This fixes one warning that
occurs when building GDBserver for LynxOS.
gdb/gdbserver/ChangeLog:
* configure.ac: Add configure check for alloca.
* configure, config.in: Regenerate.
* server.h: Include alloca.h if it exists.
* gdbreplay.c: Include alloca.h if it exists.
(linux_create_inferior): Check for __ANDROID__ rather than
__SIGRTMIN.
(enqueue_one_deferred_signal): Don't requeue non-RT signals that
are already deferred.
(linux_wait_1): Check for __ANDROID__ rather than __SIGRTMIN.
(linux_resume_one_thread): Don't queue a SIGSTOP if the lwp is
stopped and already has a pending signal to report.
(proceed_one_lwp): : Don't queue a SIGSTOP if the lwp already has
a pending signal to report or is moving out of a jump pad.
(linux_init_signals): Check for __ANDROID__ rather than
__SIGRTMIN.
(WERROR_CFLAGS): New.
(INTERNAL_CFLAGS): Add WERROR_CFLAGS.
* configure.ac: Introduce --enable-werror, which adds -Werror to
the compiler command line. Enabled by default. Disable with
--disable-werror. Add -Wdeclaration-after-statement
Wpointer-arith and -Wformat-nonliteral to warning flags.
* configure: Regenerate.
(WERROR_CFLAGS): New.
(INTERNAL_CFLAGS): Add WERROR_CFLAGS.
* configure.ac: Introduce --enable-werror, which adds -Werror to
the compiler command line. Enabled by default. Disable with
--disable-werror. Add -Wdeclaration-after-statement
Wpointer-arith and -Wformat-nonliteral to warning flags.
* configure: Regenerate.
(gdbchar): New.
(expect): Use gdbchar. Check for error reading from GDB.
Clarify sync error output.
(play): Check for errors writing to GDB.
* linux-low.c (sigchld_handler): Really ignore `write' errors.
* remote-utils.c (getpkt): Check for errors writing to the remote
descriptor.
* server.c (push_event, queue_stop_reply_callback): Assert we're
not pushing a TARGET_WAITKIND_IGNORE event.
(start_inferior, start_inferior, attach_inferior, handle_v_cont)
(myresume, handle_target_event): Set the thread's last_resume_kind
and last_status from the target returned status.
* linux-x86-low.c (update_debug_registers_callback): New.
(i386_dr_low_set_addr): Use it.
(i386_dr_low_get_addr): New.
(i386_dr_low_set_control): Use update_debug_registers_callback.
(i386_dr_low_get_control): New.
(i386_dr_low_get_status): Adjust.
* linux-low.c (linux_stop_lwp): New.
* linux-low.h (linux_stop_lwp): Declare.
* i386-low.c (I386_DR_GET_RW_LEN): Take the dr7 contents as
argument instead of a i386_debug_reg_state.
(I386_DR_WATCH_HIT): Take the dr6 contents as argument instead of
a i386_debug_reg_state.
(i386_insert_aligned_watchpoint): Adjust.
(i386_remove_aligned_watchpoint): Adjust.
(i386_low_stopped_data_address): Read the debug registers from the
inferior instead of from the mirrors.
* i386-low.h (struct i386_debug_reg_state): Extend comment.
(i386_dr_low_get_addr): Declare.
(i386_dr_low_get_control): Declare.
(i386_dr_low_get_status): Change prototype.
* win32-i386-low.c (dr_status_mirror, dr_control_mirror): New globals.
(i386_dr_low_get_addr): New.
(i386_dr_low_get_control): New.
(i386_dr_low_get_status): Adjust prototype. Return
dr_status_mirror.
(i386_initial_stuff): Clear dr_status_mirror and
dr_control_mirror.
(i386_get_thread_context): Adjust.
(i386_set_thread_context): Adjust.
(i386_thread_added): Adjust.
(gdb_wants_all_stopped): Delete.
(linux_wait_1): Don't call them.
* server.c (handle_v_cont): Tag all threads as want-stopped.
(gdb_wants_thread_stopped): Fix comments. Tag the thread that
stopped as "client-wants-stopped".
* common/signals.c (signals): Move the content to signals.def.
Include it. Remove the INDENT comments.
gdb/gdbserver/
* Makefile.in (signals_def): New.
(server_h): Append include/gdb/signals.h and signals_def.
(server.o): Append signals_def.
include/gdb/
* signals.h (enum target_signal): Move the content to signals.def.
Include it.
* signals.def: New file.
This is on GNU/Linux.
GDBserver does not exit properly when the inferior exits, as demonstrated
with any program using the procedure below:
% gdbserver-head :4444 simple_main
Process simple_main created; pid = 25681
Listening on port 4444
Then, in another terminal, start GDB, connect to GDBserver, and run
the program to completion:
% gdb-head simple_main
(gdb) tar rem :4444
(gdb) cont
Continuing.
Program exited normally.
Going back to the terminal where GDBserver is running, we see the following
output:
Child exited with status 0
readchar: Got EOF
Remote side has terminated connection. GDBserver will reopen the connection.
Listening on port 4444
The problem is that we're missing a call to mourn_inferior. As a result,
after we've handled the vCont packet, we fail to notice that there are
no process left to debug (target_running() returns true), and thus try
to continue reading from the remote socket. However, since GDB just
disconnected after having received the "exit with status 0" reply to the
vCont request, the read triggers the EOF exception.
gdb/gdbserver/ChangeLog:
* server.c (handle_v_cont): Call mourn_inferior if process
just exited.
(myresume): Likewise.
I just happened to notice that this function was exclusively used in
server.c, and thus could be made static.
2010-07-06 Joel Brobecker <brobecker@adacore.com>
* server.c (myresume): Make static.
Pedro Alves <pedro@codesourcery.com>
* linux-x86-low.c (always_true): Delete.
(EMIT_ASM, EMIT_ASM32): Use an uncondition asm jmp instead of
trying to fool the compiler with always_true.
* spu-multiarch.c (spu_xfer_partial): Wrap around local store
limit on local store memory accesses.
* spu-linux-nat.c (spu_xfer_partial): Likewise.
* spu-tdep.c (spu_lslr): Remove.
(spu_pointer_to_address): Do not truncate addresses.
(spu_integer_to_address): Likewise.
(spu_overlay_new_objfile): Use SPU_OVERLAY_LMA.
* spu-tdep.h: Add comments.
(SPUADDR_SPU): Respect SPU_OVERLAY_LMA bit.
(SPU_OVERLAY_LMA): Define.
gdbserver/ChangeLog:
* spu-low.c (spu_read_memory): Wrap around local store limit.
(spu_write_memory): Likewise.
testsuite/ChangeLog:
* gdb.arch/spu-ls.exp: New file.
* gdb.arch/spu-ls.c: Likewise.
gdb/
* ser-tcp.c (net_open): Check error return from socket() call by its
equality to -1 not by it being negative.
(net_close): Likewise.
gdb/gdbserver/
* gdbreplay.c (remote_open): Check error return from socket() call by
its equality to -1 not by it being negative.
* remote-utils.c (remote_open): Likewise.
sim/arm/
* communicate.c (MYread_char): Check error return from accept() call
by its equality to -1 not by it being negative.
(MYread_charwait): Likewise.
* main.c (main): Likewise for both socket() and accept() calls.
sim/common/
* dv-sockser.c (dv_sockser_init): Check error return from socket()
call by its equality to -1 not by it being negative.
(connected_p): Likewise for accept() call.
sim/cris/
* dv-rv.c (hw_rv_init_socket): Check error return from socket() call
by its equality to -1 not by it being negative.
(hw_rv_write): Likewise.
(hw_rv_handle_incoming): Likewise.
(hw_rv_poll_once): Likewise.
* rvdummy.c (setupsocket): Likewise.
(main): Likewise for accept() call as returned from setupsocket().
sim/m32c/
* main.c (setup_tcp_console): Check error return from socket() call
by its equality to -1 not by it being negative.
(callback_list): New global.
(append_callback_event, delete_callback_event): New functions.
(process_callback): New function.
(start_event_loop): Call it.
* remote-utils.c (NOT_SCHEDULED): Define.
(readchar_buf, readchar_bufcnt, readchar_bufp): New static globals,
moved out of readchar.
(readchar): Rewrite. Call reschedule before returning.
(reset_readchar): New function.
(remote_close): Call it.
(process_remaining, reschedule): New functions.
* server.h (callback_handler_func): New typedef.
(append_callback_event, delete_callback_event): Declare.
* proc-service.c (ps_pglobal_lookup): Use
thread_db_look_up_one_symbol.
* remote-utils.c (look_up_one_symbol): Add new `may_ask_gdb'
parameter. Use it instead of all_symbols_looked_up.
* server.h (struct process_info) <all_symbols_looked_up>: Delete
field.
(all_symbols_looked_up): Don't declare.
(look_up_one_symbol): Add new `may_ask_gdb' parameter.
* thread-db.c (struct thread_db) <all_symbols_looked_up>: New
field.
(thread_db_look_up_symbols): Adjust call to look_up_one_symbol.
Set all_symbols_looked_up here.
(thread_db_look_up_one_symbol): New.
(thread_db_get_tls_address): Adjust.
(thread_db_load_search, try_thread_db_load_1): Always allocate the
thread_db object on the heap, and tentatively set it in the
process structure.
(thread_db_init): Don't set all_symbols_looked_up here.
* linux-low.h (thread_db_look_up_one_symbol): Declare.
(status_pending_p_callback): Remove redundant statement. Check
for !TARGET_WAITIKIND_IGNORE, instead of
TARGET_WAITKIND_STOPPED.
(handle_tracepoints): Make sure LWP is locked. Adjust.
(linux_wait_for_event_1): Adjust.
(linux_cancel_breakpoints): New.
(unsuspend_one_lwp): New.
(unsuspend_all_lwps): New.
(linux_wait_1): If finishing a step-over, unsuspend all lwps.
(send_sigstop_callback): Change return type to int, add new
`except' parameter and handle it.
(suspend_and_send_sigstop_callback): New.
(stop_all_lwps): Add new `suspend' and `expect' parameters, and
pass them down. If SUSPEND, also increment the lwp's suspend
count.
(linux_resume_one_lwp): Add notice about resuming a suspended LWP.
(need_step_over_p): Don't consider suspended LWPs.
(start_step_over): Adjust.
(proceed_one_lwp): Change return type to int, add new `except'
parameter and handle it.
(unsuspend_and_proceed_one_lwp): New.
(proceed_all_lwps): Use find_inferior instead of
for_each_inferior.
(unstop_all_lwps): Add `unsuspend' parameter. If UNSUSPEND, them
also decrement the suspend count of LWPs. Pass `except' down,
instead of hacking its suspend count.
(linux_pause_all): Add `freeze' parameter. Adjust.
(linux_unpause_all): New.
(linux_target_ops): Install linux_unpause_all.
* server.c (handle_status): Adjust.
* target.h (struct target_ops): New fields `unpause_all' and
`cancel_breakpoints'. Add new parameter to `pause_all'.
(pause_all): Add new `freeze' parameter.
(unpause_all): New.
(cancel_breakpoints): New.
* tracepoint.c (clear_installed_tracepoints): Pause threads, and
cancel breakpoints.
(cmd_qtstart): Pause threads.
(stop_tracing): Pause threads, and cancel breakpoints.
* win32-low.c (win32_target_ops): Adjust.
the inferior right away from here...
(linux_wait_1): ... to here, and adjust to check the thread's
last_resume_kind instead of the lwp's step or stop_expected flags.
(linux_kill): Stop all lwps here. Don't delete the main lwp here.
(linux_detach_one_lwp): Assume the lwp is stopped.
(any_thread_of): Delete.
(linux_detach): Stop all lwps here. Don't blindly delete all
breakpoints.
(delete_lwp_callback): New.
(linux_mourn): Delete all lwps of the process that is gone.
(linux_wait_1): Don't delete the last lwp of the process here.
* mem-break.h (mark_breakpoints_out): Declare.
* mem-break.c (mark_breakpoints_out): New.
(free_all_breakpoints): Use it.
* server.c (handle_target_event): If the process is gone, mark
breakpoints out.
* thread-db.c (struct thread_db) <create_bp>: New field.
(thread_db_enable_reporting): Fix prototype. Store a thread event
breakpoint reference in the thread_db struct.
(thread_db_load_search): Clear the thread_db object.
(try_thread_db_load_1): Ditto.
(switch_to_process): New.
(disable_thread_event_reporting): Use it.
(remove_thread_event_breakpoints): New.
(thread_db_detach, thread_db_mourn): Use it.