diff options
151 files changed, 1439 insertions, 1887 deletions
diff --git a/lldb/Makefile b/lldb/Makefile new file mode 100644 index 00000000000..51b0c0a9b54 --- /dev/null +++ b/lldb/Makefile @@ -0,0 +1,90 @@ +##===- Makefile --------------------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +# If LLDB_LEVEL is not set, then we are the top-level Makefile. Otherwise, we +# are being included from a subdirectory makefile. + +ifndef LLDB_LEVEL + +IS_TOP_LEVEL := 1 +LLDB_LEVEL := . +DIRS := include source lib tools + +PARALLEL_DIRS := +endif + +### +# Common Makefile code, shared by all LLDB Makefiles. + +# Set LLVM source root level. +LEVEL := $(LLDB_LEVEL)/../.. + +# Include LLVM common makefile. +include $(LEVEL)/Makefile.common + +# Set common LLDB build flags. +CPP.Flags += -I$(PROJ_SRC_DIR)/$(LLDB_LEVEL)/include +CPP.Flags += -I$(PROJ_OBJ_DIR)/$(LLDB_LEVEL)/include +CPP.Flags += -I$(PROJ_SRC_DIR)/$(LLDB_LEVEL)/../clang/include +CPP.Flags += -I$(PROJ_OBJ_DIR)/$(LLDB_LEVEL)/../clang/include +CPP.Flags += -I/usr/include/python2.6 +CPP.Flags += -I$(PROJ_SRC_DIR)/$(LLDB_LEVEL)/source +CPP.Flags += -I$(PROJ_SRC_DIR)/$(LLDB_LEVEL)/source/Plugins/Process/Utility +ifeq ($(HOST_OS),Darwin) +CPP.Flags += -F/System/Library/Frameworks -F/System/Library/PrivateFrameworks +endif +ifdef LLDB_VENDOR +CPP.Flags += -DLLDB_VENDOR='"$(LLDB_VENDOR) "' +endif + +# Disable -fstrict-aliasing. Darwin disables it by default (and LLVM doesn't +# work with it enabled with GCC), Clang/llvm-gc don't support it yet, and newer +# GCC's have false positive warnings with it on Linux (which prove a pain to +# fix). For example: +# http://gcc.gnu.org/PR41874 +# http://gcc.gnu.org/PR41838 +# +# We can revisit this when LLVM/Clang support it. +CXX.Flags += -fno-strict-aliasing + +### +# LLDB Top Level specific stuff. + +ifeq ($(IS_TOP_LEVEL),1) + +ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT)) +$(RecursiveTargets):: + $(Verb) if [ ! -f test/Makefile ]; then \ + $(MKDIR) test; \ + $(CP) $(PROJ_SRC_DIR)/test/Makefile test/Makefile; \ + fi +endif + +test:: + @ $(MAKE) -C test + +report:: + @ $(MAKE) -C test report + +clean:: + @ $(MAKE) -C test clean + +tags:: + $(Verb) etags `find . -type f -name '*.h' -or -name '*.cpp' | \ + grep -v /lib/Headers | grep -v /test/` + +cscope.files: + find tools lib include -name '*.cpp' \ + -or -name '*.def' \ + -or -name '*.td' \ + -or -name '*.h' > cscope.files + +.PHONY: test report clean cscope.files + +endif diff --git a/lldb/include/Makefile b/lldb/include/Makefile new file mode 100644 index 00000000000..02acdce1027 --- /dev/null +++ b/lldb/include/Makefile @@ -0,0 +1,13 @@ +##===- include/Makefile ------------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := .. +DIRS := lldb + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/include/lldb/API/SBBreakpoint.h b/lldb/include/lldb/API/SBBreakpoint.h index c2ad910fb97..b34c0bc907f 100644 --- a/lldb/include/lldb/API/SBBreakpoint.h +++ b/lldb/include/lldb/API/SBBreakpoint.h @@ -69,9 +69,9 @@ public: IsEnabled (); void - SetIgnoreCount (int32_t count); + SetIgnoreCount (uint32_t count); - int32_t + uint32_t GetIgnoreCount () const; void diff --git a/lldb/include/lldb/API/SBBreakpointLocation.h b/lldb/include/lldb/API/SBBreakpointLocation.h index 02cc4093d8d..fc866546f6c 100644 --- a/lldb/include/lldb/API/SBBreakpointLocation.h +++ b/lldb/include/lldb/API/SBBreakpointLocation.h @@ -35,11 +35,11 @@ public: bool IsEnabled (); - int32_t + uint32_t GetIgnoreCount (); void - SetIgnoreCount (int32_t n); + SetIgnoreCount (uint32_t n); void SetThreadID (lldb::tid_t sb_thread_id); diff --git a/lldb/include/lldb/Breakpoint/Breakpoint.h b/lldb/include/lldb/Breakpoint/Breakpoint.h index 1f08636b54e..77ad7325c3c 100644 --- a/lldb/include/lldb/Breakpoint/Breakpoint.h +++ b/lldb/include/lldb/Breakpoint/Breakpoint.h @@ -321,14 +321,14 @@ public: /// The number of breakpoint hits to ignore. //------------------------------------------------------------------ void - SetIgnoreCount (int32_t count); + SetIgnoreCount (uint32_t count); //------------------------------------------------------------------ /// Return the current Ignore Count. /// @return /// The number of breakpoint hits to be ignored. //------------------------------------------------------------------ - int32_t + uint32_t GetIgnoreCount () const; //------------------------------------------------------------------ diff --git a/lldb/include/lldb/Breakpoint/BreakpointIDList.h b/lldb/include/lldb/Breakpoint/BreakpointIDList.h index bc88087616d..47531f9f0ca 100644 --- a/lldb/include/lldb/Breakpoint/BreakpointIDList.h +++ b/lldb/include/lldb/Breakpoint/BreakpointIDList.h @@ -37,14 +37,14 @@ public: virtual ~BreakpointIDList (); - int - Size(); + size_t + GetSize(); BreakpointID & - GetBreakpointIDAtIndex (int index); + GetBreakpointIDAtIndex (uint32_t index); bool - RemoveBreakpointIDAtIndex (int index); + RemoveBreakpointIDAtIndex (uint32_t index); void Clear(); @@ -56,16 +56,16 @@ public: AddBreakpointID (const char *bp_id); bool - FindBreakpointID (BreakpointID &bp_id, int *position); + FindBreakpointID (BreakpointID &bp_id, uint32_t *position); bool - FindBreakpointID (const char *bp_id, int *position); + FindBreakpointID (const char *bp_id, uint32_t *position); void - InsertStringArray (const char **string_array, int array_size, CommandReturnObject &result); + InsertStringArray (const char **string_array, uint32_t array_size, CommandReturnObject &result); static bool - StringContainsIDRangeExpression (const char *in_string, int *range_start_len, int *range_end_pos); + StringContainsIDRangeExpression (const char *in_string, uint32_t *range_start_len, uint32_t *range_end_pos); static void FindAndReplaceIDRanges (Args &old_args, Target *target, CommandReturnObject &result, Args &new_args); diff --git a/lldb/include/lldb/Breakpoint/BreakpointLocation.h b/lldb/include/lldb/Breakpoint/BreakpointLocation.h index 1ab667dd938..d11cd103415 100644 --- a/lldb/include/lldb/Breakpoint/BreakpointLocation.h +++ b/lldb/include/lldb/Breakpoint/BreakpointLocation.h @@ -119,7 +119,7 @@ public: /// @return /// The number of breakpoint hits to be ignored. //------------------------------------------------------------------ - int32_t + uint32_t GetIgnoreCount (); //------------------------------------------------------------------ @@ -129,7 +129,7 @@ public: /// The number of breakpoint hits to ignore. //------------------------------------------------------------------ void - SetIgnoreCount (int32_t n); + SetIgnoreCount (uint32_t n); //------------------------------------------------------------------ /// Set the callback action invoked when the breakpoint is hit. diff --git a/lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h b/lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h index 9f0dd0fb2e0..f77a99c8b9b 100644 --- a/lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h +++ b/lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h @@ -53,7 +53,7 @@ public: /// \b true if the breakpoint was in the list. //------------------------------------------------------------------ bool - Remove (lldb::user_id_t break_id, lldb::user_id_t break_loc_id); + Remove (lldb::break_id_t break_id, lldb::break_id_t break_loc_id); //------------------------------------------------------------------ /// Returns a shared pointer to the breakpoint location with id \a @@ -70,7 +70,7 @@ public: /// pointer if the breakpoint doesn't exist. //------------------------------------------------------------------ lldb::BreakpointLocationSP - FindByIDPair (lldb::user_id_t break_id, lldb::user_id_t break_loc_id); + FindByIDPair (lldb::break_id_t break_id, lldb::break_id_t break_loc_id); //------------------------------------------------------------------ /// Returns a shared pointer to the breakpoint location with id \a @@ -87,7 +87,7 @@ public: /// pointer if the breakpoint doesn't exist. //------------------------------------------------------------------ const lldb::BreakpointLocationSP - FindByIDPair (lldb::user_id_t break_id, lldb::user_id_t break_loc_id) const; + FindByIDPair (lldb::break_id_t break_id, lldb::break_id_t break_loc_id) const; //------------------------------------------------------------------ /// Returns a shared pointer to the breakpoint location with index @@ -187,10 +187,10 @@ private: typedef std::vector<lldb::BreakpointLocationSP> collection; collection::iterator - GetIDPairIterator(lldb::user_id_t break_id, lldb::user_id_t break_loc_id); + GetIDPairIterator(lldb::break_id_t break_id, lldb::break_id_t break_loc_id); collection::const_iterator - GetIDPairConstIterator(lldb::user_id_t break_id, lldb::user_id_t break_loc_id) const; + GetIDPairConstIterator(lldb::break_id_t break_id, lldb::break_id_t break_loc_id) const; collection m_break_loc_collection; diff --git a/lldb/include/lldb/Breakpoint/BreakpointLocationList.h b/lldb/include/lldb/Breakpoint/BreakpointLocationList.h index 5c1c8ff5114..4c8ebe9bacf 100644 --- a/lldb/include/lldb/Breakpoint/BreakpointLocationList.h +++ b/lldb/include/lldb/Breakpoint/BreakpointLocationList.h @@ -72,7 +72,7 @@ public: /// pointer if the breakpoint doesn't exist. //------------------------------------------------------------------ lldb::BreakpointLocationSP - FindByID (lldb::user_id_t breakID); + FindByID (lldb::break_id_t breakID); //------------------------------------------------------------------ /// Returns a shared pointer to the breakpoint location with id @@ -86,7 +86,7 @@ public: /// pointer if the breakpoint doesn't exist. //------------------------------------------------------------------ const lldb::BreakpointLocationSP - FindByID (lldb::user_id_t breakID) const; + FindByID (lldb::break_id_t breakID) const; //------------------------------------------------------------------ /// Returns the breakpoint location id to the breakpoint location @@ -98,7 +98,7 @@ public: /// @result /// The ID of the breakpoint location, or LLDB_INVALID_BREAK_ID. //------------------------------------------------------------------ - lldb::user_id_t + lldb::break_id_t FindIDByAddress (Address &addr); //------------------------------------------------------------------ @@ -183,7 +183,7 @@ public: /// \b true if the breakpoint \a breakID was in the list. //------------------------------------------------------------------ bool - Remove (lldb::user_id_t breakID); + Remove (lldb::break_id_t breakID); //------------------------------------------------------------------ /// Enquires of the breakpoint location in this list with ID \a @@ -200,7 +200,7 @@ public: //------------------------------------------------------------------ bool ShouldStop (StoppointCallbackContext *context, - lldb::user_id_t breakID); + lldb::break_id_t breakID); //------------------------------------------------------------------ /// Returns the number of elements in this breakpoint location list. @@ -252,7 +252,7 @@ protected: /// @result /// Returns breakpoint location id. //------------------------------------------------------------------ - virtual lldb::user_id_t + virtual lldb::break_id_t Add (lldb::BreakpointLocationSP& bp_loc_sp); typedef std::vector<lldb::BreakpointLocationSP> collection; @@ -269,10 +269,10 @@ protected: GetNextID(); collection::iterator - GetIDIterator(lldb::user_id_t breakID); + GetIDIterator(lldb::break_id_t breakID); collection::const_iterator - GetIDConstIterator(lldb::user_id_t breakID) const; + GetIDConstIterator(lldb::break_id_t breakID) const; collection m_locations; addr_map m_address_to_location; diff --git a/lldb/include/lldb/Breakpoint/BreakpointOptions.h b/lldb/include/lldb/Breakpoint/BreakpointOptions.h index c6206df5ead..a223f4bc382 100644 --- a/lldb/include/lldb/Breakpoint/BreakpointOptions.h +++ b/lldb/include/lldb/Breakpoint/BreakpointOptions.h @@ -108,14 +108,14 @@ public: SetEnabled (bool enabled); void - SetIgnoreCount (int32_t n); + SetIgnoreCount (uint32_t n); //------------------------------------------------------------------ /// Return the current Ignore Count. /// @return /// The number of breakpoint hits to be ignored. //------------------------------------------------------------------ - int32_t + uint32_t GetIgnoreCount () const; //------------------------------------------------------------------ @@ -216,7 +216,7 @@ private: lldb::BatonSP m_callback_baton_sp; // This is the client data for the callback bool m_callback_is_synchronous; bool m_enabled; - int32_t m_ignore_count; // Number of times to ignore this breakpoint + uint32_t m_ignore_count; // Number of times to ignore this breakpoint std::auto_ptr<ThreadSpec> m_thread_spec_ap; // Thread for which this breakpoint will take }; diff --git a/lldb/include/lldb/Breakpoint/BreakpointSite.h b/lldb/include/lldb/Breakpoint/BreakpointSite.h index 50d8fe50137..6dec29ba933 100644 --- a/lldb/include/lldb/Breakpoint/BreakpointSite.h +++ b/lldb/include/lldb/Breakpoint/BreakpointSite.h @@ -243,8 +243,8 @@ private: /// \a break_loc_id is the Breakpoint Location to remove. //------------------------------------------------------------------ uint32_t - RemoveOwner (lldb::user_id_t break_id, - lldb::user_id_t break_loc_id); + RemoveOwner (lldb::break_id_t break_id, + lldb::break_id_t break_loc_id); BreakpointSite::Type m_type;///< The type of this breakpoint site. uint8_t m_saved_opcode[8]; ///< The saved opcode bytes if this breakpoint site uses trap opcodes. diff --git a/lldb/include/lldb/Breakpoint/BreakpointSiteList.h b/lldb/include/lldb/Breakpoint/BreakpointSiteList.h index bfa8c51e3e8..f22c7c74e40 100644 --- a/lldb/include/lldb/Breakpoint/BreakpointSiteList.h +++ b/lldb/include/lldb/Breakpoint/BreakpointSiteList.h @@ -50,7 +50,7 @@ public: /// @return /// The ID of the BreakpointSite in the list. //------------------------------------------------------------------ - lldb::user_id_t + lldb::break_id_t Add (const lldb::BreakpointSiteSP& bp_site_sp); //------------------------------------------------------------------ @@ -86,7 +86,7 @@ public: /// breakpoint doesn't exist. //------------------------------------------------------------------ lldb::BreakpointSiteSP - FindByID (lldb::user_id_t breakID); + FindByID (lldb::break_id_t breakID); //------------------------------------------------------------------ /// Returns a shared pointer to the breakpoint site with id \a breakID - const version. @@ -99,7 +99,7 @@ public: /// breakpoint doesn't exist. //------------------------------------------------------------------ const lldb::BreakpointSiteSP - FindByID (lldb::user_id_t breakID) const; + FindByID (lldb::break_id_t breakID) const; //------------------------------------------------------------------ /// Returns the breakpoint site id to the breakpoint site at address \a addr. @@ -110,7 +110,7 @@ public: /// @result /// The ID of the breakpoint site, or LLDB_INVALID_BREAK_ID. //------------------------------------------------------------------ - lldb::user_id_t + lldb::break_id_t FindIDByAddress (lldb::addr_t addr); //------------------------------------------------------------------ @@ -149,7 +149,7 @@ public: /// \b true if the breakpoint site \a breakID was in the list. //------------------------------------------------------------------ bool - Remove (lldb::user_id_t breakID); + Remove (lldb::break_id_t breakID); //------------------------------------------------------------------ /// Removes the breakpoint site at address \a addr from this list. @@ -164,7 +164,7 @@ public: RemoveByAddress (lldb::addr_t addr); void - SetEnabledForAll(const bool enable, const lldb::user_id_t except_id = LLDB_INVALID_BREAK_ID); + SetEnabledForAll(const bool enable, const lldb::break_id_t except_id = LLDB_INVALID_BREAK_ID); typedef void (*BreakpointSiteSPMapFunc) (lldb::BreakpointSiteSP &bp, void *baton); @@ -182,7 +182,7 @@ public: /// \b true if we should stop, \b false otherwise. //------------------------------------------------------------------ bool - ShouldStop (StoppointCallbackContext *context, lldb::user_id_t breakID); + ShouldStop (StoppointCallbackContext *context, lldb::break_id_t breakID); //------------------------------------------------------------------ /// Returns the number of elements in the list. @@ -197,10 +197,10 @@ protected: typedef std::map<lldb::addr_t, lldb::BreakpointSiteSP> collection; collection::iterator - GetIDIterator(lldb::user_id_t breakID); + GetIDIterator(lldb::break_id_t breakID); collection::const_iterator - GetIDConstIterator(lldb::user_id_t breakID) const; + GetIDConstIterator(lldb::break_id_t breakID) const; // This function exposes the m_bp_site_list. I use the in Process because there // are places there where you want to iterate over the list, and it is less efficient diff --git a/lldb/include/lldb/Breakpoint/StoppointLocation.h b/lldb/include/lldb/Breakpoint/StoppointLocation.h index 2978fd5ecc6..57a85af753b 100644 --- a/lldb/include/lldb/Breakpoint/StoppointLocation.h +++ b/lldb/include/lldb/Breakpoint/StoppointLocation.h @@ -82,9 +82,9 @@ protected: //------------------------------------------------------------------ // Classes that inherit from StoppointLocation can see and modify these //------------------------------------------------------------------ - lldb::break_id_t m_loc_id; // Break ID - lldb::addr_t m_addr; // The load address of this stop point. The base Stoppoint doesn't - // store a full Address since that's not needed for the breakpoint sites. + lldb::break_id_t m_loc_id; // Break ID + lldb::addr_t m_addr; // The load address of this stop point. The base Stoppoint doesn't + // store a full Address since that's not needed for the breakpoint sites. bool m_hw_preferred; // 1 if this point has been requested to be set using hardware (which may fail due to lack of resources) uint32_t m_hw_index; // The hardware resource index for this breakpoint/watchpoint uint32_t m_byte_size; // The size in bytes of stop location. e.g. the length of the trap opcode for diff --git a/lldb/include/lldb/Breakpoint/WatchpointLocation.h b/lldb/include/lldb/Breakpoint/WatchpointLocation.h index 9bf559d7166..d85a578be8d 100644 --- a/lldb/include/lldb/Breakpoint/WatchpointLocation.h +++ b/lldb/include/lldb/Breakpoint/WatchpointLocation.h @@ -41,8 +41,8 @@ public: bool WatchpointRead () const; bool WatchpointWrite () const; - int32_t GetIgnoreCount () const; - void SetIgnoreCount (int32_t n); + uint32_t GetIgnoreCount () const; + void SetIgnoreCount (uint32_t n); void SetWatchpointType (uint32_t type); bool BreakpointWasHit (StoppointCallbackContext *context); bool SetCallback (WatchpointHitCallback callback, void *callback_baton); @@ -54,7 +54,7 @@ private: m_watch_write:1, // 1 if we stop when the watched data is written to m_watch_was_read:1, // Set to 1 when watchpoint is hit for a read access m_watch_was_written:1; // Set to 1 when watchpoint is hit for a write access - int32_t m_ignore_count; // Number of times to ignore this breakpoint + uint32_t m_ignore_count; // Number of times to ignore this breakpoint WatchpointHitCallback m_callback; void * m_callback_baton; // Callback user data to pass to callback diff --git a/lldb/include/lldb/Core/FileSpec.h b/lldb/include/lldb/Core/FileSpec.h index ca661f2f6ac..22ab298f33c 100644 --- a/lldb/include/lldb/Core/FileSpec.h +++ b/lldb/include/lldb/Core/FileSpec.h @@ -451,7 +451,7 @@ public: /// resolved path doesn't fit in dst_len, dst_len-1 characters will /// be written to \a dst_path, but the actual required length will still be returned. //------------------------------------------------------------------ - static int + static size_t Resolve (const char *src_path, char *dst_path, size_t dst_len); //------------------------------------------------------------------ @@ -475,7 +475,7 @@ public: /// resolved path doesn't fit in dst_len, dst_len-1 characters will /// be written to \a dst_path, but the actual required length will still be returned. //------------------------------------------------------------------ - static int + static size_t ResolveUsername (const char *src_path, char *dst_path, size_t dst_len); diff --git a/lldb/include/lldb/Expression/ClangExpression.h b/lldb/include/lldb/Expression/ClangExpression.h index 67b885dae9c..8bf48959fc8 100644 --- a/lldb/include/lldb/Expression/ClangExpression.h +++ b/lldb/include/lldb/Expression/ClangExpression.h @@ -15,6 +15,7 @@ #include <string> #include <map> #include <memory> +#include <vector> // Other libraries and framework includes // Project includes diff --git a/lldb/include/lldb/Expression/ClangFunction.h b/lldb/include/lldb/Expression/ClangFunction.h index 960667726a3..f76157a9c6d 100644 --- a/lldb/include/lldb/Expression/ClangFunction.h +++ b/lldb/include/lldb/Expression/ClangFunction.h @@ -224,10 +224,10 @@ private: std::string m_wrapper_function_name; std::string m_wrapper_struct_name; + lldb::addr_t m_wrapper_function_addr; + std::list<lldb::addr_t> m_wrapper_args_addrs; const clang::ASTRecordLayout *m_struct_layout; ValueList m_arg_values; - lldb::addr_t m_wrapper_fun_addr; - std::list<lldb::addr_t> m_wrapper_args_addrs; size_t m_value_struct_size; size_t m_return_offset; diff --git a/lldb/include/lldb/Host/Predicate.h b/lldb/include/lldb/Host/Predicate.h index 9c3f10bceae..8fa653021e5 100644 --- a/lldb/include/lldb/Host/Predicate.h +++ b/lldb/include/lldb/Host/Predicate.h @@ -53,9 +53,9 @@ public: /// constructors. //------------------------------------------------------------------ Predicate () : + m_value(), m_mutex(), - m_condition(), - m_value() + m_condition() { } @@ -69,9 +69,9 @@ public: /// The initial value for our T object. //------------------------------------------------------------------ Predicate (T initial_value) : + m_value(initial_value), m_mutex(), - m_condition(), - m_value(initial_value) + m_condition() { } diff --git a/lldb/include/lldb/Interpreter/CommandCompletions.h b/lldb/include/lldb/Interpreter/CommandCompletions.h index 5d3f47cbd95..377e2c9ad58 100644 --- a/lldb/include/lldb/Interpreter/CommandCompletions.h +++ b/lldb/include/lldb/Interpreter/CommandCompletions.h @@ -52,7 +52,7 @@ public: struct CommonCompletionElement { - CommonCompletionTypes type; + uint32_t type; CompletionCallback callback; }; diff --git a/lldb/include/lldb/Makefile b/lldb/include/lldb/Makefile new file mode 100644 index 00000000000..c64359e854c --- /dev/null +++ b/lldb/include/lldb/Makefile @@ -0,0 +1,31 @@ +LEVEL = ../../../.. +DIRS := + +include $(LEVEL)/Makefile.common + +install-local:: + $(Echo) Installing Clang include files + $(Verb) $(MKDIR) $(DESTDIR)$(PROJ_includedir) + $(Verb) if test -d "$(PROJ_SRC_ROOT)/tools/clang/include/clang" ; then \ + cd $(PROJ_SRC_ROOT)/tools/clang/include && \ + for hdr in `find clang -type f '!' '(' -name '*~' \ + -o -name '.#*' -o -name '*.in' -o -name '*.txt' \ + -o -name 'Makefile' -o -name '*.td' -o -name '*.orig' ')' -print \ + | grep -v CVS | grep -v .svn | grep -v .dir` ; do \ + instdir=$(DESTDIR)`dirname "$(PROJ_includedir)/$$hdr"` ; \ + if test \! -d "$$instdir" ; then \ + $(EchoCmd) Making install directory $$instdir ; \ + $(MKDIR) $$instdir ;\ + fi ; \ + $(DataInstall) $$hdr $(DESTDIR)$(PROJ_includedir)/$$hdr ; \ + done ; \ + fi +ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT)) + $(Verb) if test -d "$(PROJ_OBJ_ROOT)/tools/clang/include/clang" ; then \ + cd $(PROJ_OBJ_ROOT)/tools/clang/include && \ + for hdr in `find clang -type f '!' '(' -name 'Makefile' ')' -print \ + | grep -v CVS | grep -v .tmp | grep -v .dir` ; do \ + $(DataInstall) $$hdr $(DESTDIR)$(PROJ_includedir)/$$hdr ; \ + done ; \ + fi +endif diff --git a/lldb/include/lldb/Target/Process.h b/lldb/include/lldb/Target/Process.h index ed827be8ef3..32a7cd1075d 100644 --- a/lldb/include/lldb/Target/Process.h +++ b/lldb/include/lldb/Target/Process.h @@ -466,7 +466,7 @@ public: /// Returns an error object. //------------------------------------------------------------------ virtual Error - WillAttach (lldb::pid_t pid) + WillAttachToProcessWithID (lldb::pid_t pid) { return Error(); } @@ -481,7 +481,7 @@ public: /// Returns an error object. //------------------------------------------------------------------ virtual Error - WillAttach (const char *process_name, bool wait_for_launch) + WillAttachToProcessWithName (const char *process_name, bool wait_for_launch) { return Error(); } @@ -497,7 +497,7 @@ public: /// LLDB_INVALID_PROCESS_ID if attaching fails. //------------------------------------------------------------------ virtual Error - DoAttach (lldb::pid_t pid) = 0; + DoAttachToProcessWithID (lldb::pid_t pid) = 0; //------------------------------------------------------------------ /// Attach to an existing process using a partial process name. @@ -515,7 +515,7 @@ public: /// LLDB_INVALID_PROCESS_ID if attaching fails. //------------------------------------------------------------------ virtual Error - DoAttach (const char *process_name, bool wait_for_launch) + DoAttachToProcessWithName (const char *process_name, bool wait_for_launch) { Error error; error.SetErrorString("attach by name is not supported"); diff --git a/lldb/include/lldb/Target/ThreadPlanShouldStopHere.h b/lldb/include/lldb/Target/ThreadPlanShouldStopHere.h index 66270dfa5a3..02c8cf0baf8 100644 --- a/lldb/include/lldb/Target/ThreadPlanShouldStopHere.h +++ b/lldb/include/lldb/Target/ThreadPlanShouldStopHere.h @@ -38,7 +38,7 @@ public: { eNone = 0, eAvoidInlines = (1 << 0), - eAvoidNoDebug = (1 << 1), + eAvoidNoDebug = (1 << 1) }; //------------------------------------------------------------------ diff --git a/lldb/include/lldb/Target/ThreadSpec.h b/lldb/include/lldb/Target/ThreadSpec.h index 94401ce6eae..016862c01ed 100644 --- a/lldb/include/lldb/Target/ThreadSpec.h +++ b/lldb/include/lldb/Target/ThreadSpec.h @@ -93,7 +93,7 @@ public: bool IndexMatches (uint32_t index) const { - if (m_index == -1 || index == -1) + if (m_index == UINT32_MAX || index == UINT32_MAX) return true; else return index == m_index; diff --git a/lldb/lib/Makefile b/lldb/lib/Makefile new file mode 100644 index 00000000000..3a5709f9ed6 --- /dev/null +++ b/lldb/lib/Makefile @@ -0,0 +1,128 @@ +##===- source/Makefile -------------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LEVEL := ../../.. +LLDB_LEVEL := .. + +LIBRARYNAME = lldb + +#EXPORTED_SYMBOL_FILE = $(PROJ_SRC_DIR)/../resources/lldb-framework-exports +NO_BUILD_ARCHIVE = 1 +LINK_LIBS_IN_SHARED = 1 +SHARED_LIBRARY = 1 + +# Include all archives in liblldb.a files +USEDLIBS = lldbAPI.a \ + lldbBreakpoint.a \ + lldbCommands.a \ + lldbCore.a \ + lldbExpression.a \ + lldbHostMacOSX.a \ + lldbHostPosix.a \ + lldbInitAndLog.a \ + lldbInterpreter.a \ + lldbPluginABIMacOSX_i386.a \ + lldbPluginABISysV_x86_64.a \ + lldbPluginDisassemblerLLVM.a \ + lldbPluginDynamicLoaderMacOSX.a \ + lldbPluginObjectContainerBSDArchive.a \ + lldbPluginObjectContainerUniversalMachO.a \ + lldbPluginObjectFileELF.a \ + lldbPluginObjectFileMachO.a \ + lldbPluginProcessGDBRemote.a \ + lldbPluginSymbolFileDWARF.a \ + lldbPluginSymbolFileSymtab.a \ + lldbPluginSymbolVendorMacOSX.a \ + lldbPluginUtility.a \ + lldbSymbol.a \ + lldbTarget.a \ + lldbUtility.a \ + plugin_llvmc_Base.a \ + plugin_llvmc_Clang.a \ + clangAnalysis.a \ + clangAST.a \ + clangBasic.a \ + clangCodeGen.a \ + clangFrontend.a \ + clangDriver.a \ + clangIndex.a \ + clangLex.a \ + clangRewrite.a \ + clangParse.a \ + clangSema.a \ + CompilerDriver.a \ + EnhancedDisassembly.a \ + LLVMAnalysis.a \ + LLVMArchive.a \ + LLVMARMAsmParser.a \ + LLVMARMAsmPrinter.a \ + LLVMARMCodeGen.a \ + LLVMARMDisassembler.a \ + LLVMARMInfo.a \ + LLVMAsmParser.a \ + LLVMAsmPrinter.a \ + LLVMBitReader.a \ + LLVMBitWriter.a \ + LLVMCodeGen.a \ + LLVMCore.a \ + LLVMExecutionEngine.a \ + LLVMInstCombine.a \ + LLVMInstrumentation.a \ + LLVMipa.a \ + LLVMInterpreter.a \ + LLVMipo.a \ + LLVMJIT.a \ + LLVMLinker.a \ + LLVMMC.a \ + LLVMMCParser.a \ + LLVMScalarOpts.a \ + LLVMSelectionDAG.a \ + LLVMSupport.a \ + LLVMSystem.a \ + LLVMTarget.a \ + LLVMTransformUtils.a \ + LLVMX86AsmParser.a \ + LLVMX86AsmPrinter.a \ + LLVMX86CodeGen.a \ + LLVMX86Disassembler.a \ + LLVMX86Info.a \ + clangChecker.a + +include $(LEVEL)/Makefile.common + +LLVMLibsOptions += -Wl,-all_load -v + +ifeq ($(HOST_OS),Darwin) + # set dylib internal version number to llvmCore submission number + ifdef LLDB_SUBMIT_VERSION + LLVMLibsOptions += -Wl,-current_version \ + -Wl,$(LLDB_SUBMIT_VERSION).$(LLDB_SUBMIT_SUBVERSION) \ + -Wl,-compatibility_version -Wl,1 + endif + # extra options to override libtool defaults + LLVMLibsOptions += -avoid-version + LLVMLibsOptions += -F/System/Library/Frameworks -F/System/Library/PrivateFrameworks + LLVMLibsOptions += -framework Foundation -framework CoreFoundation + LLVMLibsOptions += -framework DebugSymbols -lpython2.6 -lobjc + LLVMLibsOptions += -Wl,-exported_symbols_list -Wl,$(LLDB_LEVEL)/resources/lldb-framework-exports + # Mac OS X 10.4 and earlier tools do not allow a second -install_name on command line + DARWIN_VERS := $(shell echo $(TARGET_TRIPLE) | sed 's/.*darwin\([0-9]*\).*/\1/') + ifneq ($(DARWIN_VERS),8) + LLVMLibsOptions += -no-undefined -Wl,-install_name \ + -Wl,"@executable_path/../lib/lib$(LIBRARYNAME)$(SHLIBEXT)" + endif +endif + +ifeq ($(HOST_OS), Linux) + # Include everything from the .a's into the shared library. + LLVMLibsOptions := -Wl,--whole-archive $(LLDBLibsOptions) \ + -Wl,--no-whole-archive + # Don't allow unresolved symbols. + LLVMLibsOptions += -Wl,--no-undefined +endif diff --git a/lldb/lldb.xcodeproj/project.pbxproj b/lldb/lldb.xcodeproj/project.pbxproj index a535726b68e..ad1b225251c 100644 --- a/lldb/lldb.xcodeproj/project.pbxproj +++ b/lldb/lldb.xcodeproj/project.pbxproj @@ -2773,7 +2773,7 @@ ); PREBINDING = NO; PRODUCT_NAME = LLDB; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/include $(SRCROOT)/source/Host/macosx/cfcpp $(SRCROOT)/llvm/include $(SRCROOT)/llvm/tools/clang/include $(LLVM_BUILD_DIR)/llvm/include $(LLVM_BUILD_DIR)/llvm/tools/clang/include"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/source $(SRCROOT)/source/Plugins/Process/Utility $(SRCROOT)/include $(SRCROOT)/source/Host/macosx/cfcpp $(SRCROOT)/llvm/include $(SRCROOT)/llvm/tools/clang/include $(LLVM_BUILD_DIR)/llvm/include $(LLVM_BUILD_DIR)/llvm/tools/clang/include"; VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; @@ -2826,7 +2826,7 @@ ); PREBINDING = NO; PRODUCT_NAME = LLDB; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/include $(SRCROOT)/source/Host/macosx/cfcpp $(SRCROOT)/llvm/include $(SRCROOT)/llvm/tools/clang/include $(LLVM_BUILD_DIR)/llvm/include $(LLVM_BUILD_DIR)/llvm/tools/clang/include"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/source $(SRCROOT)/source/Plugins/Process/Utility $(SRCROOT)/include $(SRCROOT)/source/Host/macosx/cfcpp $(SRCROOT)/llvm/include $(SRCROOT)/llvm/tools/clang/include $(LLVM_BUILD_DIR)/llvm/include $(LLVM_BUILD_DIR)/llvm/tools/clang/include"; VERSIONING_SYSTEM = "apple-generic"; ZERO_LINK = NO; }; @@ -2935,7 +2935,7 @@ ); PREBINDING = NO; PRODUCT_NAME = LLDB; - USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/include $(SRCROOT)/source/Host/macosx/cfcpp $(SRCROOT)/llvm/include $(SRCROOT)/llvm/tools/clang/include $(LLVM_BUILD_DIR)/llvm/include $(LLVM_BUILD_DIR)/llvm/tools/clang/include"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/source $(SRCROOT)/source/Plugins/Process/Utility $(SRCROOT)/include $(SRCROOT)/source/Host/macosx/cfcpp $(SRCROOT)/llvm/include $(SRCROOT)/llvm/tools/clang/include $(LLVM_BUILD_DIR)/llvm/include $(LLVM_BUILD_DIR)/llvm/tools/clang/include"; VERSIONING_SYSTEM = "apple-generic"; ZERO_LINK = NO; }; diff --git a/lldb/scripts/generate-vers.pl b/lldb/scripts/generate-vers.pl new file mode 100755 index 00000000000..c874c2438e9 --- /dev/null +++ b/lldb/scripts/generate-vers.pl @@ -0,0 +1,46 @@ +#!/usr/bin/perl + +sub usage() +{ + print "Usage: generate-vers.pl /path/toproject.pbxproj"; + exit(0); +} + +(scalar @ARGV == 1) or usage(); + +open $pbxproj, $ARGV[0] or die "Couldn't open ".$ARGV[0]; + +$current_project_version = None; +$product_name = None; + +while ($line = <$pbxproj>) +{ + chomp ($line); + + if ($current_project_version == None && + $line =~ /CURRENT_PROJECT_VERSION = ([0-9]+)/) + { + $current_project_version = $1; + } + + if ($product_name == None && + $line =~ /productName = ([^;]+)/) + { + $product_name = $1; + } +} + +if (!$product_name || !$current_project_version) +{ + print "Couldn't get needed information from the .pbxproj"; + exit(-1); +} + +$uppercase_name = uc $product_name; +$lowercase_name = lc $product_name; + +close $pbxproj; + +$file_string = " const unsigned char ".$uppercase_name."VersionString[] __attribute__ ((used)) = \"@(#)PROGRAM:".$uppercase_name." PROJECT:".$lowercase_name."-".$current_project_version."\" \"\\n\"; const double ".$uppercase_name."VersionNumber __attribute__ ((used)) = (double)".$current_project_version.".;\n"; + +print $file_string; diff --git a/lldb/source/API/Makefile b/lldb/source/API/Makefile new file mode 100644 index 00000000000..75be5372c11 --- /dev/null +++ b/lldb/source/API/Makefile @@ -0,0 +1,14 @@ +##===- source/API/Makefile ---------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../.. +LIBRARYNAME := lldbAPI +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/API/SBBreakpoint.cpp b/lldb/source/API/SBBreakpoint.cpp index f90d7ad37e6..4ab200c1bb1 100644 --- a/lldb/source/API/SBBreakpoint.cpp +++ b/lldb/source/API/SBBreakpoint.cpp @@ -235,13 +235,13 @@ SBBreakpoint::IsEnabled () } void -SBBreakpoint::SetIgnoreCount (int32_t count) +SBBreakpoint::SetIgnoreCount (uint32_t count) { if (m_opaque_sp) m_opaque_sp->SetIgnoreCount (count); } -int32_t +uint32_t SBBreakpoint::GetIgnoreCount () const { if (m_opaque_sp) diff --git a/lldb/source/API/SBBreakpointLocation.cpp b/lldb/source/API/SBBreakpointLocation.cpp index f376f5368b5..948b78f0c29 100644 --- a/lldb/source/API/SBBreakpointLocation.cpp +++ b/lldb/source/API/SBBreakpointLocation.cpp @@ -76,7 +76,7 @@ SBBreakpointLocation::IsEnabled () return false; } -int32_t +uint32_t SBBreakpointLocation::GetIgnoreCount () { if (m_opaque_sp) @@ -86,7 +86,7 @@ SBBreakpointLocation::GetIgnoreCount () } void -SBBreakpointLocation::SetIgnoreCount (int32_t n) +SBBreakpointLocation::SetIgnoreCount (uint32_t n) { if (m_opaque_sp) m_opaque_sp->SetIgnoreCount (n); diff --git a/lldb/source/API/SBFrame.cpp b/lldb/source/API/SBFrame.cpp index cd9b4cd7b4f..b8c2f700fb2 100644 --- a/lldb/source/API/SBFrame.cpp +++ b/lldb/source/API/SBFrame.cpp @@ -187,7 +187,7 @@ SBFrame::LookupVar (const char *var_name) const uint32_t num_variables = variable_list.GetSize(); bool found = false; - for (int i = 0; i < num_variables && !found; ++i) + for (uint32_t i = 0; i < num_variables && !found; ++i) { var_sp = variable_list.GetVariableAtIndex(i); if (var_sp @@ -231,7 +231,7 @@ SBFrame::LookupVarInScope (const char *var_name, const char *scope) const uint32_t num_variables = variable_list.GetSize(); bool found = false; - for (int i = 0; i < num_variables && !found; ++i) + for (uint32_t i = 0; i < num_variables && !found; ++i) { var_sp = variable_list.GetVariableAtIndex(i); if (var_sp @@ -331,6 +331,9 @@ SBFrame::GetVariables (bool arguments, case eValueTypeVariableLocal: add_variable = locals; break; + + default: + break; } if (add_variable) { diff --git a/lldb/source/API/SBTarget.cpp b/lldb/source/API/SBTarget.cpp index ba0ed01f460..86186434aee 100644 --- a/lldb/source/API/SBTarget.cpp +++ b/lldb/source/API/SBTarget.cpp @@ -289,7 +289,7 @@ SBTarget::ListAllBreakpoints () { const BreakpointList &bp_list = m_opaque_sp->GetBreakpointList(); size_t num_bps = bp_list.GetSize(); - for (int i = 0; i < num_bps; ++i) + for (size_t i = 0; i < num_bps; ++i) { SBBreakpoint sb_breakpoint (bp_list.GetBreakpointByIndex (i)); sb_breakpoint.GetDescription (out_file, "full"); diff --git a/lldb/source/API/SBThread.cpp b/lldb/source/API/SBThread.cpp index 24e5484c9cf..ede388d83dd 100644 --- a/lldb/source/API/SBThread.cpp +++ b/lldb/source/API/SBThread.cpp @@ -147,7 +147,10 @@ SBThread::GetStopDescription (char *dst, size_t dst_len) stop_desc = exc_desc; stop_desc_len = sizeof(exc_desc); // Include the NULL byte for size } - break; + break; + + default: + break; } if (stop_desc && stop_desc[0]) @@ -225,7 +228,7 @@ SBThread::DisplayFramesForCurrentContext (FILE *out, { uint32_t num_stack_frames = m_opaque_sp->GetStackFrameCount (); StackFrameSP frame_sp; - int frame_idx = 0; + uint32_t frame_idx = 0; for (frame_idx = first_frame; frame_idx < first_frame + num_frames; ++frame_idx) { diff --git a/lldb/source/Breakpoint/Breakpoint.cpp b/lldb/source/Breakpoint/Breakpoint.cpp index 12dceac7476..e11604ba22e 100644 --- a/lldb/source/Breakpoint/Breakpoint.cpp +++ b/lldb/source/Breakpoint/Breakpoint.cpp @@ -153,12 +153,12 @@ Breakpoint::IsEnabled () } void -Breakpoint::SetIgnoreCount (int32_t n) +Breakpoint::SetIgnoreCount (uint32_t n) { m_options.SetIgnoreCount(n); } -int32_t +uint32_t Breakpoint::GetIgnoreCount () const { return m_options.GetIgnoreCount(); @@ -255,7 +255,7 @@ Breakpoint::ModulesChanged (ModuleList &module_list, bool load) // them after the locations pass. Have to do it this way because // resolving breakpoints will add new locations potentially. - for (int i = 0; i < module_list.GetSize(); i++) + for (size_t i = 0; i < module_list.GetSize(); i++) { bool seen = false; ModuleSP module_sp (module_list.GetModuleAtIndex (i)); @@ -263,9 +263,9 @@ Breakpoint::ModulesChanged (ModuleList &module_list, bool load) if (!m_filter_sp->ModulePasses (module_sp)) continue; - for (int i = 0; i < m_locations.GetSize(); i++) + for (size_t j = 0; j < m_locations.GetSize(); j++) { - BreakpointLocationSP break_loc = m_locations.GetByIndex(i); + BreakpointLocationSP break_loc = m_locations.GetByIndex(j); const Section *section = break_loc->GetAddress().GetSection(); if (section == NULL || section->GetModule() == module) { @@ -300,15 +300,15 @@ Breakpoint::ModulesChanged (ModuleList &module_list, bool load) // the same? Or do we need to do an equality on modules that is an // "equivalence"??? - for (int i = 0; i < module_list.GetSize(); i++) + for (size_t i = 0; i < module_list.GetSize(); i++) { ModuleSP module_sp (module_list.GetModuleAtIndex (i)); if (!m_filter_sp->ModulePasses (module_sp)) continue; - for (int i = 0; i < m_locations.GetSize(); i++) + for (size_t j = 0; j < m_locations.GetSize(); j++) { - BreakpointLocationSP break_loc = m_locations.GetByIndex(i); + BreakpointLocationSP break_loc = m_locations.GetByIndex(j); const Section *section = break_loc->GetAddress().GetSection(); if (section) { @@ -353,8 +353,8 @@ Breakpoint::GetDescription (Stream *s, lldb::DescriptionLevel level, bool show_l GetResolverDescription (s); GetFilterDescription (s); - const uint32_t num_locations = GetNumLocations (); - const uint32_t num_resolved_locations = GetNumResolvedLocations (); + const size_t num_locations = GetNumLocations (); + const size_t num_resolved_locations = GetNumResolvedLocations (); switch (level) { @@ -362,9 +362,9 @@ Breakpoint::GetDescription (Stream *s, lldb::DescriptionLevel level, bool show_l case lldb::eDescriptionLevelFull: if (num_locations > 0) { - s->Printf(", locations = %u", num_locations); + s->Printf(", locations = %zu", num_locations); if (num_resolved_locations > 0) - s->Printf(", resolved = %u", num_resolved_locations); + s->Printf(", resolved = %zu", num_resolved_locations); } else { @@ -387,12 +387,15 @@ Breakpoint::GetDescription (Stream *s, lldb::DescriptionLevel level, bool show_l s->Indent(); GetOptions()->GetDescription(s, level); break; + + default: + break; } if (show_locations) { s->IndentMore(); - for (int i = 0; i < GetNumLocations(); ++i) + for (size_t i = 0; i < num_locations; ++i) { BreakpointLocation *loc = GetLocationAtIndex(i).get(); loc->GetDescription(s, level); diff --git a/lldb/source/Breakpoint/BreakpointIDList.cpp b/lldb/source/Breakpoint/BreakpointIDList.cpp index 998afbf6ccb..949bbbed74e 100644 --- a/lldb/source/Breakpoint/BreakpointIDList.cpp +++ b/lldb/source/Breakpoint/BreakpointIDList.cpp @@ -31,14 +31,14 @@ BreakpointIDList::~BreakpointIDList () { } -int -BreakpointIDList::Size() +size_t +BreakpointIDList::GetSize() { return m_breakpoint_ids.size(); } BreakpointID & -BreakpointIDList::GetBreakpointIDAtIndex (int index) +BreakpointIDList::GetBreakpointIDAtIndex (uint32_t index) { if (index < m_breakpoint_ids.size()) return m_breakpoint_ids[index]; @@ -47,23 +47,13 @@ BreakpointIDList::GetBreakpointIDAtIndex (int index) } bool -BreakpointIDList::RemoveBreakpointIDAtIndex (int index) +BreakpointIDList::RemoveBreakpointIDAtIndex (uint32_t index) { - bool success = false; - if (index < m_breakpoint_ids.size()) - { - BreakpointIDArray::iterator pos; - int i; + if (index >= m_breakpoint_ids.size()) + return false; - for (pos = m_breakpoint_ids.begin(), i = 0; i != index && pos != m_breakpoint_ids.end(); ++pos, ++i); - assert (i == index); - if (pos != m_breakpoint_ids.end()) - { - m_breakpoint_ids.erase (pos); - success = true; - } - } - return success; + m_breakpoint_ids.erase (m_breakpoint_ids.begin() + index); + return true; } void @@ -99,12 +89,12 @@ BreakpointIDList::AddBreakpointID (const char *bp_id_str) } bool -BreakpointIDList::FindBreakpointID (BreakpointID &bp_id, int *position) +BreakpointIDList::FindBreakpointID (BreakpointID &bp_id, uint32_t *position) { bool success = false; BreakpointIDArray::iterator tmp_pos; - for (int i = 0; i < m_breakpoint_ids.size(); ++i) + for (size_t i = 0; i < m_breakpoint_ids.size(); ++i) { BreakpointID tmp_id = m_breakpoint_ids[i]; if (tmp_id.GetBreakpointID() == bp_id.GetBreakpointID() @@ -120,7 +110,7 @@ BreakpointIDList::FindBreakpointID (BreakpointID &bp_id, int *position) } bool -BreakpointIDList::FindBreakpointID (const char *bp_id_str, int *position) +BreakpointIDList::FindBreakpointID (const char *bp_id_str, uint32_t *position) { BreakpointID temp_bp_id; break_id_t bp_id; @@ -136,12 +126,12 @@ BreakpointIDList::FindBreakpointID (const char *bp_id_str, int *position) } void -BreakpointIDList::InsertStringArray (const char **string_array, int array_size, CommandReturnObject &result) +BreakpointIDList::InsertStringArray (const char **string_array, uint32_t array_size, CommandReturnObject &result) { if (string_array == NULL) return; - for (int i = 0; i < array_size; ++i) + for (uint32_t i = 0; i < array_size; ++i) { break_id_t bp_id; break_id_t loc_id; @@ -176,24 +166,23 @@ void BreakpointIDList::FindAndReplaceIDRanges (Args &old_args, Target *target, CommandReturnObject &result, Args &new_args) { - char *range_start; + std::string range_start; const char *range_end; const char *current_arg; - int num_old_args = old_args.GetArgumentCount(); + const size_t num_old_args = old_args.GetArgumentCount(); - for (int i = 0; i < num_old_args; ++i) + for (size_t i = 0; i < num_old_args; ++i) { bool is_range = false; current_arg = old_args.GetArgumentAtIndex (i); - int range_start_len = 0; - int range_end_pos = 0; + uint32_t range_start_len = 0; + uint32_t range_end_pos = 0; if (BreakpointIDList::StringContainsIDRangeExpression (current_arg, &range_start_len, &range_end_pos)) { is_range = true; range_start = (char *) malloc (range_start_len + 1); - strncpy (range_start, current_arg, range_start_len); - range_start[range_start_len] = '\0'; + range_start.assign (current_arg, range_start_len); range_end = current_arg + range_end_pos; } else if ((i + 2 < num_old_args) @@ -201,7 +190,7 @@ BreakpointIDList::FindAndReplaceIDRanges (Args &old_args, Target *target, Comman && BreakpointID::IsValidIDExpression (current_arg) && BreakpointID::IsValidIDExpression (old_args.GetArgumentAtIndex (i+2))) { - range_start = (char *) current_arg; + range_start.assign (current_arg); range_end = old_args.GetArgumentAtIndex (i+2); is_range = true; i = i+2; @@ -214,14 +203,14 @@ BreakpointIDList::FindAndReplaceIDRanges (Args &old_args, Target *target, Comman break_id_t start_loc_id; break_id_t end_loc_id; - BreakpointID::ParseCanonicalReference (range_start, &start_bp_id, &start_loc_id); + BreakpointID::ParseCanonicalReference (range_start.c_str(), &start_bp_id, &start_loc_id); BreakpointID::ParseCanonicalReference (range_end, &end_bp_id, &end_loc_id); if ((start_bp_id == LLDB_INVALID_BREAK_ID) || (! target->GetBreakpointByID (start_bp_id))) { new_args.Clear(); - result.AppendErrorWithFormat ("'%s' is not a valid breakpoint ID.\n", range_start); + result.AppendErrorWithFormat ("'%s' is not a valid breakpoint ID.\n", range_start.c_str()); result.SetStatus (eReturnStatusFailed); return; } @@ -239,8 +228,8 @@ BreakpointIDList::FindAndReplaceIDRanges (Args &old_args, Target *target, Comman // target and find all the breakpoints that fit into this range, and add them to new_args. const BreakpointList& breakpoints = target->GetBreakpointList(); - size_t num_breakpoints = breakpoints.GetSize(); - for (int j = 0; j < num_breakpoints; ++j) + const size_t num_breakpoints = breakpoints.GetSize(); + for (size_t j = 0; j < num_breakpoints; ++j) { Breakpoint *breakpoint = breakpoints.GetBreakpointByIndex (j).get(); break_id_t cur_bp_id = breakpoint->GetID(); @@ -248,11 +237,11 @@ BreakpointIDList::FindAndReplaceIDRanges (Args &old_args, Target *target, Comman if ((cur_bp_id < start_bp_id) || (cur_bp_id > end_bp_id)) continue; - size_t num_locations = breakpoint->GetNumLocations(); + const size_t num_locations = breakpoint->GetNumLocations(); if ((cur_bp_id == start_bp_id) && (start_loc_id != LLDB_INVALID_BREAK_ID)) { - for (int k = 0; k < num_locations; ++k) + for (size_t k = 0; k < num_locations; ++k) { BreakpointLocation * bp_loc = breakpoint->GetLocationAtIndex(k).get(); if (bp_loc->GetID() >= start_loc_id) @@ -265,7 +254,7 @@ BreakpointIDList::FindAndReplaceIDRanges (Args &old_args, Target *target, Comman } else if ((cur_bp_id == end_bp_id) && (end_loc_id != LLDB_INVALID_BREAK_ID)) { - for (int k = 0; k < num_locations; ++k) + for (size_t k = 0; k < num_locations; ++k) { BreakpointLocation * bp_loc = breakpoint->GetLocationAtIndex(k).get(); if (bp_loc->GetID() <= end_loc_id) @@ -294,19 +283,14 @@ BreakpointIDList::FindAndReplaceIDRanges (Args &old_args, Target *target, Comman return; } -//bool -//BreakpointIDList::StringContainsIDRangeExpression (const char *in_string, const char **range_start, -// const **range_end) bool -BreakpointIDList::StringContainsIDRangeExpression (const char *in_string, int *range_start_len, int *range_end_pos) +BreakpointIDList::StringContainsIDRangeExpression (const char *in_string, uint32_t *range_start_len, uint32_t *range_end_pos) { bool is_range_expression = false; std::string arg_str = in_string; std::string::size_type idx; std::string::size_type start_pos = 0; - //*range_start = NULL; - //*range_end = NULL; *range_start_len = 0; *range_end_pos = 0; diff --git a/lldb/source/Breakpoint/BreakpointLocation.cpp b/lldb/source/Breakpoint/BreakpointLocation.cpp index dfaa4eba252..46ed6dcebe1 100644 --- a/lldb/source/Breakpoint/BreakpointLocation.cpp +++ b/lldb/source/Breakpoint/BreakpointLocation.cpp @@ -137,14 +137,14 @@ BreakpointLocation::ClearCallback () GetLocationOptions()->ClearCallback(); } -int32_t +uint32_t BreakpointLocation::GetIgnoreCount () { return GetOptionsNoCreate()->GetIgnoreCount(); } void -BreakpointLocation::SetIgnoreCount (int32_t n) +BreakpointLocation::SetIgnoreCount (uint32_t n) { GetLocationOptions()->SetIgnoreCount(n); } diff --git a/lldb/source/Breakpoint/BreakpointLocationCollection.cpp b/lldb/source/Breakpoint/BreakpointLocationCollection.cpp index 464d38f1d78..af3f8e54be7 100644 --- a/lldb/source/Breakpoint/BreakpointLocationCollection.cpp +++ b/lldb/source/Breakpoint/BreakpointLocationCollection.cpp @@ -46,7 +46,7 @@ BreakpointLocationCollection::Add(const BreakpointLocationSP &bp_loc) } bool -BreakpointLocationCollection::Remove (lldb::user_id_t bp_id, lldb::user_id_t bp_loc_id) +BreakpointLocationCollection::Remove (lldb::break_id_t bp_id, lldb::break_id_t bp_loc_id) { collection::iterator pos = GetIDPairIterator(bp_id, bp_loc_id); // Predicate if (pos != m_break_loc_collection.end()) @@ -61,7 +61,7 @@ BreakpointLocationCollection::Remove (lldb::user_id_t bp_id, lldb::user_id_t bp_ class BreakpointIDPairMatches { public: - BreakpointIDPairMatches (lldb::user_id_t break_id, lldb::user_id_t break_loc_id) : + BreakpointIDPairMatches (lldb::break_id_t break_id, lldb::break_id_t break_loc_id) : m_break_id(break_id), m_break_loc_id (break_loc_id) { @@ -74,26 +74,26 @@ public: } private: - const lldb::user_id_t m_break_id; - const lldb::user_id_t m_break_loc_id; + const lldb::break_id_t m_break_id; + const lldb::break_id_t m_break_loc_id; }; BreakpointLocationCollection::collection::iterator -BreakpointLocationCollection::GetIDPairIterator (lldb::user_id_t break_id, lldb::user_id_t break_loc_id) +BreakpointLocationCollection::GetIDPairIterator (lldb::break_id_t break_id, lldb::break_id_t break_loc_id) { return std::find_if(m_break_loc_collection.begin(), m_break_loc_collection.end(), // Search full range BreakpointIDPairMatches(break_id, break_loc_id)); // Predicate } BreakpointLocationCollection::collection::const_iterator -BreakpointLocationCollection::GetIDPairConstIterator (lldb::user_id_t break_id, lldb::user_id_t break_loc_id) const +BreakpointLocationCollection::GetIDPairConstIterator (lldb::break_id_t break_id, lldb::break_id_t break_loc_id) const { return std::find_if(m_break_loc_collection.begin(), m_break_loc_collection.end(), // Search full range BreakpointIDPairMatches(break_id, break_loc_id)); // Predicate } BreakpointLocationSP -BreakpointLocationCollection::FindByIDPair (lldb::user_id_t break_id, lldb::user_id_t break_loc_id) +BreakpointLocationCollection::FindByIDPair (lldb::break_id_t break_id, lldb::break_id_t break_loc_id) { BreakpointLocationSP stop_sp; collection::iterator pos = GetIDPairIterator(break_id, break_loc_id); @@ -104,7 +104,7 @@ BreakpointLocationCollection::FindByIDPair (lldb::user_id_t break_id, lldb::user } const BreakpointLocationSP -BreakpointLocationCollection::FindByIDPair (lldb::user_id_t break_id, lldb::user_id_t break_loc_id) const +BreakpointLocationCollection::FindByIDPair (lldb::break_id_t break_id, lldb::break_id_t break_loc_id) const { BreakpointLocationSP stop_sp; collection::const_iterator pos = GetIDPairConstIterator(break_id, break_loc_id); @@ -118,7 +118,7 @@ BreakpointLocationSP BreakpointLocationCollection::GetByIndex (uint32_t i) { BreakpointLocationSP stop_sp; - if (i >= 0 && i < m_break_loc_collection.size()) + if (i < m_break_loc_collection.size()) stop_sp = m_break_loc_collection[i]; return stop_sp; @@ -128,7 +128,7 @@ const BreakpointLocationSP BreakpointLocationCollection::GetByIndex (uint32_t i) const { BreakpointLocationSP stop_sp; - if (i >= 0 && i < m_break_loc_collection.size()) + if (i < m_break_loc_collection.size()) stop_sp = m_break_loc_collection[i]; return stop_sp; @@ -139,7 +139,8 @@ BreakpointLocationCollection::ShouldStop (StoppointCallbackContext *context) { bool shouldStop = false; - for (int i = 0; i < GetSize(); i++) { + const size_t count = GetSize(); + for (size_t i = 0; i < count; i++) { bool one_result = GetByIndex(i)->ShouldStop(context); if (one_result) shouldStop = true; diff --git a/lldb/source/Breakpoint/BreakpointLocationList.cpp b/lldb/source/Breakpoint/BreakpointLocationList.cpp index d86a8cf4c47..6a6ac50cb60 100644 --- a/lldb/source/Breakpoint/BreakpointLocationList.cpp +++ b/lldb/source/Breakpoint/BreakpointLocationList.cpp @@ -32,7 +32,7 @@ BreakpointLocationList::~BreakpointLocationList() { } -lldb::user_id_t +lldb::break_id_t BreakpointLocationList::Add (BreakpointLocationSP &bp_loc_sp) { if (bp_loc_sp) @@ -46,7 +46,7 @@ BreakpointLocationList::Add (BreakpointLocationSP &bp_loc_sp) } bool -BreakpointLocationList::ShouldStop (StoppointCallbackContext *context, lldb::user_id_t break_id) +BreakpointLocationList::ShouldStop (StoppointCallbackContext *context, lldb::break_id_t break_id) { BreakpointLocationSP bp = FindByID (break_id); if (bp) @@ -61,7 +61,7 @@ BreakpointLocationList::ShouldStop (StoppointCallbackContext *context, lldb::use return true; } -lldb::user_id_t +lldb::break_id_t BreakpointLocationList::FindIDByAddress (Address &addr) { BreakpointLocationSP bp_loc_sp = FindByAddress (addr); @@ -73,7 +73,7 @@ BreakpointLocationList::FindIDByAddress (Address &addr) } bool -BreakpointLocationList::Remove (lldb::user_id_t break_id) +BreakpointLocationList::Remove (lldb::break_id_t break_id) { Mutex::Locker locker (m_mutex); collection::iterator pos = GetIDIterator(break_id); // Predicate @@ -90,7 +90,7 @@ BreakpointLocationList::Remove (lldb::user_id_t break_id) class BreakpointLocationIDMatches { public: - BreakpointLocationIDMatches (lldb::user_id_t break_id) : + BreakpointLocationIDMatches (lldb::break_id_t break_id) : m_break_id(break_id) { } @@ -101,7 +101,7 @@ public: } private: - const lldb::user_id_t m_break_id; + const lldb::break_id_t m_break_id; }; class BreakpointLocationAddressMatches @@ -122,7 +122,7 @@ private: }; BreakpointLocationList::collection::iterator -BreakpointLocationList::GetIDIterator (lldb::user_id_t break_id) +BreakpointLocationList::GetIDIterator (lldb::break_id_t break_id) { Mutex::Locker locker (m_mutex); return std::find_if (m_locations.begin(), @@ -131,7 +131,7 @@ BreakpointLocationList::GetIDIterator (lldb::user_id_t break_id) } BreakpointLocationList::collection::const_iterator -BreakpointLocationList::GetIDConstIterator (lldb::user_id_t break_id) const +BreakpointLocationList::GetIDConstIterator (lldb::break_id_t break_id) const { Mutex::Locker locker (m_mutex); return std::find_if (m_locations.begin(), @@ -140,7 +140,7 @@ BreakpointLocationList::GetIDConstIterator (lldb::user_id_t break_id) const } BreakpointLocationSP -BreakpointLocationList::FindByID (lldb::user_id_t break_id) +BreakpointLocationList::FindByID (lldb::break_id_t break_id) { Mutex::Locker locker (m_mutex); BreakpointLocationSP stop_sp; @@ -152,7 +152,7 @@ BreakpointLocationList::FindByID (lldb::user_id_t break_id) } const BreakpointLocationSP -BreakpointLocationList::FindByID (lldb::user_id_t break_id) const +BreakpointLocationList::FindByID (lldb::break_id_t break_id) const { Mutex::Locker locker (m_mutex); BreakpointLocationSP stop_sp; @@ -192,13 +192,6 @@ BreakpointLocationList::FindInModule (Module *module, return bp_loc_list.GetSize() - orig_size; } - -static int -FindLocationByAddress (Address *addr_ptr, const BreakpointLocationSP *bp_loc_sp_ptr) -{ - return Address::CompareModulePointerAndOffset(*addr_ptr, (*bp_loc_sp_ptr)->GetAddress()); -} - const BreakpointLocationSP BreakpointLocationList::FindByAddress (Address &addr) const { @@ -234,7 +227,7 @@ BreakpointLocationList::GetByIndex (uint32_t i) { Mutex::Locker locker (m_mutex); BreakpointLocationSP stop_sp; - if (i >= 0 && i < m_locations.size()) + if (i < m_locations.size()) stop_sp = m_locations[i]; return stop_sp; @@ -245,7 +238,7 @@ BreakpointLocationList::GetByIndex (uint32_t i) const { Mutex::Locker locker (m_mutex); BreakpointLocationSP stop_sp; - if (i >= 0 && i < m_locations.size()) + if (i < m_locations.size()) stop_sp = m_locations[i]; return stop_sp; diff --git a/lldb/source/Breakpoint/BreakpointOptions.cpp b/lldb/source/Breakpoint/BreakpointOptions.cpp index aa89c442bea..9054f3b89a6 100644 --- a/lldb/source/Breakpoint/BreakpointOptions.cpp +++ b/lldb/source/Breakpoint/BreakpointOptions.cpp @@ -32,8 +32,8 @@ BreakpointOptions::NullCallback (void *baton, StoppointCallbackContext *context, //---------------------------------------------------------------------- BreakpointOptions::BreakpointOptions() : m_callback (BreakpointOptions::NullCallback), - m_callback_is_synchronous (false), m_callback_baton_sp (), + m_callback_is_synchronous (false), m_enabled (true), m_ignore_count (0), m_thread_spec_ap (NULL) @@ -160,14 +160,14 @@ BreakpointOptions::SetEnabled (bool enabled) m_enabled = enabled; } -int32_t +uint32_t BreakpointOptions::GetIgnoreCount () const { return m_ignore_count; } void -BreakpointOptions::SetIgnoreCount (int32_t n) +BreakpointOptions::SetIgnoreCount (uint32_t n) { m_ignore_count = n; } diff --git a/lldb/source/Breakpoint/BreakpointResolverFileLine.cpp b/lldb/source/Breakpoint/BreakpointResolverFileLine.cpp index da015dc8191..cb620f9a853 100644 --- a/lldb/source/Breakpoint/BreakpointResolverFileLine.cpp +++ b/lldb/source/Breakpoint/BreakpointResolverFileLine.cpp @@ -59,7 +59,7 @@ BreakpointResolverFileLine::SearchCallback Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS); sc_list_size = cu->ResolveSymbolContext (m_file_spec, m_line_number, m_inlines, false, eSymbolContextEverything, sc_list); - for (int i = 0; i < sc_list_size; i++) + for (uint32_t i = 0; i < sc_list_size; i++) { SymbolContext sc; if (sc_list.GetContextAtIndex(i, sc)) diff --git a/lldb/source/Breakpoint/BreakpointSite.cpp b/lldb/source/Breakpoint/BreakpointSite.cpp index d9397fcb412..082a9379a90 100644 --- a/lldb/source/Breakpoint/BreakpointSite.cpp +++ b/lldb/source/Breakpoint/BreakpointSite.cpp @@ -40,7 +40,8 @@ BreakpointSite::BreakpointSite BreakpointSite::~BreakpointSite() { BreakpointLocationSP bp_loc_sp; - for (int i = 0; i < m_owners.GetSize(); i++) + const size_t owner_count = m_owners.GetSize(); + for (size_t i = 0; i < owner_count; i++) { m_owners.GetByIndex(i)->ClearBreakpointSite(); } @@ -66,7 +67,8 @@ BreakpointSite::ShouldStop (StoppointCallbackContext *context) bool BreakpointSite::IsBreakpointAtThisSite (lldb::break_id_t bp_id) { - for (int i = 0; i < m_owners.GetSize(); i++) + const size_t owner_count = m_owners.GetSize(); + for (size_t i = 0; i < owner_count; i++) { if (m_owners.GetByIndex(i)->GetBreakpoint().GetID() == bp_id) return true; @@ -158,7 +160,7 @@ BreakpointSite::AddOwner (BreakpointLocationSP &owner) } uint32_t -BreakpointSite::RemoveOwner (lldb::user_id_t break_id, lldb::user_id_t break_loc_id) +BreakpointSite::RemoveOwner (lldb::break_id_t break_id, lldb::break_id_t break_loc_id) { m_owners.Remove(break_id, break_loc_id); return m_owners.GetSize(); diff --git a/lldb/source/Breakpoint/BreakpointSiteList.cpp b/lldb/source/Breakpoint/BreakpointSiteList.cpp index 919ec452617..9a5ee92f37b 100644 --- a/lldb/source/Breakpoint/BreakpointSiteList.cpp +++ b/lldb/source/Breakpoint/BreakpointSiteList.cpp @@ -31,7 +31,7 @@ BreakpointSiteList::~BreakpointSiteList() // Add breakpoint site to the list. However, if the element already exists in the // list, then we don't add it, and return LLDB_INVALID_BREAK_ID. -lldb::user_id_t +lldb::break_id_t BreakpointSiteList::Add(const BreakpointSiteSP &bp) { lldb::addr_t bp_site_load_addr = bp->GetLoadAddress(); @@ -49,7 +49,7 @@ BreakpointSiteList::Add(const BreakpointSiteSP &bp) } bool -BreakpointSiteList::ShouldStop (StoppointCallbackContext *context, lldb::user_id_t break_id) +BreakpointSiteList::ShouldStop (StoppointCallbackContext *context, lldb::break_id_t break_id) { BreakpointSiteSP bp = FindByID (break_id); if (bp) @@ -63,7 +63,7 @@ BreakpointSiteList::ShouldStop (StoppointCallbackContext *context, lldb::user_id // doesn't exist. return true; } -lldb::user_id_t +lldb::break_id_t BreakpointSiteList::FindIDByAddress (lldb::addr_t addr) { BreakpointSiteSP bp = FindByAddress (addr); @@ -77,7 +77,7 @@ BreakpointSiteList::FindIDByAddress (lldb::addr_t addr) } bool -BreakpointSiteList::Remove (lldb::user_id_t break_id) +BreakpointSiteList::Remove (lldb::break_id_t break_id) { collection::iterator pos = GetIDIterator(break_id); // Predicate if (pos != m_bp_site_list.end()) @@ -103,7 +103,7 @@ BreakpointSiteList::RemoveByAddress (lldb::addr_t address) class BreakpointSiteIDMatches { public: - BreakpointSiteIDMatches (lldb::user_id_t break_id) : + BreakpointSiteIDMatches (lldb::break_id_t break_id) : m_break_id(break_id) { } @@ -114,25 +114,25 @@ public: } private: - const lldb::user_id_t m_break_id; + const lldb::break_id_t m_break_id; }; BreakpointSiteList::collection::iterator -BreakpointSiteList::GetIDIterator (lldb::user_id_t break_id) +BreakpointSiteList::GetIDIterator (lldb::break_id_t break_id) { return std::find_if(m_bp_site_list.begin(), m_bp_site_list.end(), // Search full range BreakpointSiteIDMatches(break_id)); // Predicate } BreakpointSiteList::collection::const_iterator -BreakpointSiteList::GetIDConstIterator (lldb::user_id_t break_id) const +BreakpointSiteList::GetIDConstIterator (lldb::break_id_t break_id) const { return std::find_if(m_bp_site_list.begin(), m_bp_site_list.end(), // Search full range BreakpointSiteIDMatches(break_id)); // Predicate } BreakpointSiteSP -BreakpointSiteList::FindByID (lldb::user_id_t break_id) +BreakpointSiteList::FindByID (lldb::break_id_t break_id) { BreakpointSiteSP stop_sp; collection::iterator pos = GetIDIterator(break_id); @@ -143,7 +143,7 @@ BreakpointSiteList::FindByID (lldb::user_id_t break_id) } const BreakpointSiteSP -BreakpointSiteList::FindByID (lldb::user_id_t break_id) const +BreakpointSiteList::FindByID (lldb::break_id_t break_id) const { BreakpointSiteSP stop_sp; collection::const_iterator pos = GetIDConstIterator(break_id); @@ -210,7 +210,7 @@ BreakpointSiteList::GetByIndex (uint32_t i) const } void -BreakpointSiteList::SetEnabledForAll (const bool enabled, const lldb::user_id_t except_id) +BreakpointSiteList::SetEnabledForAll (const bool enabled, const lldb::break_id_t except_id) { collection::iterator end = m_bp_site_list.end(); collection::iterator pos; diff --git a/lldb/source/Breakpoint/Makefile b/lldb/source/Breakpoint/Makefile new file mode 100644 index 00000000000..223e4c24465 --- /dev/null +++ b/lldb/source/Breakpoint/Makefile @@ -0,0 +1,14 @@ +##===- source/Breakpoint/Makefile --------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../.. +LIBRARYNAME := lldbBreakpoint +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Breakpoint/StoppointLocation.cpp b/lldb/source/Breakpoint/StoppointLocation.cpp index 60280ef2748..8d7325f0389 100644 --- a/lldb/source/Breakpoint/StoppointLocation.cpp +++ b/lldb/source/Breakpoint/StoppointLocation.cpp @@ -22,21 +22,21 @@ using namespace lldb_private; //---------------------------------------------------------------------- StoppointLocation::StoppointLocation (break_id_t bid, addr_t addr, bool hardware) : m_loc_id(bid), - m_byte_size(0), m_addr(addr), - m_hit_count(0), m_hw_preferred(hardware), - m_hw_index(LLDB_INVALID_INDEX32) + m_hw_index(LLDB_INVALID_INDEX32), + m_byte_size(0), + m_hit_count(0) { } StoppointLocation::StoppointLocation (break_id_t bid, addr_t addr, size_t size, bool hardware) : m_loc_id(bid), - m_byte_size(size), m_addr(addr), - m_hit_count(0), m_hw_preferred(hardware), - m_hw_index(LLDB_INVALID_INDEX32) + m_hw_index(LLDB_INVALID_INDEX32), + m_byte_size(size), + m_hit_count(0) { } diff --git a/lldb/source/Breakpoint/WatchpointLocation.cpp b/lldb/source/Breakpoint/WatchpointLocation.cpp index bf24421a091..c4bd975cdde 100644 --- a/lldb/source/Breakpoint/WatchpointLocation.cpp +++ b/lldb/source/Breakpoint/WatchpointLocation.cpp @@ -123,14 +123,14 @@ WatchpointLocation::WatchpointWrite () const { return m_watch_write != 0; } -int32_t +uint32_t WatchpointLocation::GetIgnoreCount () const { return m_ignore_count; } void -WatchpointLocation::SetIgnoreCount (int32_t n) +WatchpointLocation::SetIgnoreCount (uint32_t n) { m_ignore_count = n; } diff --git a/lldb/source/Commands/CommandCompletions.cpp b/lldb/source/Commands/CommandCompletions.cpp index 39bb1f46093..85470164f61 100644 --- a/lldb/source/Commands/CommandCompletions.cpp +++ b/lldb/source/Commands/CommandCompletions.cpp @@ -161,7 +161,7 @@ DiskFilesOrDirectories // but for completeness sake we'll resolve the user name and only put a slash // on the end if it exists. char resolved_username[PATH_MAX]; - int resolved_username_len = FileSpec::ResolveUsername (partial_name_copy, resolved_username, + size_t resolved_username_len = FileSpec::ResolveUsername (partial_name_copy, resolved_username, sizeof (resolved_username)); // Not sure how this would happen, a username longer than PATH_MAX? Still... @@ -238,7 +238,7 @@ DiskFilesOrDirectories if (*partial_name_copy == '~') { - int resolved_username_len = FileSpec::ResolveUsername(containing_part, containing_part, sizeof (containing_part)); + size_t resolved_username_len = FileSpec::ResolveUsername(containing_part, containing_part, sizeof (containing_part)); // User name doesn't exist, we're not getting any further... if (resolved_username_len == 0 || resolved_username_len >= sizeof (containing_part)) return matches.GetSize(); @@ -591,7 +591,7 @@ CommandCompletions::SymbolCompleter::SearchCallback ( SymbolContext sc; // Now add the functions & symbols to the list - only add if unique: - for (int i = 0; i < func_list.GetSize(); i++) + for (uint32_t i = 0; i < func_list.GetSize(); i++) { if (func_list.GetContextAtIndex(i, sc)) { @@ -602,7 +602,7 @@ CommandCompletions::SymbolCompleter::SearchCallback ( } } - for (int i = 0; i < sym_list.GetSize(); i++) + for (uint32_t i = 0; i < sym_list.GetSize(); i++) { if (sym_list.GetContextAtIndex(i, sc)) { diff --git a/lldb/source/Commands/CommandObjectAppend.cpp b/lldb/source/Commands/CommandObjectAppend.cpp index 6bdbc36572e..89d5cee71e4 100644 --- a/lldb/source/Commands/CommandObjectAppend.cpp +++ b/lldb/source/Commands/CommandObjectAppend.cpp @@ -73,7 +73,7 @@ CommandObjectAppend::Execute { if (var->GetType() == StateVariable::eTypeString) { - for (int i = 0; i < command.GetArgumentCount(); ++i) + for (size_t i = 0; i < command.GetArgumentCount(); ++i) var->AppendStringValue (command.GetArgumentAtIndex(i)); result.SetStatus (eReturnStatusSuccessFinishNoResult); } diff --git a/lldb/source/Commands/CommandObjectApropos.cpp b/lldb/source/Commands/CommandObjectApropos.cpp index 3987f452dfb..59621af5f24 100644 --- a/lldb/source/Commands/CommandObjectApropos.cpp +++ b/lldb/source/Commands/CommandObjectApropos.cpp @@ -69,14 +69,14 @@ CommandObjectApropos::Execute result.AppendMessageWithFormat ("The following commands may relate to '%s':\n", search_word); size_t max_len = 0; - for (int i = 0; i < commands_found.GetSize(); ++i) + for (size_t i = 0; i < commands_found.GetSize(); ++i) { - int len = strlen (commands_found.GetStringAtIndex (i)); + size_t len = strlen (commands_found.GetStringAtIndex (i)); if (len > max_len) max_len = len; } - for (int i = 0; i < commands_found.GetSize(); ++i) + for (size_t i = 0; i < commands_found.GetSize(); ++i) interpreter.OutputFormattedHelpText (result.GetOutputStream(), commands_found.GetStringAtIndex(i), "--", commands_help. diff --git a/lldb/source/Commands/CommandObjectBreakpoint.cpp b/lldb/source/Commands/CommandObjectBreakpoint.cpp index 830fbec6fbc..30f99f0c65a 100644 --- a/lldb/source/Commands/CommandObjectBreakpoint.cpp +++ b/lldb/source/Commands/CommandObjectBreakpoint.cpp @@ -56,11 +56,11 @@ CommandObjectBreakpointSet::CommandOptions::CommandOptions() : m_func_regexp (), m_modules (), m_load_addr(), + m_ignore_count (0), m_thread_id(LLDB_INVALID_THREAD_ID), - m_thread_index (-1), + m_thread_index (UINT32_MAX), m_thread_name(), - m_queue_name(), - m_ignore_count (-1) + m_queue_name() { } @@ -190,8 +190,8 @@ CommandObjectBreakpointSet::CommandOptions::SetOptionValue (int option_idx, cons } case 'k': { - m_ignore_count = Args::StringToSInt32(optarg, -1, 0); - if (m_ignore_count == -1) + m_ignore_count = Args::StringToUInt32(optarg, UINT32_MAX, 0); + if (m_ignore_count == UINT32_MAX) error.SetErrorStringWithFormat ("Invalid ignore count '%s'.\n", optarg); } break; @@ -210,8 +210,8 @@ CommandObjectBreakpointSet::CommandOptions::SetOptionValue (int option_idx, cons break; case 'x': { - m_thread_index = Args::StringToUInt64(optarg, -1, 0); - if (m_thread_id == -1) + m_thread_index = Args::StringToUInt32(optarg, UINT32_MAX, 0); + if (m_thread_id == UINT32_MAX) error.SetErrorStringWithFormat ("Invalid thread index string '%s'.\n", optarg); } @@ -237,9 +237,9 @@ CommandObjectBreakpointSet::CommandOptions::ResetOptionValues () m_func_regexp.clear(); m_load_addr = LLDB_INVALID_ADDRESS; m_modules.clear(); - m_ignore_count = -1; + m_ignore_count = 0; m_thread_id = LLDB_INVALID_THREAD_ID; - m_thread_index = -1; + m_thread_index = UINT32_MAX; m_thread_name.clear(); m_queue_name.clear(); } @@ -469,7 +469,7 @@ CommandObjectBreakpointSet::Execute if (m_options.m_thread_id != LLDB_INVALID_THREAD_ID) bp->SetThreadID (m_options.m_thread_id); - if (m_options.m_thread_index != -1) + if (m_options.m_thread_index != UINT32_MAX) bp->GetOptions()->GetThreadSpec()->SetIndex(m_options.m_thread_index); if (!m_options.m_thread_name.empty()) @@ -478,7 +478,7 @@ CommandObjectBreakpointSet::Execute if (!m_options.m_queue_name.empty()) bp->GetOptions()->GetThreadSpec()->SetQueueName(m_options.m_queue_name.c_str()); - if (m_options.m_ignore_count != -1) + if (m_options.m_ignore_count != 0) bp->GetOptions()->SetIgnoreCount(m_options.m_ignore_count); } @@ -558,7 +558,7 @@ CommandObjectMultiwordBreakpoint::VerifyBreakpointIDs (Args &args, Target *targe // NOW, convert the list of breakpoint id strings in TEMP_ARGS into an actual BreakpointIDList: - valid_ids->InsertStringArray ((const char **) temp_args.GetArgumentVector(), temp_args.GetArgumentCount(), result); + valid_ids->InsertStringArray (temp_args.GetConstArgumentVector(), temp_args.GetArgumentCount(), result); // At this point, all of the breakpoint ids that the user passed in have been converted to breakpoint IDs // and put into valid_ids. @@ -568,7 +568,8 @@ CommandObjectMultiwordBreakpoint::VerifyBreakpointIDs (Args &args, Target *targe // Now that we've converted everything from args into a list of breakpoint ids, go through our tentative list // of breakpoint id's and verify that they correspond to valid/currently set breakpoints. - for (int i = 0; i < valid_ids->Size(); ++i) + const size_t count = valid_ids->GetSize(); + for (size_t i = 0; i < count; ++i) { BreakpointID cur_bp_id = valid_ids->GetBreakpointIDAtIndex (i); Breakpoint *breakpoint = target->GetBreakpointByID (cur_bp_id.GetBreakpointID()).get(); @@ -578,9 +579,10 @@ CommandObjectMultiwordBreakpoint::VerifyBreakpointIDs (Args &args, Target *targe if (cur_bp_id.GetLocationID() > num_locations) { StreamString id_str; - BreakpointID::GetCanonicalReference (&id_str, cur_bp_id.GetBreakpointID(), - cur_bp_id.GetLocationID()); - i = valid_ids->Size() + 1; + BreakpointID::GetCanonicalReference (&id_str, + cur_bp_id.GetBreakpointID(), + cur_bp_id.GetLocationID()); + i = valid_ids->GetSize() + 1; result.AppendErrorWithFormat ("'%s' is not a currently valid breakpoint/location id.\n", id_str.GetData()); result.SetStatus (eReturnStatusFailed); @@ -588,7 +590,7 @@ CommandObjectMultiwordBreakpoint::VerifyBreakpointIDs (Args &args, Target *targe } else { - i = valid_ids->Size() + 1; + i = valid_ids->GetSize() + 1; result.AppendErrorWithFormat ("'%d' is not a currently valid breakpoint id.\n", cur_bp_id.GetBreakpointID()); result.SetStatus (eReturnStatusFailed); } @@ -731,7 +733,7 @@ CommandObjectBreakpointList::Execute { // No breakpoint selected; show info about all currently set breakpoints. result.AppendMessage ("Current breakpoints:"); - for (int i = 0; i < num_breakpoints; ++i) + for (size_t i = 0; i < num_breakpoints; ++i) { Breakpoint *breakpoint = breakpoints.GetBreakpointByIndex (i).get(); AddBreakpointDescription (&output_stream, breakpoint, m_options.m_level); @@ -746,7 +748,7 @@ CommandObjectBreakpointList::Execute if (result.Succeeded()) { - for (int i = 0; i < valid_bp_ids.Size(); ++i) + for (size_t i = 0; i < valid_bp_ids.GetSize(); ++i) { BreakpointID cur_bp_id = valid_bp_ids.GetBreakpointIDAtIndex (i); Breakpoint *breakpoint = target->GetBreakpointByID (cur_bp_id.GetBreakpointID()).get(); @@ -834,7 +836,8 @@ CommandObjectBreakpointEnable::Execute { int enable_count = 0; int loc_count = 0; - for (int i = 0; i < valid_bp_ids.Size(); ++i) + const size_t count = valid_bp_ids.GetSize(); + for (size_t i = 0; i < count; ++i) { BreakpointID cur_bp_id = valid_bp_ids.GetBreakpointIDAtIndex (i); @@ -933,7 +936,8 @@ CommandObjectBreakpointDisable::Execute { int disable_count = 0; int loc_count = 0; - for (int i = 0; i < valid_bp_ids.Size(); ++i) + const size_t count = valid_bp_ids.GetSize(); + for (size_t i = 0; i < count; ++i) { BreakpointID cur_bp_id = valid_bp_ids.GetBreakpointIDAtIndex (i); @@ -1035,7 +1039,8 @@ CommandObjectBreakpointDelete::Execute { int delete_count = 0; int disable_count = 0; - for (int i = 0; i < valid_bp_ids.Size(); ++i) + const size_t count = valid_bp_ids.GetSize(); + for (size_t i = 0; i < count; ++i) { BreakpointID cur_bp_id = valid_bp_ids.GetBreakpointIDAtIndex (i); @@ -1074,12 +1079,15 @@ CommandObjectBreakpointDelete::Execute CommandObjectBreakpointModify::CommandOptions::CommandOptions() : Options (), + m_ignore_count (0), m_thread_id(LLDB_INVALID_THREAD_ID), - m_thread_index (-1), + m_thread_index (UINT32_MAX), m_thread_name(), m_queue_name(), - m_ignore_count (-1), - m_enable_passed (false) + m_enable_passed (false), + m_enable_value (false), + m_name_passed (false), + m_queue_passed (false) { } @@ -1139,8 +1147,8 @@ CommandObjectBreakpointModify::CommandOptions::SetOptionValue (int option_idx, c break; case 'k': { - m_ignore_count = Args::StringToSInt32(optarg, -1, 0); - if (m_ignore_count == -1) + m_ignore_count = Args::StringToUInt32(optarg, UINT32_MAX, 0); + if (m_ignore_count == UINT32_MAX) error.SetErrorStringWithFormat ("Invalid ignore count '%s'.\n", optarg); } break; @@ -1167,8 +1175,8 @@ CommandObjectBreakpointModify::CommandOptions::SetOptionValue (int option_idx, c break; case 'x': { - m_thread_index = Args::StringToUInt64(optarg, -1, 0); - if (m_thread_id == -1) + m_thread_index = Args::StringToUInt32 (optarg, UINT32_MAX, 0); + if (m_thread_id == UINT32_MAX) error.SetErrorStringWithFormat ("Invalid thread index string '%s'.\n", optarg); } @@ -1186,9 +1194,9 @@ CommandObjectBreakpointModify::CommandOptions::ResetOptionValues () { Options::ResetOptionValues(); - m_ignore_count = -1; + m_ignore_count = 0; m_thread_id = LLDB_INVALID_THREAD_ID; - m_thread_index = -1; + m_thread_index = UINT32_MAX; m_thread_name.clear(); m_queue_name.clear(); m_enable_passed = false; @@ -1249,7 +1257,8 @@ CommandObjectBreakpointModify::Execute if (result.Succeeded()) { - for (int i = 0; i < valid_bp_ids.Size(); ++i) + const size_t count = valid_bp_ids.GetSize(); + for (size_t i = 0; i < count; ++i) { BreakpointID cur_bp_id = valid_bp_ids.GetBreakpointIDAtIndex (i); @@ -1264,7 +1273,7 @@ CommandObjectBreakpointModify::Execute if (m_options.m_thread_id != LLDB_INVALID_THREAD_ID) location->SetThreadID (m_options.m_thread_id); - if (m_options.m_thread_index != -1) + if (m_options.m_thread_index != UINT32_MAX) location->GetLocationOptions()->GetThreadSpec()->SetIndex(m_options.m_thread_index); if (m_options.m_name_passed) @@ -1273,7 +1282,7 @@ CommandObjectBreakpointModify::Execute if (m_options.m_queue_passed) location->GetLocationOptions()->GetThreadSpec()->SetQueueName(m_options.m_queue_name.c_str()); - if (m_options.m_ignore_count != -1) + if (m_options.m_ignore_count != 0) location->GetLocationOptions()->SetIgnoreCount(m_options.m_ignore_count); if (m_options.m_enable_passed) @@ -1285,7 +1294,7 @@ CommandObjectBreakpointModify::Execute if (m_options.m_thread_id != LLDB_INVALID_THREAD_ID) bp->SetThreadID (m_options.m_thread_id); - if (m_options.m_thread_index != -1) + if (m_options.m_thread_index != UINT32_MAX) bp->GetOptions()->GetThreadSpec()->SetIndex(m_options.m_thread_index); if (m_options.m_name_passed) @@ -1294,7 +1303,7 @@ CommandObjectBreakpointModify::Execute if (m_options.m_queue_passed) bp->GetOptions()->GetThreadSpec()->SetQueueName(m_options.m_queue_name.c_str()); - if (m_options.m_ignore_count != -1) + if (m_options.m_ignore_count != 0) bp->GetOptions()->SetIgnoreCount(m_options.m_ignore_count); if (m_options.m_enable_passed) diff --git a/lldb/source/Commands/CommandObjectBreakpoint.h b/lldb/source/Commands/CommandObjectBreakpoint.h index 20f2c3b994a..b998e3d07c3 100644 --- a/lldb/source/Commands/CommandObjectBreakpoint.h +++ b/lldb/source/Commands/CommandObjectBreakpoint.h @@ -104,9 +104,9 @@ public: std::string m_func_name; uint32_t m_func_name_type_mask; std::string m_func_regexp; - lldb::addr_t m_load_addr; STLStringArray m_modules; - int32_t m_ignore_count; + lldb::addr_t m_load_addr; + uint32_t m_ignore_count; lldb::tid_t m_thread_id; uint32_t m_thread_index; std::string m_thread_name; @@ -164,7 +164,7 @@ public: // Instance variables to hold the values for command options. - int32_t m_ignore_count; + uint32_t m_ignore_count; lldb::tid_t m_thread_id; uint32_t m_thread_index; std::string m_thread_name; diff --git a/lldb/source/Commands/CommandObjectBreakpointCommand.cpp b/lldb/source/Commands/CommandObjectBreakpointCommand.cpp index 547192dc68a..123a5ade061 100644 --- a/lldb/source/Commands/CommandObjectBreakpointCommand.cpp +++ b/lldb/source/Commands/CommandObjectBreakpointCommand.cpp @@ -244,7 +244,8 @@ CommandObjectBreakpointCommandAdd::Execute if (result.Succeeded()) { - for (int i = 0; i < valid_bp_ids.Size(); ++i) + const size_t count = valid_bp_ids.GetSize(); + for (size_t i = 0; i < count; ++i) { BreakpointID cur_bp_id = valid_bp_ids.GetBreakpointIDAtIndex (i); if (cur_bp_id.GetBreakpointID() != LLDB_INVALID_BREAK_ID) @@ -441,7 +442,8 @@ CommandObjectBreakpointCommandRemove::Execute if (result.Succeeded()) { - for (int i = 0; i < valid_bp_ids.Size(); ++i) + const size_t count = valid_bp_ids.GetSize(); + for (size_t i = 0; i < count; ++i) { BreakpointID cur_bp_id = valid_bp_ids.GetBreakpointIDAtIndex (i); if (cur_bp_id.GetBreakpointID() != LLDB_INVALID_BREAK_ID) @@ -526,7 +528,8 @@ CommandObjectBreakpointCommandList::Execute if (result.Succeeded()) { - for (int i = 0; i < valid_bp_ids.Size(); ++i) + const size_t count = valid_bp_ids.GetSize(); + for (size_t i = 0; i < count; ++i) { BreakpointID cur_bp_id = valid_bp_ids.GetBreakpointIDAtIndex (i); if (cur_bp_id.GetBreakpointID() != LLDB_INVALID_BREAK_ID) diff --git a/lldb/source/Commands/CommandObjectCommands.cpp b/lldb/source/Commands/CommandObjectCommands.cpp index b2c4ec32808..0db3c3a6818 100644 --- a/lldb/source/Commands/CommandObjectCommands.cpp +++ b/lldb/source/Commands/CommandObjectCommands.cpp @@ -205,14 +205,14 @@ public: CommandReturnObject &result ) { - const int argc = args.GetArgumentCount(); + const size_t argc = args.GetArgumentCount(); if (argc < 2) - { + { result.AppendError ("'alias' requires at least two arguments"); result.SetStatus (eReturnStatusFailed); return false; - } + } const std::string alias_command = args.GetArgumentAtIndex(0); const std::string actual_command = args.GetArgumentAtIndex(1); @@ -236,7 +236,7 @@ public: if (command_obj_sp.get()) { CommandObject *cmd_obj = command_obj_sp.get(); - CommandObject *sub_cmd_obj; + CommandObject *sub_cmd_obj = NULL; OptionArgVectorSP option_arg_vector_sp = OptionArgVectorSP (new OptionArgVector); OptionArgVector *option_arg_vector = option_arg_vector_sp.get(); @@ -299,7 +299,7 @@ public: } else { - for (int i = 0; i < args.GetArgumentCount(); ++i) + for (size_t i = 0; i < argc; ++i) option_arg_vector->push_back (OptionArgPair ("<argument>", std::string (args.GetArgumentAtIndex (i)))); } diff --git a/lldb/source/Commands/CommandObjectCrossref.cpp b/lldb/source/Commands/CommandObjectCrossref.cpp index 0d11369c6e7..a9e833e3a4d 100644 --- a/lldb/source/Commands/CommandObjectCrossref.cpp +++ b/lldb/source/Commands/CommandObjectCrossref.cpp @@ -74,7 +74,8 @@ CommandObjectCrossref::GenerateHelpText (CommandReturnObject &result) { result.AppendMessage ("This command can be called on the following types of objects:"); - for (int i = 0; i < m_crossref_object_types.GetArgumentCount(); ++i) + const size_t count = m_crossref_object_types.GetArgumentCount(); + for (size_t i = 0; i < count; ++i) { const char *obj_name = m_crossref_object_types.GetArgumentAtIndex(i); result.AppendMessageWithFormat (" %s (e.g. '%s %s')\n", obj_name, diff --git a/lldb/source/Commands/CommandObjectHelp.cpp b/lldb/source/Commands/CommandObjectHelp.cpp index 37802a85b2a..4bf8a30edba 100644 --- a/lldb/source/Commands/CommandObjectHelp.cpp +++ b/lldb/source/Commands/CommandObjectHelp.cpp @@ -27,8 +27,8 @@ using namespace lldb_private; CommandObjectHelp::CommandObjectHelp () : CommandObject ("help", - "Shows a list of all debugger commands, or give details about specific commands.", - "help [<cmd-name>]") + "Shows a list of all debugger commands, or give details about specific commands.", + "help [<cmd-name>]") { } @@ -123,7 +123,8 @@ CommandObjectHelp::Execute (CommandInterpreter &interpreter, Args& command, Comm { Stream &output_strm = result.GetOutputStream(); output_strm.Printf("Help requested with ambiguous command name, possible completions:\n"); - for (int i = 0; i < matches.GetSize(); i++) + const uint32_t match_count = matches.GetSize(); + for (uint32_t i = 0; i < match_count; i++) { output_strm.Printf("\t%s\n", matches.GetStringAtIndex(i)); } diff --git a/lldb/source/Commands/CommandObjectImage.cpp b/lldb/source/Commands/CommandObjectImage.cpp index c835aa311a6..0b61816fbcb 100644 --- a/lldb/source/Commands/CommandObjectImage.cpp +++ b/lldb/source/Commands/CommandObjectImage.cpp @@ -469,7 +469,7 @@ public: OptionElementVector &opt_element_vector, int match_start_point, int max_return_elements, - bool word_complete, + bool &word_complete, StringList &matches) { // Arguments are the standard source file completer. diff --git a/lldb/source/Commands/CommandObjectMemory.cpp b/lldb/source/Commands/CommandObjectMemory.cpp index 9400200070a..30dfe2a0bd5 100644 --- a/lldb/source/Commands/CommandObjectMemory.cpp +++ b/lldb/source/Commands/CommandObjectMemory.cpp @@ -462,11 +462,20 @@ public: return false; } - size_t item_byte_size = m_options.m_byte_size ? m_options.m_byte_size : 1; StreamString buffer (Stream::eBinary, process->GetAddressByteSize(), process->GetByteOrder()); + size_t item_byte_size = m_options.m_byte_size; + + if (m_options.m_byte_size == 0) + { + if (m_options.m_format == eFormatPointer) + item_byte_size = buffer.GetAddressByteSize(); + else + item_byte_size = 1; + } + lldb::addr_t addr = Args::StringToUInt64(command.GetArgumentAtIndex(0), LLDB_INVALID_ADDRESS, 0); if (addr == LLDB_INVALID_ADDRESS) @@ -513,6 +522,8 @@ public: case eFormatDefault: case eFormatBytes: case eFormatHex: + case eFormatPointer: + // Decode hex bytes uval64 = Args::StringToUInt64(value_str, UINT64_MAX, 16, &success); if (!success) diff --git a/lldb/source/Commands/CommandObjectSyntax.cpp b/lldb/source/Commands/CommandObjectSyntax.cpp index 3279da2c1d6..072ae29777e 100644 --- a/lldb/source/Commands/CommandObjectSyntax.cpp +++ b/lldb/source/Commands/CommandObjectSyntax.cpp @@ -40,62 +40,20 @@ CommandObjectSyntax::~CommandObjectSyntax() bool -CommandObjectSyntax::OldExecute +CommandObjectSyntax::Execute ( + CommandInterpreter &interpreter, Args& command, - Debugger *context, - CommandInterpreter *interpreter, CommandReturnObject &result ) { - CommandObject *cmd_obj; - - if (command.GetArgumentCount() != 0) - { - cmd_obj = interpreter->GetCommandObject(command.GetArgumentAtIndex(0)); - if (cmd_obj) - { - Stream &output_strm = result.GetOutputStream(); - if (cmd_obj->GetOptions() != NULL) - { - output_strm.Printf ("\nSyntax: %s\n", cmd_obj->GetSyntax()); - //cmd_obj->GetOptions()->GenerateOptionUsage (output_strm, cmd_obj); - output_strm.Printf ("(Try 'help %s' for more information on command options syntax.)\n", - cmd_obj->GetCommandName()); - result.SetStatus (eReturnStatusSuccessFinishNoResult); - } - else - { - output_strm.Printf ("\nSyntax: %s\n", cmd_obj->GetSyntax()); - result.SetStatus (eReturnStatusSuccessFinishNoResult); - } - } - else - { - result.AppendErrorWithFormat ("'%s' is not a known command.\n", command.GetArgumentAtIndex(0)); - result.AppendError ("Try 'help' to see a current list of commands."); - result.SetStatus (eReturnStatusFailed); - } - } - else - { - result.AppendError ("Must call 'syntax' with a valid command."); - result.SetStatus (eReturnStatusFailed); - } - return result.Succeeded(); -} - -bool -CommandObjectSyntax::Execute (Args &command, Debugger *context, CommandInterpreter *interpreter, - CommandReturnObject &result) -{ CommandObject::CommandMap::iterator pos; CommandObject *cmd_obj; const int argc = command.GetArgumentCount(); if (argc > 0) { - cmd_obj = interpreter->GetCommandObject (command.GetArgumentAtIndex(0)); + cmd_obj = interpreter.GetCommandObject (command.GetArgumentAtIndex(0)); bool all_okay = true; for (int i = 1; i < argc; ++i) { diff --git a/lldb/source/Commands/CommandObjectSyntax.h b/lldb/source/Commands/CommandObjectSyntax.h index 3caf533fed8..47b3e8e1033 100644 --- a/lldb/source/Commands/CommandObjectSyntax.h +++ b/lldb/source/Commands/CommandObjectSyntax.h @@ -30,17 +30,10 @@ public: virtual ~CommandObjectSyntax (); - - bool - OldExecute (Args& command, - Debugger *context, - CommandInterpreter *interpreter, - CommandReturnObject &result); virtual bool - Execute (Args& command, - Debugger *context, - CommandInterpreter *interpreter, + Execute (CommandInterpreter &interpreter, + Args& command, CommandReturnObject &result); diff --git a/lldb/source/Commands/CommandObjectThread.cpp b/lldb/source/Commands/CommandObjectThread.cpp index 97387584d5f..85829124b41 100644 --- a/lldb/source/Commands/CommandObjectThread.cpp +++ b/lldb/source/Commands/CommandObjectThread.cpp @@ -173,7 +173,7 @@ lldb_private::DisplayFramesForExecutionContext strm.IndentMore(); StackFrameSP frame_sp; - int frame_idx = 0; + uint32_t frame_idx = 0; if (ascending) { diff --git a/lldb/source/Commands/Makefile b/lldb/source/Commands/Makefile new file mode 100644 index 00000000000..dbef40c520b --- /dev/null +++ b/lldb/source/Commands/Makefile @@ -0,0 +1,14 @@ +##===- source/Commands/Makefile ----------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../.. +LIBRARYNAME := lldbCommands +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Core/Address.cpp b/lldb/source/Core/Address.cpp index c857a6b6d1f..057b8567a4d 100644 --- a/lldb/source/Core/Address.cpp +++ b/lldb/source/Core/Address.cpp @@ -241,24 +241,28 @@ ReadCStringFromMemory (ExecutionContextScope *exe_scope, const Address &address, } Address::Address () : + SymbolContextScope(), m_section (NULL), m_offset (LLDB_INVALID_ADDRESS) { } Address::Address (const Address& rhs) : + SymbolContextScope(rhs), m_section (rhs.m_section), m_offset (rhs.m_offset) { } Address::Address (const Section* section, addr_t offset) : + SymbolContextScope(), m_section (section), m_offset (offset) { } Address::Address (addr_t address, const SectionList * sections) : + SymbolContextScope(), m_section (NULL), m_offset (LLDB_INVALID_ADDRESS) { @@ -430,6 +434,9 @@ Address::Dump (Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, Dum lldb_private::Address so_addr; switch (style) { + case DumpStyleInvalid: + return false; + case DumpStyleSectionNameOffset: if (m_section != NULL) { @@ -637,6 +644,9 @@ Address::Dump (Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, Dum } } break; + + default: + break; } } diff --git a/lldb/source/Core/AddressRange.cpp b/lldb/source/Core/AddressRange.cpp index fbdf7026e5a..47b957aca0a 100644 --- a/lldb/source/Core/AddressRange.cpp +++ b/lldb/source/Core/AddressRange.cpp @@ -146,6 +146,9 @@ AddressRange::Dump(Stream *s, Process *process, Address::DumpStyle style, Addres switch (style) { + default: + break; + case Address::DumpStyleSectionNameOffset: case Address::DumpStyleSectionPointerOffset: s->PutChar ('['); diff --git a/lldb/source/Core/AddressResolverFileLine.cpp b/lldb/source/Core/AddressResolverFileLine.cpp index c4aadcca9c1..b93f331d823 100644 --- a/lldb/source/Core/AddressResolverFileLine.cpp +++ b/lldb/source/Core/AddressResolverFileLine.cpp @@ -54,7 +54,7 @@ AddressResolverFileLine::SearchCallback sc_list_size = cu->ResolveSymbolContext (m_file_spec, m_line_number, m_inlines, false, eSymbolContextEverything, sc_list); - for (int i = 0; i < sc_list_size; i++) + for (uint32_t i = 0; i < sc_list_size; i++) { SymbolContext sc; if (sc_list.GetContextAtIndex(i, sc)) diff --git a/lldb/source/Core/ArchSpec.cpp b/lldb/source/Core/ArchSpec.cpp index b7fbf5f25a0..006aa708a55 100644 --- a/lldb/source/Core/ArchSpec.cpp +++ b/lldb/source/Core/ArchSpec.cpp @@ -239,6 +239,7 @@ ArchSpec::AsCString (lldb::ArchitectureType arch_type, uint32_t cpu, uint32_t su switch (arch_type) { + case kNumArchTypes: case eArchTypeInvalid: break; @@ -334,6 +335,7 @@ ArchSpec::GetGenericCPUType () const { switch (m_type) { + case kNumArchTypes: case eArchTypeInvalid: break; @@ -990,7 +992,7 @@ enum eRegNumPPC_GCC_vscr = 110, eRegNumPPC_GCC_spe_acc = 111, eRegNumPPC_GCC_spefscr = 112, - eRegNumPPC_GCC_sfp = 113, + eRegNumPPC_GCC_sfp = 113 }; static const char * g_arm_gcc_reg_names[] = { @@ -1605,6 +1607,7 @@ ArchSpec::GetAddressByteSize() const { switch (m_type) { + case kNumArchTypes: case eArchTypeInvalid: break; @@ -1702,6 +1705,9 @@ ArchSpec::SetArch (const char *arch_name) } } break; + + case kNumArchTypes: + break; } const char *str = arch_name; diff --git a/lldb/source/Core/ConstString.cpp b/lldb/source/Core/ConstString.cpp index 06d83829fae..1caf843a3d3 100644 --- a/lldb/source/Core/ConstString.cpp +++ b/lldb/source/Core/ConstString.cpp @@ -85,10 +85,7 @@ public: Mutex::Locker locker (m_mutex); llvm::StringRef string_ref (cstr, cstr_len); llvm::StringMapEntry<uint32_t>& entry = m_string_map.GetOrCreateValue (string_ref); - const char *ccstr = entry.getKeyData(); - llvm::StringMapEntry<uint32_t>&reconstituted_entry = GetStringMapEntryFromKeyData (ccstr); - assert (&entry == &reconstituted_entry); - return ccstr; + return entry.getKeyData(); } return NULL; } diff --git a/lldb/source/Core/DataBufferMemoryMap.cpp b/lldb/source/Core/DataBufferMemoryMap.cpp index 9c63bf134db..898280e25bc 100644 --- a/lldb/source/Core/DataBufferMemoryMap.cpp +++ b/lldb/source/Core/DataBufferMemoryMap.cpp @@ -154,12 +154,16 @@ DataBufferMemoryMap::MemoryMapFromFileDescriptor (int fd, off_t offset, size_t l { if ((stat.st_mode & S_IFREG) && (stat.st_size > offset)) { + const size_t max_bytes_available = stat.st_size - offset; if (length == SIZE_MAX) - length = stat.st_size - offset; - - // Cap the length if too much data was requested - if (length > stat.st_size - offset) - length = stat.st_size - offset; + { + length = max_bytes_available; + } + else if (length > max_bytes_available) + { + // Cap the length if too much data was requested + length = max_bytes_available; + } if (length > 0) { diff --git a/lldb/source/Core/DataExtractor.cpp b/lldb/source/Core/DataExtractor.cpp index 0b1f5403333..72d7d934054 100644 --- a/lldb/source/Core/DataExtractor.cpp +++ b/lldb/source/Core/DataExtractor.cpp @@ -1088,7 +1088,7 @@ DataExtractor::GetSLEB128 (uint32_t *offset_ptr) const int size = sizeof (uint32_t) * 8; const uint8_t *src = m_start + *offset_ptr; - uint8_t byte; + uint8_t byte = 0; int bytecount = 0; while (src < m_end) @@ -1316,6 +1316,8 @@ DataExtractor::Dump s->Address(GetMaxU64Bitfield(&offset, item_byte_size, item_bit_size, item_bit_offset), sizeof (addr_t)); break; + default: + case eFormatDefault: case eFormatHex: if (item_byte_size <= 8) { diff --git a/lldb/source/Core/Error.cpp b/lldb/source/Core/Error.cpp index 206fd699b4f..104dfc6d693 100644 --- a/lldb/source/Core/Error.cpp +++ b/lldb/source/Core/Error.cpp @@ -334,7 +334,7 @@ Error::SetErrorStringWithVarArg (const char *format, va_list args) // allocated buffer above va_list copy_args; va_copy (copy_args, args); - int length = ::vsnprintf (buf.data(), buf.size(), format, args); + size_t length = ::vsnprintf (buf.data(), buf.size(), format, args); if (length >= buf.size()) { // The error formatted string didn't fit into our buffer, resize it diff --git a/lldb/source/Core/FileSpec.cpp b/lldb/source/Core/FileSpec.cpp index bf90e967cc2..7e2e087a545 100644 --- a/lldb/source/Core/FileSpec.cpp +++ b/lldb/source/Core/FileSpec.cpp @@ -58,7 +58,7 @@ GetCachedGlobTildeSlash() // Returns 0 if there WAS a ~ in the path but the username couldn't be resolved. // Otherwise returns the number of characters copied into dst_path. If the return // is >= dst_len, then the resolved path is too long... -int +size_t FileSpec::ResolveUsername (const char *src_path, char *dst_path, size_t dst_len) { char user_home[PATH_MAX]; @@ -70,7 +70,7 @@ FileSpec::ResolveUsername (const char *src_path, char *dst_path, size_t dst_len) // If there's no ~, then just copy src_path straight to dst_path (they may be the same string...) if (src_path[0] != '~') { - int len = strlen (src_path); + size_t len = strlen (src_path); if (len >= dst_len) { ::bcopy (src_path, dst_path, dst_len - 1); @@ -106,7 +106,7 @@ FileSpec::ResolveUsername (const char *src_path, char *dst_path, size_t dst_len) // User name of "" means the current user... struct passwd *user_entry; - const char *home_dir; + const char *home_dir = NULL; if (user_name[0] == '\0') { @@ -125,7 +125,7 @@ FileSpec::ResolveUsername (const char *src_path, char *dst_path, size_t dst_len) return ::snprintf (dst_path, dst_len, "%s%s", home_dir, remainder); } -int +size_t FileSpec::Resolve (const char *src_path, char *dst_path, size_t dst_len) { if (src_path == NULL || src_path[0] == '\0') @@ -135,7 +135,7 @@ FileSpec::Resolve (const char *src_path, char *dst_path, size_t dst_len) char unglobbed_path[PATH_MAX]; if (src_path[0] == '~') { - int return_count = ResolveUsername(src_path, unglobbed_path, sizeof(unglobbed_path)); + size_t return_count = ResolveUsername(src_path, unglobbed_path, sizeof(unglobbed_path)); // If we couldn't find the user referred to, or the resultant path was too long, // then just copy over the src_path. @@ -509,16 +509,16 @@ FileSpec::GetPath(char *path, size_t max_path_length) const { if (filename && filename[0]) { - return snprintf (path, max_path_length, "%s/%s", dirname, filename) < max_path_length; + return (size_t)::snprintf (path, max_path_length, "%s/%s", dirname, filename) < max_path_length; } else { - strncpy (path, dirname, max_path_length); + ::strncpy (path, dirname, max_path_length); } } else if (filename) { - strncpy (path, filename, max_path_length); + ::strncpy (path, filename, max_path_length); } else { @@ -660,7 +660,7 @@ FileSpec::ReadFileContents (off_t file_offset, size_t file_size) const { // Make sure we read exactly what we asked for and if we got // less, adjust the array - if (bytesRead < data_heap_ap->GetByteSize()) + if ((size_t)bytesRead < data_heap_ap->GetByteSize()) data_heap_ap->SetByteSize(bytesRead); data_sp.reset(data_heap_ap.release()); } diff --git a/lldb/source/Core/Language.cpp b/lldb/source/Core/Language.cpp index b209d186f28..add2a22d66c 100644 --- a/lldb/source/Core/Language.cpp +++ b/lldb/source/Core/Language.cpp @@ -48,7 +48,7 @@ g_languages[] = { { "python" , NULL , "Python" } } }; -static const uint32_t +static const size_t g_num_languages = sizeof(g_languages)/sizeof(LanguageStrings); Language::Language(Language::Type language) : diff --git a/lldb/source/Core/Makefile b/lldb/source/Core/Makefile new file mode 100644 index 00000000000..b7773e3f571 --- /dev/null +++ b/lldb/source/Core/Makefile @@ -0,0 +1,14 @@ +##===- source/Core/Makefile --------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../.. +LIBRARYNAME := lldbCore +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Core/SearchFilter.cpp b/lldb/source/Core/SearchFilter.cpp index b08f4d80d5e..c8888421af7 100644 --- a/lldb/source/Core/SearchFilter.cpp +++ b/lldb/source/Core/SearchFilter.cpp @@ -154,9 +154,9 @@ SearchFilter::SearchInModuleList (Searcher &searcher, ModuleList &modules) searcher.SearchCallback (*this, empty_sc, NULL, false); else { - size_t numModules = modules.GetSize(); + const size_t numModules = modules.GetSize(); - for (int i = 0; i < numModules; i++) + for (size_t i = 0; i < numModules; i++) { ModuleSP module_sp(modules.GetModuleAtIndex(i)); if (ModulePasses(module_sp)) @@ -186,7 +186,7 @@ SearchFilter::DoModuleIteration (const SymbolContext &context, Searcher &searche if (!context.module_sp) { size_t n_modules = m_target_sp->GetImages().GetSize(); - for (int i = 0; i < n_modules; i++) + for (size_t i = 0; i < n_modules; i++) { // If this is the last level supplied, then call the callback directly, // otherwise descend. @@ -395,8 +395,8 @@ SearchFilterByModule::Search (Searcher &searcher) // find the ones that match the file name. ModuleList matching_modules; - // const size_t num_matching_modules = m_target_sp->GetImages().FindModules(&m_module_spec, NULL, NULL, NULL, matching_modules); - for (int i = 0; i < m_target_sp->GetImages().GetSize (); i++) + const size_t num_modules = m_target_sp->GetImages().GetSize (); + for (size_t i = 0; i < num_modules; i++) { Module* module = m_target_sp->GetImages().GetModulePointerAtIndex(i); if (FileSpec::Compare (m_module_spec, module->GetFileSpec(), false) == 0) diff --git a/lldb/source/Core/Stream.cpp b/lldb/source/Core/Stream.cpp index 0d3c8e0aced..9beec35c8f7 100644 --- a/lldb/source/Core/Stream.cpp +++ b/lldb/source/Core/Stream.cpp @@ -67,12 +67,10 @@ Stream::PutSLEB128 (int64_t sval) if (m_flags.IsSet(eBinary)) { bool more = true; - bool negative = (sval < 0); while (more) { uint8_t byte = sval & 0x7fu; sval >>= 7; - assert((!negative && sval >= 0) || (negative && sval < 0)); /* sign bit of byte is 2nd high order bit (0x40) */ if ((sval == 0 && !(byte & 0x40)) || (sval == -1 && (byte & 0x40)) ) @@ -209,7 +207,7 @@ Stream::PrintfVarArg (const char *format, va_list args) int bytes_written = 0; // Try and format our string into a fixed buffer first and see if it fits - int length = vsnprintf (str, sizeof(str), format, args); + size_t length = ::vsnprintf (str, sizeof(str), format, args); if (length < sizeof(str)) { va_end (args); @@ -479,16 +477,15 @@ Stream::PrintfAsRawHex8 (const char *format, ...) va_start (args, format); va_copy (args, args_copy); // Copy this so we - int i; char str[1024]; int bytes_written = 0; // Try and format our string into a fixed buffer first and see if it fits - int length = vsnprintf (str, sizeof(str), format, args); + size_t length = ::vsnprintf (str, sizeof(str), format, args); if (length < sizeof(str)) { // The formatted string fit into our stack based buffer, so we can just // append that to our packet - for (i=0; i<length; ++i) + for (size_t i=0; i<length; ++i) bytes_written += _PutHex8 (str[i], false); } else @@ -499,7 +496,7 @@ Stream::PrintfAsRawHex8 (const char *format, ...) length = ::vasprintf (&str_ptr, format, args_copy); if (str_ptr) { - for (i=0; i<length; ++i) + for (size_t i=0; i<length; ++i) bytes_written += _PutHex8 (str_ptr[i], false); ::free (str_ptr); } @@ -514,7 +511,7 @@ int Stream::PutNHex8 (size_t n, uint8_t uvalue) { int bytes_written = 0; - for (int i=0; i<n; ++i) + for (size_t i=0; i<n; ++i) bytes_written += _PutHex8 (uvalue, m_flags.IsSet(eAddPrefix)); return bytes_written; } @@ -555,15 +552,14 @@ Stream::PutHex16 (uint16_t uvalue, ByteOrder byte_order) bool add_prefix = m_flags.IsSet(eAddPrefix); int bytes_written = 0; - int byte; if (byte_order == eByteOrderLittle) { - for (byte = 0; byte < sizeof(uvalue); ++byte, add_prefix = false) + for (size_t byte = 0; byte < sizeof(uvalue); ++byte, add_prefix = false) bytes_written += _PutHex8 (uvalue >> (byte * 8), add_prefix); } else { - for (byte = sizeof(uvalue)-1; byte >= 0; --byte, add_prefix = false) + for (size_t byte = sizeof(uvalue)-1; byte < sizeof(uvalue); --byte, add_prefix = false) bytes_written += _PutHex8 (uvalue >> (byte * 8), add_prefix); } return bytes_written; @@ -577,15 +573,14 @@ Stream::PutHex32(uint32_t uvalue, ByteOrder byte_order) bool add_prefix = m_flags.IsSet(eAddPrefix); int bytes_written = 0; - int byte; if (byte_order == eByteOrderLittle) { - for (byte = 0; byte < sizeof(uvalue); ++byte, add_prefix = false) + for (size_t byte = 0; byte < sizeof(uvalue); ++byte, add_prefix = false) bytes_written += _PutHex8 (uvalue >> (byte * 8), add_prefix); } else { - for (byte = sizeof(uvalue)-1; byte >= 0; --byte, add_prefix = false) + for (size_t byte = sizeof(uvalue)-1; byte < sizeof(uvalue); --byte, add_prefix = false) bytes_written += _PutHex8 (uvalue >> (byte * 8), add_prefix); } return bytes_written; @@ -599,15 +594,14 @@ Stream::PutHex64(uint64_t uvalue, ByteOrder byte_order) bool add_prefix = m_flags.IsSet(eAddPrefix); int bytes_written = 0; - int byte; if (byte_order == eByteOrderLittle) { - for (byte = 0; byte < sizeof(uvalue); ++byte, add_prefix = false) + for (size_t byte = 0; byte < sizeof(uvalue); ++byte, add_prefix = false) bytes_written += _PutHex8 (uvalue >> (byte * 8), add_prefix); } else { - for (byte = sizeof(uvalue)-1; byte >= 0; --byte, add_prefix = false) + for (size_t byte = sizeof(uvalue)-1; byte < sizeof(uvalue); --byte, add_prefix = false) bytes_written += _PutHex8 (uvalue >> (byte * 8), add_prefix); } return bytes_written; @@ -675,17 +669,16 @@ Stream::PutRawBytes (const void *s, size_t src_len, ByteOrder src_byte_order, By int bytes_written = 0; const uint8_t *src = (const uint8_t *)s; - int i; bool binary_is_clear = m_flags.IsClear (eBinary); m_flags.Set (eBinary); if (src_byte_order == dst_byte_order) { - for (i=0;i<src_len; ++i) + for (size_t i = 0; i < src_len; ++i) bytes_written += _PutHex8 (src[i], false); } else { - for (i=src_len-1;i>=0; --i) + for (size_t i = src_len-1; i < src_len; --i) bytes_written += _PutHex8 (src[i], false); } if (binary_is_clear) @@ -705,17 +698,16 @@ Stream::PutBytesAsRawHex8 (const void *s, size_t src_len, ByteOrder src_byte_ord int bytes_written = 0; const uint8_t *src = (const uint8_t *)s; - int i; bool binary_is_set = m_flags.IsSet(eBinary); m_flags.Clear(eBinary); if (src_byte_order == dst_byte_order) { - for (i=0;i<src_len; ++i) + for (size_t i = 0; i < src_len; ++i) bytes_written += _PutHex8 (src[i], false); } else { - for (i=src_len-1;i>=0; --i) + for (size_t i = src_len-1; i < src_len; --i) bytes_written += _PutHex8 (src[i], false); } if (binary_is_set) diff --git a/lldb/source/Core/StreamFile.cpp b/lldb/source/Core/StreamFile.cpp index 415822789bb..c8e87d91a5a 100644 --- a/lldb/source/Core/StreamFile.cpp +++ b/lldb/source/Core/StreamFile.cpp @@ -24,32 +24,32 @@ using namespace lldb_private; StreamFile::StreamFile () : Stream (), m_file (NULL), - m_path_name (), - m_close_file (false) + m_close_file (false), + m_path_name () { } StreamFile::StreamFile(uint32_t flags, uint32_t addr_size, ByteOrder byte_order, FILE *f) : Stream (flags, addr_size, byte_order), m_file(f), - m_path_name (), - m_close_file(false) + m_close_file(false), + m_path_name () { } StreamFile::StreamFile(FILE *f) : Stream (), m_file(f), - m_path_name (), - m_close_file(false) + m_close_file(false), + m_path_name () { } StreamFile::StreamFile(uint32_t flags, uint32_t addr_size, ByteOrder byte_order, const char *path, const char *permissions) : Stream (flags, addr_size, byte_order), m_file (NULL), - m_path_name (path), - m_close_file(false) + m_close_file(false), + m_path_name (path) { Open(path, permissions); } @@ -57,8 +57,8 @@ StreamFile::StreamFile(uint32_t flags, uint32_t addr_size, ByteOrder byte_order, StreamFile::StreamFile(const char *path, const char *permissions) : Stream (), m_file (NULL), - m_path_name (path), - m_close_file(false) + m_close_file(false), + m_path_name (path) { Open(path, permissions); } diff --git a/lldb/source/Core/StringList.cpp b/lldb/source/Core/StringList.cpp index cb96fb0f7b9..61d78834966 100644 --- a/lldb/source/Core/StringList.cpp +++ b/lldb/source/Core/StringList.cpp @@ -68,7 +68,7 @@ StringList::AppendList (StringList strings) { uint32_t len = strings.GetSize(); - for (int i = 0; i < len; ++i) + for (uint32_t i = 0; i < len; ++i) m_strings.push_back (strings.GetStringAtIndex(i)); } @@ -106,7 +106,7 @@ StringList::LongestCommonPrefix (std::string &common_prefix) for (++pos; pos != end; ++pos) { - int new_size = strlen (m_strings[pos].c_str()); + size_t new_size = strlen (m_strings[pos].c_str()); // First trim common_prefix if it is longer than the current element: if (common_prefix.size() > new_size) @@ -114,7 +114,7 @@ StringList::LongestCommonPrefix (std::string &common_prefix) // Then trim it at the first disparity: - for (int i = 0; i < common_prefix.size(); i++) + for (size_t i = 0; i < common_prefix.size(); i++) { if (m_strings[pos][i] != common_prefix[i]) { @@ -189,7 +189,7 @@ StringList::RemoveBlankLines () if (GetSize() == 0) return; - int idx = 0; + size_t idx = 0; while (idx < m_strings.size()) { if (m_strings[idx].empty()) diff --git a/lldb/source/Core/Value.cpp b/lldb/source/Core/Value.cpp index c4c17dd0428..32c27496b8f 100644 --- a/lldb/source/Core/Value.cpp +++ b/lldb/source/Core/Value.cpp @@ -616,7 +616,7 @@ Value::GetValueAsData (ExecutionContext *exe_ctx, clang::ASTContext *ast_context data.SetData(data_sp); } - uint8_t* dst = (uint8_t*)data.PeekData (data_offset, byte_size); + uint8_t* dst = const_cast<uint8_t*>(data.PeekData (data_offset, byte_size)); if (dst != NULL) { if (address_type == eAddressTypeHost) @@ -677,6 +677,10 @@ Value::ResolveValue(ExecutionContext *exe_ctx, clang::ASTContext *ast_context) case eValueTypeScalar: // raw scalar value break; + case eContextTypeValue: + m_value.Clear(); // TODO: Sean, fill this in + break; + default: case eValueTypeFileAddress: m_value.Clear(); @@ -757,6 +761,7 @@ Value::GetContextTypeAsCString (ContextType context_type) case eContextTypeDCRegisterInfo: return "RegisterInfo *"; case eContextTypeDCType: return "Type *"; case eContextTypeDCVariable: return "Variable *"; + case eContextTypeValue: return "Value"; // TODO: Sean, more description here? }; return "???"; } diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index 8baa4e1a979..4a1e002242e 100644 --- a/lldb/source/Core/ValueObject.cpp +++ b/lldb/source/Core/ValueObject.cpp @@ -516,6 +516,9 @@ ValueObject::GetValueAsCString (ExecutionContextScope *exe_scope) } } break; + + default: + break; } } } @@ -579,7 +582,7 @@ ValueObject::SetValueFromCString (ExecutionContextScope *exe_scope, const char * { const size_t byte_size = GetByteSize(); const off_t byte_offset = GetByteOffset(); - uint8_t *dst = (uint8_t *)m_data.PeekData(byte_offset, byte_size); + uint8_t *dst = const_cast<uint8_t *>(m_data.PeekData(byte_offset, byte_size)); if (dst != NULL) { // We are decoding a float into host byte order below, so make diff --git a/lldb/source/Core/ValueObjectChild.cpp b/lldb/source/Core/ValueObjectChild.cpp index 5c6e9d2e357..b9258bd45db 100644 --- a/lldb/source/Core/ValueObjectChild.cpp +++ b/lldb/source/Core/ValueObjectChild.cpp @@ -111,9 +111,9 @@ ValueObjectChild::GetTypeName() const char *clang_type_name = m_type_name.AsCString(); if (clang_type_name) { - char bitfield_type_name[strlen(clang_type_name) + 32]; - ::snprintf (bitfield_type_name, sizeof(bitfield_type_name), "%s:%u", clang_type_name, m_bitfield_bit_size); - m_type_name.SetCString(bitfield_type_name); + std::vector<char> bitfield_type_name (strlen(clang_type_name) + 32, 0); + ::snprintf (bitfield_type_name.data(), bitfield_type_name.size(), "%s:%u", clang_type_name, m_bitfield_bit_size); + m_type_name.SetCString(bitfield_type_name.data()); } } } diff --git a/lldb/source/Expression/ClangExpression.cpp b/lldb/source/Expression/ClangExpression.cpp index 702c273db9f..2383faef054 100644 --- a/lldb/source/Expression/ClangExpression.cpp +++ b/lldb/source/Expression/ClangExpression.cpp @@ -195,9 +195,12 @@ static FrontendAction *CreateFrontendBaseAction(CompilerInstance &CI) { ClangExpression::ClangExpression(const char *target_triple, ClangExpressionDeclMap *decl_map) : m_target_triple (), - m_jit_mm_ptr (NULL), + m_decl_map (decl_map), + m_clang_ap (), m_code_generator_ptr (NULL), - m_decl_map (decl_map) + m_jit_mm_ptr (NULL), + m_execution_engine (), + m_jitted_functions () { if (target_triple && target_triple[0]) m_target_triple = target_triple; diff --git a/lldb/source/Expression/ClangFunction.cpp b/lldb/source/Expression/ClangFunction.cpp index f833bab1320..3b775e5cb36 100644 --- a/lldb/source/Expression/ClangFunction.cpp +++ b/lldb/source/Expression/ClangFunction.cpp @@ -43,14 +43,19 @@ using namespace lldb_private; //---------------------------------------------------------------------- ClangFunction::ClangFunction(const char *target_triple, ClangASTContext *ast_context, void *return_qualtype, const Address& functionAddress, const ValueList &arg_value_list) : ClangExpression (target_triple, NULL), - m_function_addr (functionAddress), m_function_ptr (NULL), - m_arg_values (arg_value_list), - m_clang_ast_context (ast_context), + m_function_addr (functionAddress), m_function_return_qual_type(return_qualtype), + m_clang_ast_context (ast_context), m_wrapper_function_name ("__lldb_caller_function"), m_wrapper_struct_name ("__lldb_caller_struct"), + m_wrapper_function_addr (), + m_wrapper_args_addrs (), + m_struct_layout (NULL), + m_arg_values (arg_value_list), + m_value_struct_size (0), m_return_offset(0), + m_return_size (0), m_compiled (false), m_JITted (false) { @@ -59,12 +64,18 @@ ClangFunction::ClangFunction(const char *target_triple, ClangASTContext *ast_con ClangFunction::ClangFunction(const char *target_triple, Function &function, ClangASTContext *ast_context, const ValueList &arg_value_list) : ClangExpression (target_triple, NULL), m_function_ptr (&function), - m_arg_values (arg_value_list), + m_function_addr (), + m_function_return_qual_type (), m_clang_ast_context (ast_context), - m_function_return_qual_type (NULL), m_wrapper_function_name ("__lldb_function_caller"), m_wrapper_struct_name ("__lldb_caller_struct"), - m_return_offset(0), + m_wrapper_function_addr (), + m_wrapper_args_addrs (), + m_struct_layout (NULL), + m_arg_values (arg_value_list), + m_value_struct_size (0), + m_return_offset (0), + m_return_size (0), m_compiled (false), m_JITted (false) { @@ -109,22 +120,24 @@ ClangFunction::CompileFunction (Stream &errors) // to pull the defined arguments out of the function, then add the types from the // arguments list for the variable arguments. - size_t num_args = -1; + uint32_t num_args = UINT32_MAX; bool trust_function = false; // GetArgumentCount returns -1 for an unprototyped function. if (m_function_ptr) { - num_args = m_function_ptr->GetArgumentCount(); - if (num_args != -1) + int num_func_args = m_function_ptr->GetArgumentCount(); + if (num_func_args >= 0) trust_function = true; + else + num_args = num_func_args; } - if (num_args == -1) + if (num_args == UINT32_MAX) num_args = m_arg_values.GetSize(); std::string args_buffer; // This one stores the definition of all the args in "struct caller". std::string args_list_buffer; // This one stores the argument list called from the structure. - for (int i = 0; i < num_args; i++) + for (size_t i = 0; i < num_args; i++) { const char *type_string; std::string type_stdstr; @@ -157,7 +170,7 @@ ClangFunction::CompileFunction (Stream &errors) char arg_buf[32]; args_buffer.append (" "); args_buffer.append (type_string); - snprintf(arg_buf, 31, "arg_%d", i); + snprintf(arg_buf, 31, "arg_%zd", i); args_buffer.push_back (' '); args_buffer.append (arg_buf); args_buffer.append (";\n"); @@ -253,8 +266,8 @@ ClangFunction::WriteFunctionWrapper (ExecutionContext &exc_context, Stream &erro } // Next get the call address for the function: - m_wrapper_fun_addr = GetFunctionAddress (m_wrapper_function_name.c_str()); - if (m_wrapper_fun_addr == LLDB_INVALID_ADDRESS) + m_wrapper_function_addr = GetFunctionAddress (m_wrapper_function_name.c_str()); + if (m_wrapper_function_addr == LLDB_INVALID_ADDRESS) return false; return true; @@ -322,7 +335,7 @@ ClangFunction::WriteFunctionArguments (ExecutionContext &exc_context, lldb::addr return false; } - for (int i = 0; i < num_args; i++) + for (size_t i = 0; i < num_args; i++) { // FIXME: We should sanity check sizes. @@ -366,7 +379,7 @@ ClangFunction::InsertFunction (ExecutionContext &exc_context, lldb::addr_t &args Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP); if (log) - log->Printf ("Call Address: 0x%llx Struct Address: 0x%llx.\n", m_wrapper_fun_addr, args_addr_ref); + log->Printf ("Call Address: 0x%llx Struct Address: 0x%llx.\n", m_wrapper_function_addr, args_addr_ref); return true; } @@ -386,7 +399,7 @@ ClangFunction::GetThreadPlanToCallFunction (ExecutionContext &exc_context, lldb: // Okay, now run the function: - Address wrapper_address (NULL, m_wrapper_fun_addr); + Address wrapper_address (NULL, m_wrapper_function_addr); ThreadPlan *new_plan = new ThreadPlanCallFunction (*exc_context.thread, wrapper_address, args_addr, diff --git a/lldb/source/Expression/ClangStmtVisitor.cpp b/lldb/source/Expression/ClangStmtVisitor.cpp index b3aecebaeac..cfe525068a5 100644 --- a/lldb/source/Expression/ClangStmtVisitor.cpp +++ b/lldb/source/Expression/ClangStmtVisitor.cpp @@ -37,6 +37,9 @@ GetScalarTypeForClangType (clang::ASTContext &ast_context, clang::QualType clang switch (clang_type->getTypeClass()) { + default: + break; + case clang::Type::FunctionNoProto: case clang::Type::FunctionProto: break; @@ -135,8 +138,8 @@ lldb_private::ClangStmtVisitor::ClangStmtVisitor lldb_private::StreamString &strm ) : m_ast_context (ast_context), - m_variable_list (variable_list), m_decl_map (decl_map), + m_variable_list (variable_list), m_stream (strm) { } @@ -477,22 +480,10 @@ lldb_private::ClangStmtVisitor::VisitStringLiteral (clang::StringLiteral *Str) bool is_wide = Str->isWide(); size_t new_length = byte_length + (is_wide ? 1 : 2); + + std::string null_terminated_string (Str->getStrData(), byte_length); - uint8_t null_terminated_string[new_length]; - - memcpy(&null_terminated_string[0], Str->getStrData(), byte_length); - - if(is_wide) - { - null_terminated_string[byte_length] = '\0'; - null_terminated_string[byte_length + 1] = '\0'; - } - else - { - null_terminated_string[byte_length] = '\0'; - } - - Value *val = new Value(null_terminated_string, new_length); + Value *val = new Value((uint8_t*)null_terminated_string.c_str(), new_length); val->SetContext(Value::eContextTypeOpaqueClangQualType, Str->getType().getAsOpaquePtr()); uint32_t val_idx = m_variable_list.AppendValue(val); diff --git a/lldb/source/Expression/DWARFExpression.cpp b/lldb/source/Expression/DWARFExpression.cpp index 3873766a07b..839cf2ef592 100644 --- a/lldb/source/Expression/DWARFExpression.cpp +++ b/lldb/source/Expression/DWARFExpression.cpp @@ -303,6 +303,9 @@ DWARFExpression::DumpLocation (Stream *s, uint32_t offset, uint32_t length, lldb switch (level) { + default: + break; + case lldb::eDescriptionLevelBrief: if (offset > start_offset) s->PutChar(' '); diff --git a/lldb/source/Expression/Makefile b/lldb/source/Expression/Makefile new file mode 100644 index 00000000000..fa4404f1813 --- /dev/null +++ b/lldb/source/Expression/Makefile @@ -0,0 +1,14 @@ +##===- source/Expression/Makefile --------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../.. +LIBRARYNAME := lldbExpression +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Generated/Makefile b/lldb/source/Generated/Makefile new file mode 100644 index 00000000000..8a3569a270b --- /dev/null +++ b/lldb/source/Generated/Makefile @@ -0,0 +1,19 @@ +##===- source/Generated/Makefile ---------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../.. +LIBRARYNAME := lldbGenerated +BUILD_ARCHIVE = 1 + +BUILT_SOURCES = LLDB_vers.c + +include $(LLDB_LEVEL)/Makefile + +LLDB_vers.c: $(PROJ_SRC_DIR)/../../scripts/generate-vers.pl $(PROJ_SRC_DIR)/../../lldb.xcodeproj/project.pbxproj + $(PROJ_SRC_DIR)/../../scripts/generate-vers.pl $(PROJ_SRC_DIR)/../../lldb.xcodeproj/project.pbxproj > $(PROJ_OBJ_DIR)/LLDB_vers.c diff --git a/lldb/source/Host/Makefile b/lldb/source/Host/Makefile new file mode 100644 index 00000000000..76e3d34ff43 --- /dev/null +++ b/lldb/source/Host/Makefile @@ -0,0 +1,20 @@ +##===- source/Host/Makefile --------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../.. + +include $(LLDB_LEVEL)/../../Makefile.config + +ifeq ($(HOST_OS),Darwin) +DIRS := macosx posix +else +DIRS := linux posix +endif + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Host/linux/Makefile b/lldb/source/Host/linux/Makefile new file mode 100644 index 00000000000..bd6d7e4fff8 --- /dev/null +++ b/lldb/source/Host/linux/Makefile @@ -0,0 +1,14 @@ +##===- source/Host/linux/Makefile --------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../.. +LIBRARYNAME := lldbHostLinux +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Host/macosx/Host.mm b/lldb/source/Host/macosx/Host.mm index 4aee4445b61..b2ca2bb6ce9 100644 --- a/lldb/source/Host/macosx/Host.mm +++ b/lldb/source/Host/macosx/Host.mm @@ -23,9 +23,9 @@ #include <Foundation/Foundation.h> -#include "CFCBundle.h" -#include "CFCReleaser.h" -#include "CFCString.h" +#include "cfcpp/CFCBundle.h" +#include "cfcpp/CFCReleaser.h" +#include "cfcpp/CFCString.h" #include "lldb/Host/Host.h" #include "lldb/Core/ArchSpec.h" @@ -434,7 +434,7 @@ Host::SetThreadName (lldb::pid_t pid, lldb::tid_t tid, const char *name) // Set the pthread name if possible if (pid == curr_pid && tid == curr_tid) { - ::pthread_setname_np (name) == 0; + ::pthread_setname_np (name); } #endif ThreadNameAccessor (false, pid, tid, name); @@ -446,21 +446,22 @@ Host::GetProgramFileSpec () static FileSpec g_program_filepsec; if (!g_program_filepsec) { - std::string program_fullpath; - program_fullpath.resize (PATH_MAX); + char program_fullpath[PATH_MAX]; // If DST is NULL, then return the number of bytes needed. - uint32_t len = program_fullpath.size(); - int err = _NSGetExecutablePath ((char *)program_fullpath.data(), &len); - if (err < 0) + uint32_t len = sizeof(program_fullpath); + int err = _NSGetExecutablePath (program_fullpath, &len); + if (err == 0) + g_program_filepsec.SetFile (program_fullpath); + else if (err == -1) { - // The path didn't fit in the buffer provided, increase its size - // and try again - program_fullpath.resize(len); - len = program_fullpath.size(); - err = _NSGetExecutablePath ((char *)program_fullpath.data(), &len); + char *large_program_fullpath = (char *)::malloc (len + 1); + + err = _NSGetExecutablePath (large_program_fullpath, &len); + if (err == 0) + g_program_filepsec.SetFile (large_program_fullpath); + + ::free (large_program_fullpath); } - if (err == 0) - g_program_filepsec.SetFile(program_fullpath.data()); } return g_program_filepsec; } @@ -505,7 +506,7 @@ Host::ResolveExecutableInBundle (FileSpec *file) struct MonitorInfo { - int handle; + uint32_t handle; pthread_t thread; Host::MonitorChildProcessCallback callback; void *callback_baton; diff --git a/lldb/source/Host/macosx/Makefile b/lldb/source/Host/macosx/Makefile new file mode 100644 index 00000000000..de505891d76 --- /dev/null +++ b/lldb/source/Host/macosx/Makefile @@ -0,0 +1,16 @@ +##===- source/Host/macosx/Makefile -------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../.. +LIBRARYNAME := lldbHostMacOSX +BUILD_ARCHIVE = 1 + +SOURCES := $(notdir $(wildcard *.cpp *.mm)) + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Host/macosx/Symbols.cpp b/lldb/source/Host/macosx/Symbols.cpp index 2b8026f7985..ccdde69bcbf 100644 --- a/lldb/source/Host/macosx/Symbols.cpp +++ b/lldb/source/Host/macosx/Symbols.cpp @@ -19,20 +19,23 @@ #include <CoreFoundation/CoreFoundation.h> // Project includes -#include "CFCReleaser.h" #include "lldb/Core/ArchSpec.h" #include "lldb/Core/DataBuffer.h" #include "lldb/Core/DataExtractor.h" #include "lldb/Core/Timer.h" #include "lldb/Core/UUID.h" +#include "Host/macosx/cfcpp/CFCReleaser.h" + using namespace lldb; using namespace lldb_private; extern "C" { + CFURLRef DBGCopyFullDSYMURLForUUID (CFUUIDRef uuid, CFURLRef exec_url); CFDictionaryRef DBGCopyDSYMPropertyLists (CFURLRef dsym_url); -}; + +} static bool SkinnyMachOFileContainsArchAndUUID diff --git a/lldb/source/Host/posix/Makefile b/lldb/source/Host/posix/Makefile new file mode 100644 index 00000000000..d263510f6e2 --- /dev/null +++ b/lldb/source/Host/posix/Makefile @@ -0,0 +1,14 @@ +##===- source/Host/posix/Makefile --------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../.. +LIBRARYNAME := lldbHostPosix +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Interpreter/Args.cpp b/lldb/source/Interpreter/Args.cpp index 3b0019a33f6..78c1003e575 100644 --- a/lldb/source/Interpreter/Args.cpp +++ b/lldb/source/Interpreter/Args.cpp @@ -779,7 +779,7 @@ Args::LongestCommonPrefix (std::string &common_prefix) for (++pos; pos != end; ++pos) { - int new_size = (*pos).size(); + size_t new_size = (*pos).size(); // First trim common_prefix if it is longer than the current element: if (common_prefix.size() > new_size) @@ -787,7 +787,7 @@ Args::LongestCommonPrefix (std::string &common_prefix) // Then trim it at the first disparity: - for (int i = 0; i < common_prefix.size(); i++) + for (size_t i = 0; i < common_prefix.size(); i++) { if ((*pos)[i] != common_prefix[i]) { @@ -998,7 +998,7 @@ Args::ParseArgsForCompletion // So we have to build another Arg and pass that to getopt_long so it doesn't // change the one we have. - std::vector<const char *> dummy_vec(GetArgumentVector(), GetArgumentVector() + GetArgumentCount() + 1); + std::vector<const char *> dummy_vec (GetArgumentVector(), GetArgumentVector() + GetArgumentCount() + 1); bool failed_once = false; uint32_t dash_dash_pos = -1; @@ -1009,7 +1009,10 @@ Args::ParseArgsForCompletion int parse_start = optind; int long_options_index = -1; - val = ::getopt_long (dummy_vec.size() - 1,(char *const *) dummy_vec.data(), sstr.GetData(), long_options, + val = ::getopt_long (dummy_vec.size() - 1, + (char *const *) dummy_vec.data(), + sstr.GetData(), + long_options, &long_options_index); if (val == -1) diff --git a/lldb/source/Interpreter/Makefile b/lldb/source/Interpreter/Makefile new file mode 100644 index 00000000000..f6d7afe39ba --- /dev/null +++ b/lldb/source/Interpreter/Makefile @@ -0,0 +1,24 @@ +##===- source/Interpreter/Makefile ------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../.. +LIBRARYNAME := lldbInterpreter +BUILD_ARCHIVE = 1 + +BUILT_SOURCES := LLDBWrapPython.cpp + +include $(LLDB_LEVEL)/Makefile + +LLDB_PYTHON_SWIG_CPP = $(PROJ_OBJ_ROOT)/$(BuildMode)/LLDBWrapPython.cpp +LLDB_BIN_DIR := $(PROJ_OBJ_ROOT)/$(BuildMode)/bin +PYTHON_DIR := $(LLDB_BIN_DIR) + +LLDBWrapPython.cpp: + swig -c++ -shadow -python -I"$(LLDB_LEVEL)/include" -I./. -outdir "$(LLDB_BIN_DIR)" -o LLDBWrapPython.cpp "$(LLDB_LEVEL)/scripts/lldb.swig" + cp embedded_interpreter.py "$(PYTHON_DIR)" diff --git a/lldb/source/Makefile b/lldb/source/Makefile new file mode 100644 index 00000000000..347aedbe5c2 --- /dev/null +++ b/lldb/source/Makefile @@ -0,0 +1,20 @@ +##===- source/Makefile -------------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := .. +DIRS := API Breakpoint Commands Core Expression Host Interpreter Plugins Symbol Target Utility +LIBRARYNAME := lldbInitAndLog +BUILD_ARCHIVE = 1 + +BUILT_SOURCES = LLDB_vers.c + +include $(LLDB_LEVEL)/Makefile + +LLDB_vers.c: $(LLDB_LEVEL)/scripts/generate-vers.pl $(LLDB_LEVEL)/lldb.xcodeproj/project.pbxproj + $(LLDB_LEVEL)/scripts/generate-vers.pl $(LLDB_LEVEL)/lldb.xcodeproj/project.pbxproj > LLDB_vers.c diff --git a/lldb/source/Plugins/ABI/MacOSX-i386/Makefile b/lldb/source/Plugins/ABI/MacOSX-i386/Makefile new file mode 100644 index 00000000000..d9bc7392256 --- /dev/null +++ b/lldb/source/Plugins/ABI/MacOSX-i386/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/ABI/MacOSX-i386/Makefile -------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginABIMacOSX_i386 +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/ABI/SysV-x86_64/Makefile b/lldb/source/Plugins/ABI/SysV-x86_64/Makefile new file mode 100644 index 00000000000..32990a64f95 --- /dev/null +++ b/lldb/source/Plugins/ABI/SysV-x86_64/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/ABI/SysV-x86_64/Makefile -------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginABISysV_x86_64 +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp index c831d95aab2..945ef871d68 100644 --- a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp +++ b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp @@ -376,8 +376,7 @@ DisassemblerLLVM::DisassemblerLLVM(const ArchSpec &arch) : char triple[256]; if (TripleForArchSpec (arch, triple, sizeof(triple))) { - EDAssemblySyntax_t syntax = SyntaxForArchSpec (arch); - assert(!EDGetDisassembler(&m_disassembler, triple, syntax) && "No disassembler created!"); + assert(!EDGetDisassembler(&m_disassembler, triple, SyntaxForArchSpec (arch)) && "No disassembler created!"); } } diff --git a/lldb/source/Plugins/Disassembler/llvm/Makefile b/lldb/source/Plugins/Disassembler/llvm/Makefile new file mode 100644 index 00000000000..a1309cdd081 --- /dev/null +++ b/lldb/source/Plugins/Disassembler/llvm/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/Disassembler/llvm/Makefile -------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginDisassemblerLLVM +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/Makefile b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/Makefile new file mode 100644 index 00000000000..70400caa7d8 --- /dev/null +++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/Disassembler/llvm/Makefile -------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginDynamicLoaderMacOSX +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/ObjCTrampolineHandler.h b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/ObjCTrampolineHandler.h index bc06d267d2f..961a5cc4d94 100644 --- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/ObjCTrampolineHandler.h +++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/ObjCTrampolineHandler.h @@ -16,7 +16,6 @@ #include <string> // Other libraries and framework includes // Project includes -#include "lldb.h" #include "lldb/Expression/ClangExpression.h" #include "lldb/Expression/ClangFunction.h" #include "lldb/Host/Mutex.h" @@ -128,6 +127,6 @@ private: }; -}; // using namespace lldb_private +} // using namespace lldb_private #endif // lldb_ObjCTrampolineHandler_h_ diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/ThreadPlanStepThroughObjCTrampoline.h b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/ThreadPlanStepThroughObjCTrampoline.h index 8033718277e..f30c333df6b 100644 --- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/ThreadPlanStepThroughObjCTrampoline.h +++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/ThreadPlanStepThroughObjCTrampoline.h @@ -14,8 +14,8 @@ // C++ Includes // Other libraries and framework includes // Project includes -#include "lldb-types.h" -#include "lldb-enumerations.h" +#include "lldb/lldb-types.h" +#include "lldb/lldb-enumerations.h" #include "lldb/Target/ThreadPlan.h" #include "ObjCTrampolineHandler.h" @@ -90,5 +90,6 @@ private: lldb::addr_t m_sel_ptr; }; -}; // namespace lldb_private +} // namespace lldb_private + #endif // lldb_ThreadPlanStepThroughObjCTrampoline_h_ diff --git a/lldb/source/Plugins/Makefile b/lldb/source/Plugins/Makefile new file mode 100644 index 00000000000..ab62b87aec9 --- /dev/null +++ b/lldb/source/Plugins/Makefile @@ -0,0 +1,21 @@ +##===- source/Plugins/Makefile -----------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../.. + +include $(LLDB_LEVEL)/../../Makefile.config + + +DIRS := ABI/MacOSX-i386 ABI/SysV-x86_64 Disassembler/llvm ObjectContainer/BSD-Archive ObjectFile/ELF SymbolFile/DWARF SymbolFile/Symtab SymbolVendor/MacOSX + +ifeq ($(HOST_OS),Darwin) + DIRS += DynamicLoader/MacOSX-DYLD ObjectContainer/Universal-Mach-O ObjectFile/Mach-O Process/gdb-remote Process/Utility +endif + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/ObjectContainer/BSD-Archive/Makefile b/lldb/source/Plugins/ObjectContainer/BSD-Archive/Makefile new file mode 100644 index 00000000000..00c5911ea95 --- /dev/null +++ b/lldb/source/Plugins/ObjectContainer/BSD-Archive/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/ObjectContainer/BSD-Archive/Makefile -------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginObjectContainerBSDArchive +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/Makefile b/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/Makefile new file mode 100644 index 00000000000..274ecddf927 --- /dev/null +++ b/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/ObjectContainer/Universal-Mach-O/Makefile -------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginObjectContainerUniversalMachO +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/ObjectFile/ELF/Makefile b/lldb/source/Plugins/ObjectFile/ELF/Makefile new file mode 100644 index 00000000000..470660bb786 --- /dev/null +++ b/lldb/source/Plugins/ObjectFile/ELF/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/ObjectFile/ELF/Makefile --------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginObjectFileELF +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/Makefile b/lldb/source/Plugins/ObjectFile/Mach-O/Makefile new file mode 100644 index 00000000000..2fab0238e41 --- /dev/null +++ b/lldb/source/Plugins/ObjectFile/Mach-O/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/ObjectFile/Mach-O/Makefile -----------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginObjectFileMachO +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/Process/MacOSX-User/Makefile b/lldb/source/Plugins/Process/MacOSX-User/Makefile new file mode 100644 index 00000000000..8fb3e46e6c8 --- /dev/null +++ b/lldb/source/Plugins/Process/MacOSX-User/Makefile @@ -0,0 +1,17 @@ +##===- source/Plugins/Process/MacOSX-User/Makefile ---------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginProcessMacOSXUser +BUILD_ARCHIVE = 1 + +Source := $(wildcard $(PROJ_SRC_DIR)/source/*.cpp) +Source += $(wildcard $(PROJ_SRC_DIR)/source/MacOSX/*.cpp) + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/Process/MacOSX-User/source/MacOSX/MachException.h b/lldb/source/Plugins/Process/MacOSX-User/source/MacOSX/MachException.h index 1f3aeb07b0a..78e7ed5e68b 100644 --- a/lldb/source/Plugins/Process/MacOSX-User/source/MacOSX/MachException.h +++ b/lldb/source/Plugins/Process/MacOSX-User/source/MacOSX/MachException.h @@ -131,7 +131,7 @@ public: enum { e_actionForward, // Forward signal to inferior process - e_actionStop, // Stop when this signal is received + e_actionStop // Stop when this signal is received }; struct Action { diff --git a/lldb/source/Plugins/Process/MacOSX-User/source/ProcessMacOSX.cpp b/lldb/source/Plugins/Process/MacOSX-User/source/ProcessMacOSX.cpp index 648e9539b8d..b9adb31c8a4 100644 --- a/lldb/source/Plugins/Process/MacOSX-User/source/ProcessMacOSX.cpp +++ b/lldb/source/Plugins/Process/MacOSX-User/source/ProcessMacOSX.cpp @@ -341,7 +341,7 @@ ProcessMacOSX::DoLaunch } Error -ProcessMacOSX::DoAttach (lldb::pid_t attach_pid) +ProcessMacOSX::DoAttachToProcessWithID (lldb::pid_t attach_pid) { Error error; @@ -493,12 +493,19 @@ ProcessMacOSX::DidAttach () } Error -ProcessMacOSX::WillAttach (lldb::pid_t pid) +ProcessMacOSX::WillAttachToProcessWithID (lldb::pid_t pid) { return WillLaunchOrAttach (); } Error +ProcessMacOSX::WillAttachToProcessWithName (const char *process_name, bool wait_for_launch) +{ + return WillLaunchOrAttach (); +} + + +Error ProcessMacOSX::DoResume () { Error error; diff --git a/lldb/source/Plugins/Process/MacOSX-User/source/ProcessMacOSX.h b/lldb/source/Plugins/Process/MacOSX-User/source/ProcessMacOSX.h index 8388d4e46fe..6f1f3362679 100644 --- a/lldb/source/Plugins/Process/MacOSX-User/source/ProcessMacOSX.h +++ b/lldb/source/Plugins/Process/MacOSX-User/source/ProcessMacOSX.h @@ -22,8 +22,8 @@ #include "lldb/Target/Thread.h" // Project includes -#include "MachTask.h" -#include "MachException.h" +#include "MacOSX/MachTask.h" +#include "MacOSX/MachException.h" typedef enum PDLaunch { @@ -33,6 +33,7 @@ typedef enum PDLaunch #if defined (__arm__) eLaunchSpringBoard, #endif + kNumPDLaunchTypes } PDLaunchType; @@ -99,10 +100,13 @@ public: DidLaunch (); virtual lldb_private::Error - WillAttach (lldb::pid_t pid); + WillAttachToProcessWithID (lldb::pid_t pid); virtual lldb_private::Error - DoAttach (lldb::pid_t pid); + WillAttachToProcessWithName (const char *process_name, bool wait_for_launch); + + virtual lldb_private::Error + DoAttachToProcessWithID (lldb::pid_t pid); virtual void DidAttach (); diff --git a/lldb/source/Plugins/Process/Utility/LibUnwindRegisterContext.cpp b/lldb/source/Plugins/Process/Utility/LibUnwindRegisterContext.cpp index bf6b6c2eac4..96bba7e9b99 100644 --- a/lldb/source/Plugins/Process/Utility/LibUnwindRegisterContext.cpp +++ b/lldb/source/Plugins/Process/Utility/LibUnwindRegisterContext.cpp @@ -166,6 +166,9 @@ LibUnwindRegisterContext::ReadRegisterValue (uint32_t reg, Scalar &value) break; } break; + + default: + break; } return false; } @@ -197,9 +200,12 @@ LibUnwindRegisterContext::WriteRegisterValue (uint32_t reg, const Scalar &value) const RegisterInfo *reg_info = GetRegisterInfoAtIndex (reg); if (reg_info == NULL) return false; - unw_word_t reg_value; + unw_word_t reg_value = 0; switch (value.GetType()) { + case Scalar::e_void: + return false; + case Scalar::e_sint: reg_value = value.SInt(); break; case Scalar::e_uint: reg_value = value.UInt(); break; case Scalar::e_slong: reg_value = value.SLong(); break; @@ -294,6 +300,9 @@ LibUnwindRegisterContext::WriteRegisterBytes (uint32_t reg, DataExtractor &data, default: return false; } + + default: + return false; } return WriteRegisterValue (reg, value); } diff --git a/lldb/source/Plugins/Process/Utility/LibUnwindRegisterContext.h b/lldb/source/Plugins/Process/Utility/LibUnwindRegisterContext.h index 4e89b27961f..bd7d8bd3bea 100644 --- a/lldb/source/Plugins/Process/Utility/LibUnwindRegisterContext.h +++ b/lldb/source/Plugins/Process/Utility/LibUnwindRegisterContext.h @@ -17,7 +17,7 @@ #include "lldb/lldb-private.h" #include "lldb/Target/RegisterContext.h" -#include "libunwind.h" +#include "libunwind/include/libunwind.h" class LibUnwindRegisterContext : public lldb_private::RegisterContext { diff --git a/lldb/source/Plugins/Process/Utility/MacOSXLibunwindCallbacks.cpp b/lldb/source/Plugins/Process/Utility/MacOSXLibunwindCallbacks.cpp index e6c7b354abc..902e22c3431 100644 --- a/lldb/source/Plugins/Process/Utility/MacOSXLibunwindCallbacks.cpp +++ b/lldb/source/Plugins/Process/Utility/MacOSXLibunwindCallbacks.cpp @@ -21,10 +21,11 @@ #include "lldb/Target/Target.h" #include "lldb/Target/Thread.h" -#include "lldb-enumerations.h" -#include "libunwind.h" +#include "lldb/lldb-enumerations.h" #include "llvm-c/EnhancedDisassembly.h" +#include "libunwind/include/libunwind.h" + using namespace lldb; namespace lldb_private { @@ -191,7 +192,15 @@ access_raw (lldb_private::unw_addr_space_t as, lldb_private::unw_word_t addr, ll static int -reg_info (lldb_private::unw_addr_space_t as, lldb_private::unw_regnum_t regnum, lldb_private::unw_regtype_t *type, char *buf, size_t buflen, void *arg) +reg_info +( + lldb_private::unw_addr_space_t as, + lldb_private::unw_regnum_t regnum, + lldb_private::unw_regtype_t *type, + char *buf, + size_t buflen, + void *arg +) { if (arg == 0) return -1; diff --git a/lldb/source/Plugins/Process/Utility/Makefile b/lldb/source/Plugins/Process/Utility/Makefile new file mode 100644 index 00000000000..f82fa88eddb --- /dev/null +++ b/lldb/source/Plugins/Process/Utility/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/Utility/Makefile ---------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginUtility +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp index df2f7c07f65..937ae84e3ee 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp @@ -18,7 +18,7 @@ #include "lldb/Core/StreamString.h" #include "lldb/Target/Thread.h" // Project includes -#include "StringExtractorGDBRemote.h" +#include "Utility/StringExtractorGDBRemote.h" using namespace lldb; using namespace lldb_private; diff --git a/lldb/source/Plugins/Process/Utility/UnwindLibUnwind.h b/lldb/source/Plugins/Process/Utility/UnwindLibUnwind.h index d91f164a2f9..8b3489b80e1 100644 --- a/lldb/source/Plugins/Process/Utility/UnwindLibUnwind.h +++ b/lldb/source/Plugins/Process/Utility/UnwindLibUnwind.h @@ -15,7 +15,7 @@ #include <vector> // Other libraries and framework includes -#include "libunwind.h" +#include "libunwind/include/libunwind.h" // Project includes #include "lldb/lldb-private.h" diff --git a/lldb/source/Plugins/Process/Utility/libunwind/include/libunwind.h b/lldb/source/Plugins/Process/Utility/libunwind/include/libunwind.h index 63cc8ba2366..df7025653ea 100644 --- a/lldb/source/Plugins/Process/Utility/libunwind/include/libunwind.h +++ b/lldb/source/Plugins/Process/Utility/libunwind/include/libunwind.h @@ -56,7 +56,7 @@ enum unw_as_type { UNW_LOCAL, UNW_REMOTE }; struct unw_addr_space { enum unw_as_type type; - uint8_t data[]; + uint8_t data[1]; }; typedef struct unw_addr_space* unw_addr_space_t; @@ -345,7 +345,7 @@ extern int unw_end_of_prologue_setup(unw_cursor_t*, unw_word_t sta // architecture independent register numbers enum { UNW_REG_IP = -1, // instruction pointer - UNW_REG_SP = -2, // stack pointer + UNW_REG_SP = -2 // stack pointer }; @@ -502,7 +502,7 @@ enum { }; -}; // namespace lldb_private +} // namespace lldb_private #endif diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp index c144fed163b..66c4b241ef3 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp @@ -21,7 +21,7 @@ #include "lldb/Host/TimeValue.h" // Project includes -#include "StringExtractorGDBRemote.h" +#include "Utility/StringExtractorGDBRemote.h" #include "ProcessGDBRemote.h" #include "ProcessGDBRemoteLog.h" @@ -78,7 +78,7 @@ GDBRemoteCommunication::CalculcateChecksum (const char *payload, size_t payload_ // We only need to compute the checksum if we are sending acks if (m_send_acks) { - for (int i = 0; i < payload_length; ++i) + for (size_t i = 0; i < payload_length; ++i) checksum += payload[i]; } return checksum & 255; @@ -365,7 +365,10 @@ GDBRemoteCommunication::SendPacketNoLock (const char *payload, size_t payload_le if (bytes_written == packet.GetSize()) { if (m_send_acks) - GetAck (1) == '+'; + { + if (GetAck (1) != '+') + return 0; + } } return bytes_written; } diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.h b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.h index 051fa445ff1..9351c6a7790 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.h +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.h @@ -26,7 +26,7 @@ #include "lldb/Host/Mutex.h" #include "lldb/Host/Predicate.h" -#include "StringExtractorGDBRemote.h" +#include "Utility/StringExtractorGDBRemote.h" class ProcessGDBRemote; diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp index d69b172366d..5af4c9c2035 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp @@ -17,11 +17,11 @@ #include "lldb/Core/Scalar.h" #include "lldb/Core/StreamString.h" // Project includes -#include "StringExtractorGDBRemote.h" +#include "Utility/StringExtractorGDBRemote.h" #include "ProcessGDBRemote.h" #include "ThreadGDBRemote.h" -#include "ARM_GCC_Registers.h" -#include "ARM_DWARF_Registers.h" +#include "Utility/ARM_GCC_Registers.h" +#include "Utility/ARM_DWARF_Registers.h" using namespace lldb; using namespace lldb_private; @@ -171,7 +171,10 @@ GDBRemoteRegisterContext::ReadRegisterValue (uint32_t reg, Scalar &value) return true; } break; - } + + default: + break; + } } return false; } @@ -219,10 +222,10 @@ GDBRemoteRegisterContext::ReadRegisterBytes (uint32_t reg, DataExtractor &data) else { // Get each register individually - packet_len = ::snprintf (packet, sizeof(packet), "p%x", reg, false); + packet_len = ::snprintf (packet, sizeof(packet), "p%x", reg); assert (packet_len < (sizeof(packet) - 1)); if (gdb_comm.SendPacketAndWaitForResponse(packet, response, 1, false)) - if (response.GetHexBytes ((uint8_t*)m_reg_data.PeekData(reg_info->byte_offset, reg_info->byte_size), reg_info->byte_size, '\xcc') == reg_info->byte_size) + if (response.GetHexBytes (const_cast<uint8_t*>(m_reg_data.PeekData(reg_info->byte_offset, reg_info->byte_size)), reg_info->byte_size, '\xcc') == reg_info->byte_size) m_reg_valid[reg] = true; } } @@ -276,7 +279,7 @@ GDBRemoteRegisterContext::WriteRegisterBytes (uint32_t reg, DataExtractor &data, if (reg_info) { // Grab a pointer to where we are going to put this register - uint8_t *dst = (uint8_t *)m_reg_data.PeekData(reg_info->byte_offset, reg_info->byte_size); + uint8_t *dst = const_cast<uint8_t*>(m_reg_data.PeekData(reg_info->byte_offset, reg_info->byte_size)); if (dst == NULL) return false; diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBServer.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBServer.cpp deleted file mode 100644 index a88ec7b09d4..00000000000 --- a/lldb/source/Plugins/Process/gdb-remote/GDBServer.cpp +++ /dev/null @@ -1,1148 +0,0 @@ -//===-- GDBServer.cpp -------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include <sys/socket.h> -#include <sys/types.h> -#include <errno.h> -#include <getopt.h> -#include <netinet/in.h> -#include <sys/select.h> -#include <sys/sysctl.h> -#include <string> -#include <vector> -#include <asl.h> - -#include "GDBServerLog.h" -#include "GDBRemoteSession.h" - -using namespace lldb; - -//---------------------------------------------------------------------- -// Run loop modes which determine which run loop function will be called -//---------------------------------------------------------------------- -typedef enum -{ - eDCGSRunLoopModeInvalid = 0, - eDCGSRunLoopModeGetStartModeFromRemoteProtocol, - eDCGSRunLoopModeInferiorAttaching, - eDCGSRunLoopModeInferiorLaunching, - eDCGSRunLoopModeInferiorExecuting, - eDCGSRunLoopModeInferiorKillOrDetach, - eDCGSRunLoopModeExit -} GSRunLoopMode; - -typedef enum -{ - eLaunchFlavorDefault = 0, - eLaunchFlavorPosixSpawn, -#if defined (__arm__) - eLaunchFlavorSpringBoard, -#endif - eLaunchFlavorForkExec, -} GSLaunchFlavor; - -typedef lldb::shared_ptr<GDBRemoteSession> GDBRemoteSP; - -typedef struct HandleBroadcastEventInfo -{ - TargetSP target_sp; - GDBRemoteSP remote_sp; - GSRunLoopMode mode; - - Target * - GetTarget () - { - return target_sp.get(); - } - - Process * - GetProcess() - { - if (target_sp.get()) - return target_sp->GetProcess().get(); - return NULL; - } - - GDBRemoteSession * - GetRemote () - { - return remote_sp.get(); - } - -}; - - -//---------------------------------------------------------------------- -// Global Variables -//---------------------------------------------------------------------- -static int g_lockdown_opt = 0; -static int g_applist_opt = 0; -static GSLaunchFlavor g_launch_flavor = eLaunchFlavorDefault; -int g_isatty = 0; - -//---------------------------------------------------------------------- -// Run Loop function prototypes -//---------------------------------------------------------------------- -void GSRunLoopGetStartModeFromRemote (HandleBroadcastEventInfo *info); -void GSRunLoopInferiorExecuting (HandleBroadcastEventInfo *info); - - -//---------------------------------------------------------------------- -// Get our program path and arguments from the remote connection. -// We will need to start up the remote connection without a PID, get the -// arguments, wait for the new process to finish launching and hit its -// entry point, and then return the run loop mode that should come next. -//---------------------------------------------------------------------- -void -GSRunLoopGetStartModeFromRemote (HandleBroadcastEventInfo *info) -{ - std::string packet; - - Target *target = info->GetTarget(); - GDBRemoteSession *remote = info->GetRemote(); - if (target != NULL && remote != NULL) - { - // Spin waiting to get the A packet. - while (1) - { - gdb_err_t err = gdb_err; - GDBRemoteSession::PacketEnum type; - - err = remote->HandleReceivedPacket (&type); - - // check if we tried to attach to a process - if (type == GDBRemoteSession::vattach || type == GDBRemoteSession::vattachwait) - { - if (err == gdb_success) - { - info->mode = eDCGSRunLoopModeInferiorExecuting; - return; - } - else - { - Log::STDERR ("error: attach failed."); - info->mode = eDCGSRunLoopModeExit; - return; - } - } - - if (err == gdb_success) - { - // If we got our arguments we are ready to launch using the arguments - // and any environment variables we received. - if (type == GDBRemoteSession::set_argv) - { - info->mode = eDCGSRunLoopModeInferiorLaunching; - return; - } - } - else if (err == gdb_not_connected) - { - Log::STDERR ("error: connection lost."); - info->mode = eDCGSRunLoopModeExit; - return; - } - else - { - // a catch all for any other gdb remote packets that failed - GDBServerLog::LogIf (GS_LOG_MINIMAL, "%s Error getting packet.",__FUNCTION__); - continue; - } - - GDBServerLog::LogIf (GS_LOG_MINIMAL, "#### %s", __FUNCTION__); - } - } - info->mode = eDCGSRunLoopModeExit; -} - - -//---------------------------------------------------------------------- -// This run loop mode will wait for the process to launch and hit its -// entry point. It will currently ignore all events except for the -// process state changed event, where it watches for the process stopped -// or crash process state. -//---------------------------------------------------------------------- -GSRunLoopMode -GSRunLoopLaunchInferior (HandleBroadcastEventInfo *info) -{ - // The Process stuff takes a c array, the GSContext has a vector... - // So make up a c array. - Target *target = info->GetTarget(); - GDBRemoteSession *remote = info->GetRemote(); - Process* process = info->GetProcess(); - - if (process == NULL) - return eDCGSRunLoopModeExit; - - GDBServerLog::LogIf (GS_LOG_MINIMAL, "%s Launching '%s'...", __FUNCTION__, target->GetExecutableModule()->GetFileSpec().GetFilename().AsCString()); - - // Our launch type hasn't been set to anything concrete, so we need to - // figure our how we are going to launch automatically. - - GSLaunchFlavor launch_flavor = g_launch_flavor; - if (launch_flavor == eLaunchFlavorDefault) - { - // Our default launch method is posix spawn - launch_flavor = eLaunchFlavorPosixSpawn; - -#if defined (__arm__) - // Check if we have an app bundle, if so launch using SpringBoard. - if (strstr(inferior_argv[0], ".app")) - { - launch_flavor = eLaunchFlavorSpringBoard; - } -#endif - } - - //ctx.SetLaunchFlavor(launch_flavor); - - const char *stdio_file = NULL; - lldb::pid_t pid = process->Launch (remote->GetARGV(), remote->GetENVP(), stdio_file, stdio_file, stdio_file); - - if (pid == LLDB_INVALID_PROCESS_ID) - { - Log::STDERR ("error: process launch failed: %s", process->GetError().AsCString()); - } - else - { - if (remote->IsConnected()) - { - // It we are connected already, the next thing gdb will do is ask - // whether the launch succeeded, and if not, whether there is an - // error code. So we need to fetch one packet from gdb before we wait - // on the stop from the target. - gdb_err_t err = gdb_err; - GDBRemoteSession::PacketEnum type; - - err = remote->HandleReceivedPacket (&type); - - if (err != gdb_success) - { - GDBServerLog::LogIf (GS_LOG_MINIMAL, "%s Error getting packet.", __FUNCTION__); - return eDCGSRunLoopModeExit; - } - if (type != GDBRemoteSession::query_launch_success) - { - GDBServerLog::LogIf (GS_LOG_MINIMAL, "%s Didn't get the expected qLaunchSuccess packet.", __FUNCTION__); - } - } - } - - Listener listener("GSRunLoopLaunchInferior"); - listener.StartListeningForEvents (process, Process::eBroadcastBitStateChanged); - while (process->GetID() != LLDB_INVALID_PROCESS_ID) - { - uint32_t event_mask = 0; - while (listener.WaitForEvent(NULL, &event_mask)) - { - if (event_mask & Process::eBroadcastBitStateChanged) - { - Event event; - StateType event_state; - while ((event_state = process->GetNextEvent (&event))) - if (StateIsStoppedState(event_state)) - { - GDBServerLog::LogIf (GS_LOG_EVENTS, "%s process %4.4x stopped with state %s", __FUNCTION__, pid, StateAsCString(event_state)); - - switch (event_state) - { - default: - case eStateInvalid: - case eStateUnloaded: - case eStateAttaching: - case eStateLaunching: - case eStateSuspended: - break; // Ignore - - case eStateRunning: - case eStateStepping: - // Still waiting to stop at entry point... - break; - - case eStateStopped: - case eStateCrashed: - return eDCGSRunLoopModeInferiorExecuting; - - case eStateDetached: - case eStateExited: - pid = LLDB_INVALID_PROCESS_ID; - return eDCGSRunLoopModeExit; - } - } - - if (event_state = eStateInvalid) - break; - } - } - } - - return eDCGSRunLoopModeExit; -} - - -//---------------------------------------------------------------------- -// This run loop mode will wait for the process to launch and hit its -// entry point. It will currently ignore all events except for the -// process state changed event, where it watches for the process stopped -// or crash process state. -//---------------------------------------------------------------------- -GSRunLoopMode -GSRunLoopLaunchAttaching (HandleBroadcastEventInfo *info, lldb::pid_t& pid) -{ - Process* process = info->GetProcess(); - - GDBServerLog::LogIf (GS_LOG_MINIMAL, "%s Attaching to pid %i...", __FUNCTION__, pid); - pid = process->Attach(pid); - - if (pid == LLDB_INVALID_PROCESS_ID) - return eDCGSRunLoopModeExit; - return eDCGSRunLoopModeInferiorExecuting; -} - -//---------------------------------------------------------------------- -// Watch for signals: -// SIGINT: so we can halt our inferior. (disabled for now) -// SIGPIPE: in case our child process dies -//---------------------------------------------------------------------- -lldb::pid_t g_pid; -int g_sigpipe_received = 0; -void -signal_handler(int signo) -{ - GDBServerLog::LogIf (GS_LOG_MINIMAL, "%s (%s)", __FUNCTION__, Host::GetSignalAsCString(signo)); - - switch (signo) - { -// case SIGINT: -// DNBProcessKill (g_pid, signo); -// break; - - case SIGPIPE: - g_sigpipe_received = 1; - break; - } -} - -// Return the new run loop mode based off of the current process state -void -HandleProcessStateChange (HandleBroadcastEventInfo *info, bool initialize) -{ - Process *process = info->GetProcess(); - if (process == NULL) - { - info->mode = eDCGSRunLoopModeExit; - return; - } - - if (process->GetID() == LLDB_INVALID_PROCESS_ID) - { - GDBServerLog::LogIf (GS_LOG_MINIMAL, "#### %s error: pid invalid, exiting...", __FUNCTION__); - info->mode = eDCGSRunLoopModeExit; - return; - } - StateType pid_state = process->GetState (); - - GDBServerLog::LogIf (GS_LOG_MINIMAL, "%s (info, initialize=%i) pid_state = %s", __FUNCTION__, (int)initialize, StateAsCString(pid_state)); - - switch (pid_state) - { - case eStateInvalid: - case eStateUnloaded: - // Something bad happened - info->mode = eDCGSRunLoopModeExit; - return; - - case eStateAttaching: - case eStateLaunching: - info->mode = eDCGSRunLoopModeInferiorExecuting; - return; - - case eStateSuspended: - case eStateCrashed: - case eStateStopped: - if (initialize == false) - { - // Compare the last stop count to our current notion of a stop count - // to make sure we don't notify more than once for a given stop. - static uint32_t g_prev_stop_id = 0; - uint32_t stop_id = process->GetStopID(); - bool pid_stop_count_changed = g_prev_stop_id != stop_id; - if (pid_stop_count_changed) - { - info->GetRemote()->FlushSTDIO(); - - if (stop_id == 1) - { - GDBServerLog::LogIf (GS_LOG_MINIMAL, "%s (&remote, initialize=%i) pid_state = %s pid_stop_count %u (old %u)) Notify??? no, first stop...", __FUNCTION__, (int)initialize, StateAsCString (pid_state), stop_id, g_prev_stop_id); - } - else - { - - GDBServerLog::LogIf (GS_LOG_MINIMAL, "%s (&remote, initialize=%i) pid_state = %s pid_stop_count %u (old %u)) Notify??? YES!!!", __FUNCTION__, (int)initialize, StateAsCString (pid_state), stop_id, g_prev_stop_id); - info->GetRemote()->NotifyThatProcessStopped (); - } - } - else - { - GDBServerLog::LogIf (GS_LOG_MINIMAL, "%s (&remote, initialize=%i) pid_state = %s pid_stop_count %u (old %u)) Notify??? skipping...", __FUNCTION__, (int)initialize, StateAsCString (pid_state), stop_id, g_prev_stop_id); - } - } - info->mode = eDCGSRunLoopModeInferiorExecuting; - return; - - case eStateStepping: - case eStateRunning: - info->mode = eDCGSRunLoopModeInferiorExecuting; - return; - - case eStateExited: - info->GetRemote()->HandlePacket_last_signal (NULL); - info->mode = eDCGSRunLoopModeExit; - return; - - } - - // Catch all... - info->mode = eDCGSRunLoopModeExit; -} - -bool -CommunicationHandleBroadcastEvent (Broadcaster *broadcaster, uint32_t event_mask, void *baton) -{ - HandleBroadcastEventInfo *info = (HandleBroadcastEventInfo *)baton; - Process *process = info->GetProcess(); - - if (process == NULL) - { - info->mode = eDCGSRunLoopModeExit; - return true; - } - - if (event_mask & Communication::eBroadcastBitPacketAvailable) - { - if (process->IsRunning()) - { - if (info->GetRemote()->HandleAsyncPacket() == gdb_not_connected) - info->mode = eDCGSRunLoopModeExit; - } - else - { - if (info->GetRemote()->HandleReceivedPacket() == gdb_not_connected) - info->mode = eDCGSRunLoopModeExit; - } - } - if (event_mask & Communication::eBroadcastBitReadThreadDidExit) - { - info->mode = eDCGSRunLoopModeExit; - } - if (event_mask & Communication::eBroadcastBitDisconnected) - { - info->mode = eDCGSRunLoopModeExit; - } - - return true; - -} - -bool -ProcessHandleBroadcastEvent (Broadcaster *broadcaster, uint32_t event_mask, void *baton) -{ - HandleBroadcastEventInfo *info = (HandleBroadcastEventInfo *)baton; - Process *process = info->GetProcess(); - if (process == NULL) - { - info->mode = eDCGSRunLoopModeExit; - return true; - } - - if (event_mask & Process::eBroadcastBitStateChanged) - { - // Consume all available process events with no timeout - Event event; - StateType process_state; - while ((process_state = process->GetNextEvent (&event)) != eStateInvalid) - { - if (StateIsStoppedState(process_state)) - info->GetRemote()->FlushSTDIO(); - HandleProcessStateChange (info, false); - - if (info->mode != eDCGSRunLoopModeInferiorExecuting) - break; - } - } - else - if (event_mask & (Process::eBroadcastBitSTDOUT | Process::eBroadcastBitSTDERR)) - { - info->GetRemote()->FlushSTDIO(); - } - return true; -} - -// This function handles the case where our inferior program is stopped and -// we are waiting for gdb remote protocol packets. When a packet occurs that -// makes the inferior run, we need to leave this function with a new state -// as the return code. -void -GSRunLoopInferiorExecuting (HandleBroadcastEventInfo *info) -{ - GDBServerLog::LogIf (GS_LOG_MINIMAL, "#### %s", __FUNCTION__); - - // Init our mode and set 'is_running' based on the current process state - HandleProcessStateChange (info, true); - - uint32_t desired_mask, acquired_mask; - Listener listener("GSRunLoopInferiorExecuting"); - - desired_mask = Communication::eBroadcastBitPacketAvailable | - Communication::eBroadcastBitReadThreadDidExit | - Communication::eBroadcastBitDisconnected; - - acquired_mask = listener.StartListeningForEvents (&(info->GetRemote()->GetPacketComm()), - desired_mask, - CommunicationHandleBroadcastEvent, - info); - - assert (acquired_mask == desired_mask); - desired_mask = GDBRemotePacket::eBroadcastBitPacketAvailable; - - acquired_mask = listener.StartListeningForEvents (&(info->GetRemote()->GetPacketComm()), - desired_mask, - CommunicationHandleBroadcastEvent, - info); - - assert (acquired_mask == desired_mask); - - desired_mask = Process::eBroadcastBitStateChanged | - Process::eBroadcastBitSTDOUT | - Process::eBroadcastBitSTDERR ; - acquired_mask = listener.StartListeningForEvents (info->GetProcess (), - desired_mask, - ProcessHandleBroadcastEvent, - info); - - assert (acquired_mask == desired_mask); - - Process *process = info->GetProcess(); - - while (process->IsAlive()) - { - if (!info->GetRemote()->IsConnected()) - { - info->mode = eDCGSRunLoopModeInferiorKillOrDetach; - break; - } - - // We want to make sure we consume all process state changes and have - // whomever is notifying us to wait for us to reset the event bit before - // continuing. - //ctx.Events().SetResetAckMask (GSContext::event_proc_state_changed); - uint32_t event_mask = 0; - Broadcaster *broadcaster = listener.WaitForEvent(NULL, &event_mask); - if (broadcaster) - { - listener.HandleBroadcastEvent(broadcaster, event_mask); - } - } -} - - -//---------------------------------------------------------------------- -// Convenience function to set up the remote listening port -// Returns 1 for success 0 for failure. -//---------------------------------------------------------------------- - -static bool -StartListening (HandleBroadcastEventInfo *info, int listen_port) -{ - if (!info->GetRemote()->IsConnected()) - { - Log::STDOUT ("Listening to port %i...\n", listen_port); - char connect_url[256]; - snprintf(connect_url, sizeof(connect_url), "listen://%i", listen_port); - - Communication &comm = info->remote_sp->GetPacketComm(); - comm.SetConnection (new ConnectionFileDescriptor); - - if (comm.Connect (connect_url)) - { - if (comm.StartReadThread()) - return true; - - Log::STDERR ("Failed to start the communication read thread.\n", connect_url); - comm.Disconnect(); - } - else - { - Log::STDERR ("Failed to connection to %s.\n", connect_url); - } - return false; - } - return true; -} - -//---------------------------------------------------------------------- -// ASL Logging callback that can be registered with DNBLogSetLogDCScriptInterpreter::Type -//---------------------------------------------------------------------- -//void -//ASLLogDCScriptInterpreter::Type(void *baton, uint32_t flags, const char *format, va_list args) -//{ -// if (format == NULL) -// return; -// static aslmsg g_aslmsg = NULL; -// if (g_aslmsg == NULL) -// { -// g_aslmsg = ::asl_new (ASL_TYPE_MSG); -// char asl_key_sender[PATH_MAX]; -// snprintf(asl_key_sender, sizeof(asl_key_sender), "com.apple.dc-gdbserver-%g", dc_gdbserverVersionNumber); -// ::asl_set (g_aslmsg, ASL_KEY_SENDER, asl_key_sender); -// } -// -// int asl_level; -// if (flags & DNBLOG_FLAG_FATAL) asl_level = ASL_LEVEL_CRIT; -// else if (flags & DNBLOG_FLAG_ERROR) asl_level = ASL_LEVEL_ERR; -// else if (flags & DNBLOG_FLAG_WARNING) asl_level = ASL_LEVEL_WARNING; -// else if (flags & DNBLOG_FLAG_VERBOSE) asl_level = ASL_LEVEL_WARNING; //ASL_LEVEL_INFO; -// else asl_level = ASL_LEVEL_WARNING; //ASL_LEVEL_DEBUG; -// -// ::asl_vlog (NULL, g_aslmsg, asl_level, format, args); -//} - -//---------------------------------------------------------------------- -// FILE based Logging callback that can be registered with -// DNBLogSetLogDCScriptInterpreter::Type -//---------------------------------------------------------------------- -void -FileLogDCScriptInterpreter::Type(void *baton, uint32_t flags, const char *format, va_list args) -{ - if (baton == NULL || format == NULL) - return; - - ::vfprintf ((FILE *)baton, format, args); - ::fprintf ((FILE *)baton, "\n"); -} - -//---------------------------------------------------------------------- -// option descriptors for getopt_long() -//---------------------------------------------------------------------- -static struct option g_long_options[] = -{ - { "arch", required_argument, NULL, 'c' }, - { "attach", required_argument, NULL, 'a' }, - { "debug", no_argument, NULL, 'g' }, - { "verbose", no_argument, NULL, 'v' }, - { "lockdown", no_argument, &g_lockdown_opt, 1 }, // short option "-k" - { "applist", no_argument, &g_applist_opt, 1 }, // short option "-t" - { "log-file", required_argument, NULL, 'l' }, - { "log-flags", required_argument, NULL, 'f' }, - { "launch", required_argument, NULL, 'x' }, // Valid values are "auto", "posix-spawn", "fork-exec", "springboard" (arm only) - { "waitfor", required_argument, NULL, 'w' }, // Wait for a process whose namet starts with ARG - { "waitfor-interval", required_argument, NULL, 'i' }, // Time in usecs to wait between sampling the pid list when waiting for a process by name - { "waitfor-duration", required_argument, NULL, 'd' }, // The time in seconds to wait for a process to show up by name - { NULL, 0, NULL, 0 } -}; - -extern const double dc_gdbserverVersionNumber; -int -main (int argc, char *argv[]) -{ - Initialize(); - Host::ThreadCreated ("[main]"); - - g_isatty = ::isatty (STDIN_FILENO); - -// signal (SIGINT, signal_handler); - signal (SIGPIPE, signal_handler); - - Log *log = GDBServerLog::GetLogIfAllCategoriesSet(GS_LOG_ALL); - const char *this_exe_name = argv[0]; - int i; - int attach_pid = LLDB_INVALID_PROCESS_ID; - for (i=0; i<argc; i++) - GDBServerLog::LogIf(GS_LOG_DEBUG, "argv[%i] = %s", i, argv[i]); - - FILE* log_file = NULL; - uint32_t log_flags = 0; - // Parse our options - int ch; - int long_option_index = 0; - int debug = 0; - std::string waitfor_pid_name; // Wait for a process that starts with this name - std::string attach_pid_name; - useconds_t waitfor_interval = 1000; // Time in usecs between process lists polls when waiting for a process by name, default 1 msec. - useconds_t waitfor_duration = 0; // Time in seconds to wait for a process by name, 0 means wait forever. - ArchSpec arch; - GSRunLoopMode start_mode = eDCGSRunLoopModeExit; - - while ((ch = getopt_long(argc, argv, "a:c:d:gi:vktl:f:w:x:", g_long_options, &long_option_index)) != -1) - { -// DNBLogDebug("option: ch == %c (0x%2.2x) --%s%c%s\n", -// ch, (uint8_t)ch, -// g_long_options[long_option_index].name, -// g_long_options[long_option_index].has_arg ? '=' : ' ', -// optarg ? optarg : ""); - switch (ch) - { - case 0: // Any optional that auto set themselves will return 0 - break; - - case 'c': - arch.SetArch(optarg); - if (!arch.IsValid()) - { - Log::STDERR ("error: invalid arch string '%s'\n", optarg); - exit (8); - } - break; - - case 'a': - if (optarg && optarg[0]) - { - if (isdigit(optarg[0])) - { - char *end = NULL; - attach_pid = strtoul(optarg, &end, 0); - if (end == NULL || *end != '\0') - { - Log::STDERR ("error: invalid pid option '%s'\n", optarg); - exit (4); - } - } - else - { - attach_pid_name = optarg; - } - start_mode = eDCGSRunLoopModeInferiorAttaching; - } - break; - - // --waitfor=NAME - case 'w': - if (optarg && optarg[0]) - { - waitfor_pid_name = optarg; - start_mode = eDCGSRunLoopModeInferiorAttaching; - } - break; - - // --waitfor-interval=USEC - case 'i': - if (optarg && optarg[0]) - { - char *end = NULL; - waitfor_interval = strtoul(optarg, &end, 0); - if (end == NULL || *end != '\0') - { - Log::STDERR ("error: invalid waitfor-interval option value '%s'.\n", optarg); - exit (6); - } - } - break; - - // --waitfor-duration=SEC - case 'd': - if (optarg && optarg[0]) - { - char *end = NULL; - waitfor_duration = strtoul(optarg, &end, 0); - if (end == NULL || *end != '\0') - { - Log::STDERR ("error: invalid waitfor-duration option value '%s'.\n", optarg); - exit (7); - } - } - break; - - case 'x': - if (optarg && optarg[0]) - { - if (strcasecmp(optarg, "auto") == 0) - g_launch_flavor = eLaunchFlavorDefault; - else if (strcasestr(optarg, "posix") == optarg) - g_launch_flavor = eLaunchFlavorPosixSpawn; - else if (strcasestr(optarg, "fork") == optarg) - g_launch_flavor = eLaunchFlavorForkExec; -#if defined (__arm__) - else if (strcasestr(optarg, "spring") == optarg) - g_launch_flavor = eLaunchFlavorSpringBoard; -#endif - else - { - Log::STDERR ("error: invalid TYPE for the --launch=TYPE (-x TYPE) option: '%s'\n", optarg); - Log::STDERR ("Valid values TYPE are:\n"); - Log::STDERR (" auto Auto-detect the best launch method to use.\n"); - Log::STDERR (" posix Launch the executable using posix_spawn.\n"); - Log::STDERR (" fork Launch the executable using fork and exec.\n"); -#if defined (__arm__) - Log::STDERR (" spring Launch the executable through Springboard.\n"); -#endif - exit (5); - } - } - break; - - case 'l': // Set Log File - if (optarg && optarg[0]) - { - if (strcasecmp(optarg, "stdout") == 0) - log_file = stdout; - else if (strcasecmp(optarg, "stderr") == 0) - log_file = stderr; - else - log_file = fopen(optarg, "w+"); - - if (log_file == NULL) - { - const char *errno_str = strerror(errno); - Log::STDERR ("Failed to open log file '%s' for writing: errno = %i (%s)", optarg, errno, errno_str ? errno_str : "unknown error"); - } - } - break; - - case 'f': // Log Flags - if (optarg && optarg[0]) - log_flags = strtoul(optarg, NULL, 0); - break; - - case 'g': - debug = 1; - //DNBLogSetDebug(1); - break; - - case 't': - g_applist_opt = 1; - break; - - case 'k': - g_lockdown_opt = 1; - break; - - case 'v': - //DNBLogSetVerbose(1); - break; - } - } - - // Skip any options we consumed with getopt_long - argc -= optind; - argv += optind; - - // It is ok for us to set NULL as the logfile (this will disable any logging) - -// if (log_file != NULL) -// { -// DNBLogSetLogDCScriptInterpreter::Type(FileLogDCScriptInterpreter::Type, log_file); -// // If our log file was set, yet we have no log flags, log everything! -// if (log_flags == 0) -// log_flags = LOG_ALL | LOG_DCGS_ALL; -// -// DNBLogSetLogMask (log_flags); -// } -// else -// { -// // Enable DNB logging -// DNBLogSetLogDCScriptInterpreter::Type(ASLLogDCScriptInterpreter::Type, NULL); -// DNBLogSetLogMask (log_flags); -// -// } - - // as long as we're dropping remotenub in as a replacement for gdbserver, - // explicitly note that this is not gdbserver. - - Log::STDOUT ("debugserver-%g \n", dc_gdbserverVersionNumber); - int listen_port = -1; - if (g_lockdown_opt == 0 && g_applist_opt == 0) - { - // Make sure we at least have port - if (argc < 1) - { - Log::STDERR ("Usage: %s host:port [program-name program-arg1 program-arg2 ...]\n", this_exe_name); - exit (1); - } - // accept 'localhost:' prefix on port number - - std::string host_str; - std::string port_str(argv[0]); - - // We just used the host:port arg... - argc--; - argv++; - - size_t port_idx = port_str.find(':'); - if (port_idx != std::string::npos) - { - host_str.assign(port_str, 0, port_idx); - port_str.erase(0, port_idx + 1); - } - - if (port_str.empty()) - { - Log::STDERR ("error: no port specified\nUsage: %s host:port [program-name program-arg1 program-arg2 ...]\n", this_exe_name); - exit (2); - } - else if (port_str.find_first_not_of("0123456789") != std::string::npos) - { - Log::STDERR ("error: port must be an integer: %s\nUsage: %s host:port [program-name program-arg1 program-arg2 ...]\n", port_str.c_str(), this_exe_name); - exit (3); - } - //DNBLogDebug("host_str = '%s' port_str = '%s'", host_str.c_str(), port_str.c_str()); - listen_port = atoi (port_str.c_str()); - } - - - // We must set up some communications now. - - FileSpec exe_spec; - if (argv[0]) - exe_spec.SetFile (argv[0]); - - HandleBroadcastEventInfo info; - info.target_sp = TargetList::SharedList().CreateTarget(&exe_spec, &arch); - ProcessSP process_sp (info.target_sp->CreateProcess ()); - info.remote_sp.reset (new GDBRemoteSession (process_sp)); - - info.remote_sp->SetLog (log); - StreamString sstr; - sstr.Printf("ConnectionFileDescriptor(%s)", argv[0]); - - if (info.remote_sp.get() == NULL) - { - Log::STDERR ("error: failed to create a GDBRemoteSession class\n"); - return -1; - } - - - - // If we know we're waiting to attach, we don't need any of this other info. - if (start_mode != eDCGSRunLoopModeInferiorAttaching) - { - if (argc == 0 || g_lockdown_opt) - { - if (g_lockdown_opt != 0) - { - // Work around for SIGPIPE crashes due to posix_spawn issue. We have to close - // STDOUT and STDERR, else the first time we try and do any, we get SIGPIPE and - // die as posix_spawn is doing bad things with our file descriptors at the moment. - int null = open("/dev/null", O_RDWR); - dup2(null, STDOUT_FILENO); - dup2(null, STDERR_FILENO); - } - else if (g_applist_opt != 0) - { -// // List all applications we are able to see -// std::string applist_plist; -// int err = ListApplications(applist_plist, false, false); -// if (err == 0) -// { -// fputs (applist_plist.c_str(), stdout); -// } -// else -// { -// Log::STDERR ("error: ListApplications returned error %i\n", err); -// } -// // Exit with appropriate error if we were asked to list the applications -// // with no other args were given (and we weren't trying to do this over -// // lockdown) -// return err; - return 0; - } - - //DNBLogDebug("Get args from remote protocol..."); - start_mode = eDCGSRunLoopModeGetStartModeFromRemoteProtocol; - } - else - { - start_mode = eDCGSRunLoopModeInferiorLaunching; - // Fill in the argv array in the context from the rest of our args. - // Skip the name of this executable and the port number - info.remote_sp->SetArguments (argc, argv); - } - } - - if (start_mode == eDCGSRunLoopModeExit) - return -1; - - info.mode = start_mode; - - while (info.mode != eDCGSRunLoopModeExit) - { - switch (info.mode) - { - case eDCGSRunLoopModeGetStartModeFromRemoteProtocol: - #if defined (__arm__) - if (g_lockdown_opt) - { - if (!info.remote_sp->GetCommunication()->IsConnected()) - { - if (info.remote_sp->GetCommunication()->ConnectToService () != gdb_success) - { - Log::STDERR ("Failed to get connection from a remote gdb process.\n"); - info.mode = eDCGSRunLoopModeExit; - } - else if (g_applist_opt != 0) - { - // List all applications we are able to see - std::string applist_plist; - if (ListApplications(applist_plist, false, false) == 0) - { - //DNBLogDebug("Task list: %s", applist_plist.c_str()); - - info.remote_sp->GetCommunication()->Write(applist_plist.c_str(), applist_plist.size()); - // Issue a read that will never yield any data until the other side - // closes the socket so this process doesn't just exit and cause the - // socket to close prematurely on the other end and cause data loss. - std::string buf; - info.remote_sp->GetCommunication()->Read(buf); - } - info.remote_sp->GetCommunication()->Disconnect(false); - info.mode = eDCGSRunLoopModeExit; - break; - } - else - { - // Start watching for remote packets - info.remote_sp->StartReadRemoteDataThread(); - } - } - } - else -#endif - { - if (StartListening (&info, listen_port)) - Log::STDOUT ("Got a connection, waiting for process information for launching or attaching.\n"); - else - info.mode = eDCGSRunLoopModeExit; - } - - if (info.mode != eDCGSRunLoopModeExit) - GSRunLoopGetStartModeFromRemote (&info); - break; - - case eDCGSRunLoopModeInferiorAttaching: - if (!waitfor_pid_name.empty()) - { - // Set our end wait time if we are using a waitfor-duration - // option that may have been specified - - TimeValue attach_timeout_abstime; - if (waitfor_duration != 0) - { - attach_timeout_abstime = TimeValue::Now(); - attach_timeout_abstime.OffsetWithSeconds (waitfor_duration); - } - GSLaunchFlavor launch_flavor = g_launch_flavor; - if (launch_flavor == eLaunchFlavorDefault) - { - // Our default launch method is posix spawn - launch_flavor = eLaunchFlavorPosixSpawn; - -#if defined (__arm__) - // Check if we have an app bundle, if so launch using SpringBoard. - if (waitfor_pid_name.find (".app") != std::string::npos) - { - launch_flavor = eLaunchFlavorSpringBoard; - } -#endif - } - - //ctx.SetLaunchFlavor(launch_flavor); - - - lldb::pid_t pid = info.GetProcess()->Attach (waitfor_pid_name.c_str()); - if (pid == LLDB_INVALID_PROCESS_ID) - { - info.GetRemote()->GetLaunchError() = info.GetProcess()->GetError(); - Log::STDERR ("error: failed to attach to process named: \"%s\" %s", waitfor_pid_name.c_str(), info.GetRemote()->GetLaunchError().AsCString()); - info.mode = eDCGSRunLoopModeExit; - } - else - { - info.mode = eDCGSRunLoopModeInferiorExecuting; - } - } - else if (attach_pid != LLDB_INVALID_PROCESS_ID) - { - Log::STDOUT ("Attaching to process %i...\n", attach_pid); - info.mode = GSRunLoopLaunchAttaching (&info, attach_pid); - if (info.mode != eDCGSRunLoopModeInferiorExecuting) - { - const char *error_str = info.GetRemote()->GetLaunchError().AsCString(); - Log::STDERR ("error: failed to attach process %i: %s\n", attach_pid, error_str ? error_str : "unknown error."); - info.mode = eDCGSRunLoopModeExit; - } - } - else if (!attach_pid_name.empty ()) - { - lldb::pid_t pid = info.GetProcess()->Attach (waitfor_pid_name.c_str()); - if (pid == LLDB_INVALID_PROCESS_ID) - { - info.GetRemote()->GetLaunchError() = info.GetProcess()->GetError(); - Log::STDERR ("error: failed to attach to process named: \"%s\" %s", waitfor_pid_name.c_str(), info.GetRemote()->GetLaunchError().AsCString()); - info.mode = eDCGSRunLoopModeExit; - } - else - { - info.mode = eDCGSRunLoopModeInferiorExecuting; - } - } - else - { - Log::STDERR ("error: asked to attach with empty name and invalid PID."); - info.mode = eDCGSRunLoopModeExit; - } - - if (info.mode != eDCGSRunLoopModeExit) - { - if (StartListening (&info, listen_port)) - Log::STDOUT ("Got a connection, waiting for debugger instructions for process %d.\n", attach_pid); - else - info.mode = eDCGSRunLoopModeExit; - } - break; - - case eDCGSRunLoopModeInferiorLaunching: - info.mode = GSRunLoopLaunchInferior (&info); - - if (info.mode == eDCGSRunLoopModeInferiorExecuting) - { - if (StartListening (&info, listen_port)) - Log::STDOUT ("Got a connection, waiting for debugger instructions for task \"%s\".\n", argv[0]); - else - info.mode = eDCGSRunLoopModeExit; - } - else - { - Log::STDERR ("error: failed to launch process %s: %s\n", argv[0], info.GetRemote()->GetLaunchError().AsCString()); - } - break; - - case eDCGSRunLoopModeInferiorExecuting: - GSRunLoopInferiorExecuting (&info); - break; - - case eDCGSRunLoopModeInferiorKillOrDetach: - { - Process *process = info.GetProcess(); - if (process && process->IsAlive()) - { - process->Kill(SIGCONT); - process->Kill(SIGKILL); - } - } - info.mode = eDCGSRunLoopModeExit; - break; - - default: - info.mode = eDCGSRunLoopModeExit; - case eDCGSRunLoopModeExit: - break; - } - } - - return 0; -} diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBServerLog.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBServerLog.cpp deleted file mode 100644 index 2d4116ebe7b..00000000000 --- a/lldb/source/Plugins/Process/gdb-remote/GDBServerLog.cpp +++ /dev/null @@ -1,80 +0,0 @@ -//===-- GDBServerLog.cpp ----------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -//---------------------------------------------------------------------- -// -// GDBServerLog.cpp -// liblldb -// -// Created by Greg Clayton on 6/19/09. -// -// -//---------------------------------------------------------------------- - -#include "GDBServerLog.h" - -using namespace lldb; - -static Log * -LogAccessor (bool get, Log *log) -{ - static Log* g_log = NULL; // Leak for now as auto_ptr was being cleaned up - // by global constructors before other threads - // were done with it. - if (get) - { -// // Debug code below for enabling logging by default -// if (g_log == NULL) -// { -// g_log = new Log("/dev/stdout", false); -// g_log->GetMask().SetAllFlagBits(GS_LOG_ALL); -// g_log->GetOptions().Set(LLDB_LOG_OPTION_THREADSAFE | LLDB_LOG_OPTION_PREPEND_THREAD_NAME); -// } - } - else - { - if (g_log) - delete g_log; - g_log = log; - } - - return g_log; -} - -Log * -GDBServerLog::GetLogIfAllCategoriesSet (uint32_t mask) -{ - Log *log = LogAccessor (true, NULL); - if (log && mask) - { - uint32_t log_mask = log->GetMask().GetAllFlagBits(); - if ((log_mask & mask) != mask) - return NULL; - } - return log; -} - -void -GDBServerLog::SetLog (Log *log) -{ - LogAccessor (false, log); -} - - -void -GDBServerLog::LogIf (uint32_t mask, const char *format, ...) -{ - Log *log = GDBServerLog::GetLogIfAllCategoriesSet (mask); - if (log) - { - va_list args; - va_start (args, format); - log->VAPrintf (format, args); - va_end (args); - } -} diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBServerLog.h b/lldb/source/Plugins/Process/gdb-remote/GDBServerLog.h deleted file mode 100644 index 3dec8088cef..00000000000 --- a/lldb/source/Plugins/Process/gdb-remote/GDBServerLog.h +++ /dev/null @@ -1,55 +0,0 @@ -//===-- GDBServerLog.h ------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -//---------------------------------------------------------------------- -// -// GDBServerLog.h -// liblldb -// -// Created by Greg Clayton on 6/19/09. -// -// -//---------------------------------------------------------------------- - -#ifndef liblldb_GDBServerLog_h_ -#define liblldb_GDBServerLog_h_ - -// C Includes -// C++ Includes -// Other libraries and framework includes - -#include "lldb/Core/Log.h" - -// Project includes -#define GS_LOG_VERBOSE (1u << 0) -#define GS_LOG_DEBUG (1u << 1) -#define GS_LOG_PACKETS (1u << 2) -#define GS_LOG_EVENTS (1u << 3) -#define GS_LOG_MINIMAL (1u << 4) -#define GS_LOG_ALL (UINT32_MAX) -#define GS_LOG_DEFAULT (GS_LOG_VERBOSE |\ - GS_LOG_PACKETS) - -namespace lldb { - -class GDBServerLog -{ -public: - static Log * - GetLog (uint32_t mask = 0); - - static void - SetLog (Log *log); - - static void - LogIf (uint32_t mask, const char *format, ...); -}; - -} // namespace lldb - -#endif // liblldb_GDBServerLog_h_ diff --git a/lldb/source/Plugins/Process/gdb-remote/Makefile b/lldb/source/Plugins/Process/gdb-remote/Makefile new file mode 100644 index 00000000000..8a9b6107787 --- /dev/null +++ b/lldb/source/Plugins/Process/gdb-remote/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/Process/gdb-remote/Makefile -------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginProcessGDBRemote +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index f58613b62f1..fcf00270514 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -46,12 +46,11 @@ // Project includes #include "lldb/Host/Host.h" -#include "StringExtractorGDBRemote.h" +#include "Utility/StringExtractorGDBRemote.h" #include "GDBRemoteRegisterContext.h" #include "ProcessGDBRemote.h" #include "ProcessGDBRemoteLog.h" #include "ThreadGDBRemote.h" -#include "libunwind.h" #include "MacOSXLibunwindCallbacks.h" #if defined (__i386__) || defined (__x86_64__) @@ -116,28 +115,29 @@ ProcessGDBRemote::CanDebug(Target &target) ProcessGDBRemote::ProcessGDBRemote(Target& target, Listener &listener) : Process (target, listener), m_dynamic_loader_ap (), - m_byte_order (eByteOrderHost), m_flags (0), m_stdio_communication ("gdb-remote.stdio"), m_stdio_mutex (Mutex::eMutexTypeRecursive), m_stdout_data (), m_arch_spec (), + m_byte_order (eByteOrderHost), m_gdb_comm(), m_debugserver_pid (LLDB_INVALID_PROCESS_ID), m_debugserver_monitor (0), + m_last_stop_packet (), m_register_info (), - m_curr_tid (LLDB_INVALID_THREAD_ID), - m_curr_tid_run (LLDB_INVALID_THREAD_ID), m_async_broadcaster ("lldb.process.gdb-remote.async-broadcaster"), m_async_thread (LLDB_INVALID_HOST_THREAD), + m_curr_tid (LLDB_INVALID_THREAD_ID), + m_curr_tid_run (LLDB_INVALID_THREAD_ID), m_z0_supported (1), m_continue_packet(), m_dispatch_queue_offsets_addr (LLDB_INVALID_ADDRESS), + m_packet_timeout (1), + m_max_memory_size (512), m_libunwind_target_type (UNW_TARGET_UNSPECIFIED), m_libunwind_addr_space (NULL), - m_waiting_for_attach (false), - m_packet_timeout (1), - m_max_memory_size (512) + m_waiting_for_attach (false) { } @@ -616,7 +616,7 @@ ProcessGDBRemote::DidLaunch () } Error -ProcessGDBRemote::DoAttach (lldb::pid_t attach_pid) +ProcessGDBRemote::DoAttachToProcessWithID (lldb::pid_t attach_pid) { Error error; // Clear out and clean up from any current state @@ -716,7 +716,7 @@ ProcessGDBRemote::AttachInputReaderCallback } Error -ProcessGDBRemote::DoAttach (const char *process_name, bool wait_for_launch) +ProcessGDBRemote::DoAttachToProcessWithName (const char *process_name, bool wait_for_launch) { Error error; // Clear out and clean up from any current state diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h index cd5bab0194f..79872b4db4c 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h @@ -26,9 +26,9 @@ #include "lldb/Target/Thread.h" #include "GDBRemoteCommunication.h" -#include "StringExtractor.h" +#include "Utility/StringExtractor.h" #include "GDBRemoteRegisterContext.h" -#include "libunwind.h" +#include "libunwind/include/libunwind.h" class ThreadGDBRemote; @@ -94,10 +94,10 @@ public: WillLaunchOrAttach (); virtual lldb_private::Error - DoAttach (lldb::pid_t pid); + DoAttachToProcessWithID (lldb::pid_t pid); virtual lldb_private::Error - DoAttach (const char *process_name, bool wait_for_launch); + DoAttachToProcessWithName (const char *process_name, bool wait_for_launch); virtual void DidAttach (); diff --git a/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp index 37485edf4e5..4eae1e6d41b 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp @@ -22,7 +22,7 @@ #include "LibUnwindRegisterContext.h" #include "ProcessGDBRemote.h" #include "ProcessGDBRemoteLog.h" -#include "StringExtractorGDBRemote.h" +#include "Utility/StringExtractorGDBRemote.h" #include "UnwindLibUnwind.h" #include "UnwindMacOSXFrameBackchain.h" @@ -104,6 +104,9 @@ ThreadGDBRemote::WillResume (StateType resume_state) else GetGDBProcess().m_continue_packet.Printf(";s:%4.4x", GetID()); break; + + default: + break; } Thread::WillResume(resume_state); return true; @@ -272,8 +275,7 @@ ThreadGDBRemote::GetRawStopReason (StopInfo *stop_info) if (m_stop_info_stop_id != m_process.GetStopID()) { char packet[256]; - const int packet_len = snprintf(packet, sizeof(packet), "qThreadStopInfo%x", GetID()); - assert (packet_len < (sizeof(packet) - 1)); + ::snprintf(packet, sizeof(packet), "qThreadStopInfo%x", GetID()); StringExtractorGDBRemote stop_packet; if (GetGDBProcess().GetGDBRemote().SendPacketAndWaitForResponse(packet, stop_packet, 1, false)) { diff --git a/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.h b/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.h index 3fa4ae09a2a..d40c2e1f6ab 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.h +++ b/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.h @@ -14,8 +14,7 @@ #include "lldb/Target/Process.h" #include "lldb/Target/Thread.h" -#include "MachException.h" -#include "libunwind.h" +#include "libunwind/include/libunwind.h" class StringExtractor; class ProcessGDBRemote; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp index 54cbf42f0d6..65bf64fc06b 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp @@ -153,7 +153,6 @@ DWARFCompileUnit::ExtractDIEsIfNeeded (bool cu_die_only) // Set the offset to that of the first DIE uint32_t offset = GetFirstDIEOffset(); - const dw_offset_t next_cu_offset = GetNextCompileUnitOffset(); DWARFDebugInfoEntry die; // Keep a flat array of the DIE for binary lookup by DIE offset Log *log = LogChannelDWARF::GetLogIfAll(DWARF_LOG_DEBUG_INFO); @@ -206,7 +205,7 @@ DWARFCompileUnit::ExtractDIEsIfNeeded (bool cu_die_only) break; // We are done with this compile unit! } - assert(offset <= next_cu_offset); + assert(offset <= GetNextCompileUnitOffset()); } SetDIERelations(); return m_die_array.size(); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAranges.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAranges.cpp index a3213e080c3..3e5e25a040a 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAranges.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAranges.cpp @@ -69,7 +69,7 @@ public: DWARFDebugAranges::Range range; range.offset = set.GetCompileUnitDIEOffset(); - for (uint32_t i=0; arange_desc_ptr = set.GetDescriptor(i); ++i) + for (uint32_t i=0; (arange_desc_ptr = set.GetDescriptor(i)) != NULL; ++i) { range.lo_pc = arange_desc_ptr->address; range.hi_pc = arange_desc_ptr->address + arange_desc_ptr->length; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/Makefile b/lldb/source/Plugins/SymbolFile/DWARF/Makefile new file mode 100644 index 00000000000..509065650ab --- /dev/null +++ b/lldb/source/Plugins/SymbolFile/DWARF/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/SymbolFile/DWARF/Makefile ------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginSymbolFileDWARF +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/SymbolFile/Symtab/Makefile b/lldb/source/Plugins/SymbolFile/Symtab/Makefile new file mode 100644 index 00000000000..2c3dbb6d86a --- /dev/null +++ b/lldb/source/Plugins/SymbolFile/Symtab/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/SymbolFile/Symtab/Makefile -----------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginSymbolFileSymtab +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/SymbolVendor/MacOSX/Makefile b/lldb/source/Plugins/SymbolVendor/MacOSX/Makefile new file mode 100644 index 00000000000..9f71ad669aa --- /dev/null +++ b/lldb/source/Plugins/SymbolVendor/MacOSX/Makefile @@ -0,0 +1,14 @@ +##===- source/Plugins/SymbolVendor/MacOSX/Makefile ---------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../../../.. +LIBRARYNAME := lldbPluginSymbolVendorMacOSX +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Symbol/ClangASTContext.cpp b/lldb/source/Symbol/ClangASTContext.cpp index b9670d4e17c..6bb91ea6068 100644 --- a/lldb/source/Symbol/ClangASTContext.cpp +++ b/lldb/source/Symbol/ClangASTContext.cpp @@ -904,12 +904,6 @@ ClangASTContext::SetBaseClassesForClassType (void *class_clang_type, CXXBaseSpec { if (class_clang_type) { - ASTContext *ast_context = getASTContext(); - IdentifierTable *identifier_table = getIdentifierTable(); - - assert (ast_context != NULL); - assert (identifier_table != NULL); - Type *clang_type = QualType::getFromOpaquePtr(class_clang_type).getTypePtr(); if (clang_type) { @@ -1157,8 +1151,6 @@ ClangASTContext::GetChildClangTypeAtIndex ++child_idx; } } - const unsigned num_fields = record_layout.getFieldCount(); - // Make sure index is in range... uint32_t field_idx = 0; RecordDecl::field_iterator field, field_end; @@ -1173,7 +1165,7 @@ ClangASTContext::GetChildClangTypeAtIndex // Figure out the type byte size (field_type_info.first) and // alignment (field_type_info.second) from the AST context. std::pair<uint64_t, unsigned> field_type_info = ast_context->getTypeInfo(field->getType()); - assert(field_idx < num_fields); + assert(field_idx < record_layout.getFieldCount()); child_byte_size = field_type_info.first / 8; diff --git a/lldb/source/Symbol/Makefile b/lldb/source/Symbol/Makefile new file mode 100644 index 00000000000..ae0cef0e242 --- /dev/null +++ b/lldb/source/Symbol/Makefile @@ -0,0 +1,14 @@ +##===- source/Symbol/Makefile ------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../.. +LIBRARYNAME := lldbSymbol +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Symbol/Type.cpp b/lldb/source/Symbol/Type.cpp index 4735d0560aa..a66e12a9c1a 100644 --- a/lldb/source/Symbol/Type.cpp +++ b/lldb/source/Symbol/Type.cpp @@ -393,23 +393,27 @@ lldb_private::Type::DumpSummary { uint32_t offset = data_byte_offset; lldb::addr_t pointer_addresss = data.GetMaxU64(&offset, data_byte_size); - const size_t k_max_buf_size = length ? length : 256; - uint8_t buf[k_max_buf_size + 1]; - lldb_private::DataExtractor data(buf, k_max_buf_size, exe_ctx->process->GetByteOrder(), 4); - buf[k_max_buf_size] = '\0'; + std::vector<uint8_t> buf; + if (length > 0) + buf.resize (length); + else + buf.resize (256); + + lldb_private::DataExtractor data(buf.data(), buf.size(), exe_ctx->process->GetByteOrder(), 4); + buf.back() = '\0'; size_t bytes_read; size_t total_cstr_len = 0; Error error; - while ((bytes_read = exe_ctx->process->ReadMemory (pointer_addresss, buf, k_max_buf_size, error)) > 0) + while ((bytes_read = exe_ctx->process->ReadMemory (pointer_addresss, buf.data(), buf.size(), error)) > 0) { - const size_t len = strlen((const char *)buf); + const size_t len = strlen((const char *)buf.data()); if (len == 0) break; if (total_cstr_len == 0) s->PutCString (" \""); data.Dump(s, 0, lldb::eFormatChar, 1, len, UINT32_MAX, LLDB_INVALID_ADDRESS, 0, 0); total_cstr_len += len; - if (len < k_max_buf_size) + if (len < buf.size()) break; pointer_addresss += total_cstr_len; } @@ -507,8 +511,6 @@ lldb_private::Type::DumpValue ++child_idx; } } - const unsigned num_fields = record_layout.getFieldCount(); - uint32_t field_idx = 0; clang::RecordDecl::field_iterator field, field_end; for (field = record_decl->field_begin(), field_end = record_decl->field_end(); field != field_end; ++field, ++field_idx, ++child_idx) @@ -529,7 +531,7 @@ lldb_private::Type::DumpValue // Figure out the type byte size (field_type_info.first) and // alignment (field_type_info.second) from the AST context. std::pair<uint64_t, unsigned> field_type_info = ast_context->getTypeInfo(field_type); - assert(field_idx < num_fields); + assert(field_idx < record_layout.getFieldCount()); // Figure out the field offset within the current struct/union/class type field_bit_offset = record_layout.getFieldOffset (field_idx); field_byte_offset = field_bit_offset / 8; diff --git a/lldb/source/Target/Makefile b/lldb/source/Target/Makefile new file mode 100644 index 00000000000..0d4be5449ad --- /dev/null +++ b/lldb/source/Target/Makefile @@ -0,0 +1,14 @@ +##===- source/Target/Makefile ------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../.. +LIBRARYNAME := lldbTarget +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Target/ObjCObjectPrinter.cpp b/lldb/source/Target/ObjCObjectPrinter.cpp index c302c6c3f45..4cf079f62cd 100644 --- a/lldb/source/Target/ObjCObjectPrinter.cpp +++ b/lldb/source/Target/ObjCObjectPrinter.cpp @@ -70,30 +70,26 @@ ObjCObjectPrinter::PrintObject (ConstString &str, Value &object_ptr, ExecutionCo // poor man's strcpy - size_t len = 0; - bool keep_reading = true; Error error; - while (keep_reading) + std::vector<char> desc; + while (1) { - char byte; - - if (exe_ctx.process->ReadMemory(result_ptr + len, &byte, 1, error) != 1) - return false; + char byte = '\0'; + if (exe_ctx.process->ReadMemory(result_ptr + desc.size(), &byte, 1, error) != 1) + break; + desc.push_back(byte); + if (byte == '\0') - keep_reading = false; - else - ++len; + break; } - char desc[len + 1]; - - if (exe_ctx.process->ReadMemory(result_ptr, &desc[0], len + 1, error) != len + 1) - return false; - - str.SetCString(desc); - - return true; + if (!desc.empty()) + { + str.SetCString(desc.data()); + return true; + } + return false; } Address * diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index 1d9329188be..7bc51abb8ed 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -45,15 +45,11 @@ Process::FindPlugin (Target &target, const char *plugin_name, Listener &listener } else { - for (uint32_t idx = 0; create_callback = PluginManager::GetProcessCreateCallbackAtIndex(idx); ++idx) + for (uint32_t idx = 0; (create_callback = PluginManager::GetProcessCreateCallbackAtIndex(idx)) != NULL; ++idx) { - create_callback = PluginManager::GetProcessCreateCallbackAtIndex (idx); - if (create_callback) - { - std::auto_ptr<Process> debugger_ap(create_callback(target, listener)); - if (debugger_ap->CanDebug(target)) - return debugger_ap.release(); - } + std::auto_ptr<Process> debugger_ap(create_callback(target, listener)); + if (debugger_ap->CanDebug(target)) + return debugger_ap.release(); } } return NULL; @@ -702,7 +698,8 @@ Process::DisableSoftwareBreakpoint (BreakpointSite *bp_site) if (break_op_size > 0) { // Clear a software breakoint instruction - uint8_t curr_break_op[break_op_size]; + uint8_t curr_break_op[8]; + assert (sizeof(curr_break_op) < break_op_size); bool break_op_found = false; // Read the breakpoint opcode @@ -731,7 +728,8 @@ Process::DisableSoftwareBreakpoint (BreakpointSite *bp_site) if (verify) { - uint8_t verify_opcode[break_op_size]; + uint8_t verify_opcode[8]; + assert (sizeof(verify_opcode) < break_op_size); // Verify that our original opcode made it back to the inferior if (DoReadMemory (bp_addr, verify_opcode, break_op_size, error) == break_op_size) { @@ -840,9 +838,9 @@ Process::WriteMemory (addr_t addr, const void *buf, size_t size, Error &error) BreakpointSiteList::collection::const_iterator pos; size_t bytes_written = 0; - addr_t intersect_addr; - size_t intersect_size; - size_t opcode_offset; + addr_t intersect_addr = 0; + size_t intersect_size = 0; + size_t opcode_offset = 0; const uint8_t *ubuf = (const uint8_t *)buf; for (pos = iter; pos != end; ++pos) @@ -1069,10 +1067,10 @@ Process::Attach (lldb::pid_t attach_pid) m_target_triple.Clear(); m_abi_sp.reset(); - Error error(WillAttach (attach_pid)); + Error error (WillAttachToProcessWithID(attach_pid)); if (error.Success()) { - error = DoAttach (attach_pid); + error = DoAttachToProcessWithID (attach_pid); if (error.Success()) { error = CompleteAttach(); @@ -1099,11 +1097,11 @@ Process::Attach (const char *process_name, bool wait_for_launch) m_target_triple.Clear(); m_abi_sp.reset(); - Error error (WillAttach (process_name, wait_for_launch)); + Error error (WillAttachToProcessWithName(process_name, wait_for_launch)); if (error.Success()) { StartPrivateStateThread(); - error = DoAttach (process_name, wait_for_launch); + error = DoAttachToProcessWithName (process_name, wait_for_launch); if (error.Fail()) { if (GetID() != LLDB_INVALID_PROCESS_ID) @@ -1629,8 +1627,8 @@ Process::ProcessEventData::ProcessEventData () : EventData (), m_process_sp (), m_state (eStateInvalid), - m_update_state (false), - m_restarted (false) + m_restarted (false), + m_update_state (false) { } @@ -1638,8 +1636,8 @@ Process::ProcessEventData::ProcessEventData (const ProcessSP &process_sp, StateT EventData (), m_process_sp (process_sp), m_state (state), - m_update_state (false), - m_restarted (false) + m_restarted (false), + m_update_state (false) { } diff --git a/lldb/source/Target/ThreadPlanStepRange.cpp b/lldb/source/Target/ThreadPlanStepRange.cpp index 2790d8087b0..cba1258e088 100644 --- a/lldb/source/Target/ThreadPlanStepRange.cpp +++ b/lldb/source/Target/ThreadPlanStepRange.cpp @@ -34,12 +34,12 @@ using namespace lldb_private; ThreadPlanStepRange::ThreadPlanStepRange (ThreadPlanKind kind, const char *name, Thread &thread, const AddressRange &range, const SymbolContext &addr_context, lldb::RunMode stop_others) : ThreadPlan (ThreadPlan::eKindGeneric, name, thread, eVoteNoOpinion, eVoteNoOpinion), - m_address_range (range), m_addr_context (addr_context), + m_address_range (range), m_stop_others (stop_others), m_stack_depth (0), - m_no_more_plans (false), m_stack_id (), + m_no_more_plans (false), m_first_run_event (true) { m_stack_depth = m_thread.GetStackFrameCount(); diff --git a/lldb/source/Target/ThreadPlanStepUntil.cpp b/lldb/source/Target/ThreadPlanStepUntil.cpp index d146b6ae5cd..99f1a5e4d4c 100644 --- a/lldb/source/Target/ThreadPlanStepUntil.cpp +++ b/lldb/source/Target/ThreadPlanStepUntil.cpp @@ -39,13 +39,15 @@ ThreadPlanStepUntil::ThreadPlanStepUntil bool stop_others ) : ThreadPlan (ThreadPlan::eKindStepUntil, "Step until", thread, eVoteNoOpinion, eVoteNoOpinion), + m_stack_depth (0), m_step_from_insn (LLDB_INVALID_ADDRESS), - m_return_addr (LLDB_INVALID_ADDRESS), m_return_bp_id(LLDB_INVALID_BREAK_ID), + m_return_addr (LLDB_INVALID_ADDRESS), m_stepped_out(false), m_should_stop(false), - m_explains_stop(false), m_ran_analyze (false), + m_explains_stop(false), + m_until_points(), m_stop_others (stop_others) { diff --git a/lldb/source/Utility/Makefile b/lldb/source/Utility/Makefile new file mode 100644 index 00000000000..f1be07e6417 --- /dev/null +++ b/lldb/source/Utility/Makefile @@ -0,0 +1,14 @@ +##===- source/Utility/Makefile -----------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := ../.. +LIBRARYNAME := lldbUtility +BUILD_ARCHIVE = 1 + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Utility/StringExtractor.cpp b/lldb/source/Utility/StringExtractor.cpp index 86cd623f55c..dc1483d01cd 100644 --- a/lldb/source/Utility/StringExtractor.cpp +++ b/lldb/source/Utility/StringExtractor.cpp @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// -#include "StringExtractor.h" +#include "Utility/StringExtractor.h" // C Includes // C++ Includes diff --git a/lldb/source/Utility/StringExtractorGDBRemote.cpp b/lldb/source/Utility/StringExtractorGDBRemote.cpp index f7dcc4181f3..59d00aac817 100644 --- a/lldb/source/Utility/StringExtractorGDBRemote.cpp +++ b/lldb/source/Utility/StringExtractorGDBRemote.cpp @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// -#include "StringExtractorGDBRemote.h" +#include "Utility/StringExtractorGDBRemote.h" // C Includes // C++ Includes diff --git a/lldb/source/Utility/StringExtractorGDBRemote.h b/lldb/source/Utility/StringExtractorGDBRemote.h index 813ddad2e27..6002b8bddce 100644 --- a/lldb/source/Utility/StringExtractorGDBRemote.h +++ b/lldb/source/Utility/StringExtractorGDBRemote.h @@ -15,7 +15,7 @@ #include <string> // Other libraries and framework includes // Project includes -#include "StringExtractor.h" +#include "Utility/StringExtractor.h" class StringExtractorGDBRemote : public StringExtractor { diff --git a/lldb/source/lldb.cpp b/lldb/source/lldb.cpp index a3d1508acaf..201fc6191a1 100644 --- a/lldb/source/lldb.cpp +++ b/lldb/source/lldb.cpp @@ -68,7 +68,7 @@ lldb_private::Initialize () ObjectContainerUniversalMachO::Initialize(); ObjectFileMachO::Initialize(); ProcessGDBRemote::Initialize(); - ProcessMacOSX::Initialize(); +// ProcessMacOSX::Initialize(); #endif } } @@ -96,7 +96,7 @@ lldb_private::Terminate () ObjectContainerUniversalMachO::Terminate(); ObjectFileMachO::Terminate(); ProcessGDBRemote::Terminate(); - ProcessMacOSX::Terminate(); +// ProcessMacOSX::Terminate(); #endif } diff --git a/lldb/tools/Makefile b/lldb/tools/Makefile new file mode 100644 index 00000000000..bd0326c0510 --- /dev/null +++ b/lldb/tools/Makefile @@ -0,0 +1,13 @@ +##===- source/Makefile -------------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LLDB_LEVEL := .. +DIRS := driver + +include $(LLDB_LEVEL)/Makefile diff --git a/lldb/tools/debugserver/debugserver.xcodeproj/project.pbxproj b/lldb/tools/debugserver/debugserver.xcodeproj/project.pbxproj index 0bb7587f847..a2c774888e0 100644 --- a/lldb/tools/debugserver/debugserver.xcodeproj/project.pbxproj +++ b/lldb/tools/debugserver/debugserver.xcodeproj/project.pbxproj @@ -512,7 +512,7 @@ PREBINDING = NO; PRODUCT_NAME = debugserver; STRIP_INSTALLED_PRODUCT = YES; - USER_HEADER_SEARCH_PATHS = "./source $(DERIVED_SOURCES_DIR)"; + USER_HEADER_SEARCH_PATHS = "./source ../../source $(DERIVED_SOURCES_DIR)"; ZERO_LINK = NO; }; name = BuildAndIntegration; @@ -543,7 +543,7 @@ OTHER_MIGFLAGS = "-I$(DERIVED_FILE_DIR)"; PREBINDING = NO; PRODUCT_NAME = debugserver; - USER_HEADER_SEARCH_PATHS = "./source $(DERIVED_SOURCES_DIR)"; + USER_HEADER_SEARCH_PATHS = "./source ../../source $(DERIVED_SOURCES_DIR)"; ZERO_LINK = NO; }; name = Debug; @@ -573,7 +573,7 @@ OTHER_MIGFLAGS = "-I$(DERIVED_FILE_DIR)"; PREBINDING = NO; PRODUCT_NAME = debugserver; - USER_HEADER_SEARCH_PATHS = "./source $(DERIVED_SOURCES_DIR)"; + USER_HEADER_SEARCH_PATHS = "./source ../../source $(DERIVED_SOURCES_DIR)"; ZERO_LINK = NO; }; name = Release; diff --git a/lldb/tools/debugserver/source/RNBRemote.cpp b/lldb/tools/debugserver/source/RNBRemote.cpp index 3ac3ee9178f..b4d5d7841fe 100644 --- a/lldb/tools/debugserver/source/RNBRemote.cpp +++ b/lldb/tools/debugserver/source/RNBRemote.cpp @@ -25,7 +25,7 @@ #include "RNBContext.h" #include "RNBServices.h" #include "RNBSocket.h" -#include "StringExtractor.h" +#include "Utility/StringExtractor.h" #include <iomanip> #include <sstream> diff --git a/lldb/tools/driver/Driver.cpp b/lldb/tools/driver/Driver.cpp index a77775a40aa..49676ef719a 100644 --- a/lldb/tools/driver/Driver.cpp +++ b/lldb/tools/driver/Driver.cpp @@ -110,18 +110,18 @@ Driver::CloseIOChannelFile () } } -// This function takes INDENT, which tells how many spaces to output at the front of each line; SPACES, which is -// a string that is output_max_columns long, containing spaces; and TEXT, which is the text that is to be output. -// It outputs the text, on multiple lines if necessary, to RESULT, with INDENT spaces at the front of each line. It -// breaks lines on spaces, tabs or newlines, shortening the line if necessary to not break in the middle of a word. -// It assumes that each output line should contain a maximum of OUTPUT_MAX_COLUMNS characters. +// This function takes INDENT, which tells how many spaces to output at the front +// of each line; TEXT, which is the text that is to be output. It outputs the +// text, on multiple lines if necessary, to RESULT, with INDENT spaces at the +// front of each line. It breaks lines on spaces, tabs or newlines, shortening +// the line if necessary to not break in the middle of a word. It assumes that +// each output line should contain a maximum of OUTPUT_MAX_COLUMNS characters. void -OutputFormattedUsageText (FILE *out, int indent, char *spaces, const char *text, int output_max_columns) +OutputFormattedUsageText (FILE *out, int indent, const char *text, int output_max_columns) { int len = strlen (text); std::string text_string (text); - std::string spaces_string (spaces); // Force indentation to be reasonable. if (indent >= output_max_columns) @@ -131,7 +131,7 @@ OutputFormattedUsageText (FILE *out, int indent, char *spaces, const char *text, if (len + indent < output_max_columns) // Output as a single line - fprintf (out, "%s%s\n", spaces_string.substr (0, indent).c_str(), text); + fprintf (out, "%*s%s\n", indent, "", text); else { // We need to break it up into multiple lines. @@ -159,7 +159,7 @@ OutputFormattedUsageText (FILE *out, int indent, char *spaces, const char *text, } sub_len = end - start; std::string substring = text_string.substr (start, sub_len); - fprintf (out, "%s%s\n", spaces_string.substr(0, indent).c_str(), substring.c_str()); + fprintf (out, "%*s%s\n", indent, "", substring.c_str()); start = end + 1; } } @@ -171,15 +171,7 @@ ShowUsage (FILE *out, lldb::OptionDefinition *option_table, Driver::OptionData d uint32_t screen_width = 80; uint32_t indent_level = 0; const char *name = "lldb"; - char spaces[screen_width+1]; - uint32_t i; - for (i = 0; i < screen_width; ++i) - spaces[i] = ' '; - spaces[i] = '\n'; - - std::string spaces_string (spaces); - fprintf (out, "\nUsage:\n\n"); indent_level += 2; @@ -202,7 +194,7 @@ ShowUsage (FILE *out, lldb::OptionDefinition *option_table, Driver::OptionData d } else { - for (int j = 0; j < LLDB_MAX_NUM_OPTION_SETS; j++) + for (uint32_t j = 0; j < LLDB_MAX_NUM_OPTION_SETS; j++) { if (this_usage_mask & 1 << j) { @@ -221,7 +213,7 @@ ShowUsage (FILE *out, lldb::OptionDefinition *option_table, Driver::OptionData d if (opt_set > 0) fprintf (out, "\n"); - fprintf (out, "%s%s", spaces_string.substr(0, indent_level).c_str(), name); + fprintf (out, "%*s%s", indent_level, "", name); for (uint32_t i = 0; i < num_options; ++i) { @@ -271,16 +263,16 @@ ShowUsage (FILE *out, lldb::OptionDefinition *option_table, Driver::OptionData d if (pos == options_seen.end()) { options_seen.insert (option_table[i].short_option); - fprintf (out, "%s-%c ", spaces_string.substr(0, indent_level).c_str(), option_table[i].short_option); + fprintf (out, "%*s-%c ", indent_level, "", option_table[i].short_option); if (option_table[i].argument_name != NULL) fprintf (out, "%s", option_table[i].argument_name); fprintf (out, "\n"); - fprintf (out, "%s--%s ", spaces_string.substr(0, indent_level).c_str(), option_table[i].long_option); + fprintf (out, "%*s--%s ", indent_level, "", option_table[i].long_option); if (option_table[i].argument_name != NULL) fprintf (out, "%s", option_table[i].argument_name); fprintf (out, "\n"); indent_level += 5; - OutputFormattedUsageText (out, indent_level, spaces, option_table[i].usage_text, screen_width); + OutputFormattedUsageText (out, indent_level, option_table[i].usage_text, screen_width); indent_level -= 5; fprintf (out, "\n"); } @@ -288,12 +280,12 @@ ShowUsage (FILE *out, lldb::OptionDefinition *option_table, Driver::OptionData d indent_level -= 5; - fprintf (out, "\n%s('%s <filename>' also works, to specify the file to be debugged.)\n\n", - spaces_string.substr(0, indent_level).c_str(), name); + fprintf (out, "\n%*s('%s <filename>' also works, to specify the file to be debugged.)\n\n", + indent_level, "", name); } void -BuildGetOptTable (lldb::OptionDefinition *expanded_option_table, struct option **getopt_table, int num_options) +BuildGetOptTable (lldb::OptionDefinition *expanded_option_table, struct option **getopt_table, uint32_t num_options) { if (num_options == 0) return; @@ -303,19 +295,19 @@ BuildGetOptTable (lldb::OptionDefinition *expanded_option_table, struct option * std::bitset<256> option_seen; for (i = 0, j = 0; i < num_options; ++i) - { + { char short_opt = expanded_option_table[i].short_option; - + if (option_seen.test(short_opt) == false) - { + { (*getopt_table)[j].name = expanded_option_table[i].long_option; (*getopt_table)[j].has_arg = expanded_option_table[i].option_has_arg; (*getopt_table)[j].flag = NULL; (*getopt_table)[j].val = expanded_option_table[i].short_option; option_seen.set(short_opt); ++j; - } - } + } + } (*getopt_table)[j].name = NULL; (*getopt_table)[j].has_arg = 0; @@ -327,11 +319,12 @@ BuildGetOptTable (lldb::OptionDefinition *expanded_option_table, struct option * Driver::OptionData::OptionData () : m_filename(), m_script_lang (lldb::eScriptLanguageDefault), + m_crash_log (), m_source_command_files (), m_debug_mode (false), + m_print_version (false), m_print_help (false), - m_print_version (false) - + m_seen_options() { } @@ -414,9 +407,10 @@ Driver::ParseArgs (int argc, const char *argv[], FILE *out_fh, bool &exit) SBError error; std::string option_string; struct option *long_options = NULL; - int num_options; + uint32_t num_options; - for (num_options = 0; g_options[num_options].long_option != NULL; ++num_options); + for (num_options = 0; g_options[num_options].long_option != NULL; ++num_options) + /* Do Nothing. */; if (num_options == 0) { @@ -468,7 +462,7 @@ Driver::ParseArgs (int argc, const char *argv[], FILE *out_fh, bool &exit) while (1) { int long_options_index = -1; - val = ::getopt_long (argc, (char * const *) argv, option_string.c_str(), long_options, &long_options_index); + val = ::getopt_long (argc, const_cast<char **>(argv), option_string.c_str(), long_options, &long_options_index); if (val == -1) break; @@ -787,7 +781,7 @@ Driver::HandleIOEvent (const SBEvent &event) const char *command_string = SBEvent::GetCStringFromEvent(event); if (command_string == NULL) - command_string == ""; + command_string = ""; SBCommandReturnObject result; if (m_debugger.GetCommandInterpreter().HandleCommand (command_string, result, true) != lldb::eReturnStatusQuit) { diff --git a/lldb/tools/driver/IOChannel.cpp b/lldb/tools/driver/IOChannel.cpp index 52f5ba858b9..d0bea70032b 100644 --- a/lldb/tools/driver/IOChannel.cpp +++ b/lldb/tools/driver/IOChannel.cpp @@ -68,7 +68,7 @@ IOChannel::HandleCompletion (EditLine *e, int ch) const LineInfo *line_info = el_line(m_edit_line); SBStringList completions; - size_t page_size = 40; + int page_size = 40; int num_completions = m_driver->GetDebugger().GetCommandInterpreter().HandleCompletion (line_info->buffer, line_info->cursor, @@ -161,9 +161,12 @@ IOChannel::IOChannel m_read_thread_should_exit (false), m_out_file (out), m_err_file (err), + m_command_queue (), + m_completion_key ("\t"), m_edit_line (::el_init (SBHostOS::GetProgramFileSpec().GetFileName(), in, out, err)), m_history (history_init()), - m_completion_key ("\t") + m_history_event(), + m_getting_command (false) { assert (m_edit_line); ::el_set (m_edit_line, EL_PROMPT, el_prompt); @@ -211,7 +214,7 @@ IOChannel::HistorySaveLoad (bool save) { char history_path[PATH_MAX]; ::snprintf (history_path, sizeof(history_path), "~/.%s-history", SBHostOS::GetProgramFileSpec().GetFileName()); - if (SBFileSpec::ResolvePath (history_path, history_path, sizeof(history_path)) < sizeof(history_path) - 1) + if ((size_t)SBFileSpec::ResolvePath (history_path, history_path, sizeof(history_path)) < sizeof(history_path) - 1) { const char *path_ptr = history_path; if (save) diff --git a/lldb/tools/driver/IOChannel.h b/lldb/tools/driver/IOChannel.h index dec7c82da29..90e76fbbc65 100644 --- a/lldb/tools/driver/IOChannel.h +++ b/lldb/tools/driver/IOChannel.h @@ -86,7 +86,8 @@ public: const char * GetPrompt (); - static unsigned char ElCompletionFn (EditLine *e, int ch); + static unsigned char + ElCompletionFn (EditLine *e, int ch); bool IsGettingCommand () const; @@ -105,9 +106,12 @@ private: History *m_history; HistEvent m_history_event; bool m_getting_command; + void HistorySaveLoad (bool save); - unsigned char HandleCompletion (EditLine *e, int ch); + + unsigned char + HandleCompletion (EditLine *e, int ch); }; #endif // lldb_IOChannel_h_ diff --git a/lldb/tools/driver/Makefile b/lldb/tools/driver/Makefile new file mode 100644 index 00000000000..a0191f7c639 --- /dev/null +++ b/lldb/tools/driver/Makefile @@ -0,0 +1,25 @@ +##===- tools/driver/Makefile -------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## +LLDB_LEVEL := ../.. + +TOOLNAME = lldb + +LD.Flags += -ledit -llldb -llldbUtility + +# # Include this here so we can get the configuration of the targets that have +# # been configured for construction. We have to do this early so we can set up +# # LINK_COMPONENTS before including Makefile.rules +include $(LLDB_LEVEL)/../../Makefile.config + +ifeq ($(HOST_OS),Darwin) + LD.Flags += -Wl,-rpath,@loader_path/../lib/ + LD.Flags += -Wl,-sectcreate -Wl,__TEXT -Wl,__info_plist -Wl,lldb-Info.plist +endif + +include $(LLDB_LEVEL)/Makefile |