From: Jan Beulich Date: Fri, 30 Aug 2024 09:22:41 +0000 (+0200) Subject: gas: properly check for ELF in LISTING_NODEBUG handling X-Git-Tag: gdb-16-branchpoint~1030 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=91fa2ea2213d3e9e53080f534ba60026d9a93916;p=thirdparty%2Fbinutils-gdb.git gas: properly check for ELF in LISTING_NODEBUG handling While OBJ_MAYBE_ELF presently implies OBJ_ELF (due to obj-multi.h including obj-elf.h for obscure reasons), there still need to be IS_ELF checks to cover for the OBJ_MAYBE_ELF case. Note, however, that code checking for ->debugging being true doesn't need such extra checks, as the field can only ever be true when IS_ELF. On the same basis reduce #ifdef-ary in debugging_pseudo(). Also move the field (into what on 64-bit architectures is a 32-bit gap) and put it inside an OBJ_ELF conditional, too. While there further switch int to bool in related code. --- diff --git a/gas/listing.c b/gas/listing.c index 4309063b1ad..ef1798046e5 100644 --- a/gas/listing.c +++ b/gas/listing.c @@ -176,13 +176,16 @@ struct list_info_struct /* Pointers to linked list of messages associated with this line. */ struct list_message *messages, *last_message; - enum edict_enum edict; - char *edict_arg; - +#ifdef OBJ_ELF /* Nonzero if this line is to be omitted because it contains debugging information. This can become a flags field if we come up with more information to store here. */ - int debugging; + bool debugging; +#endif + + enum edict_enum edict; + char *edict_arg; + }; typedef struct list_info_struct list_info_type; @@ -226,7 +229,6 @@ static unsigned int calc_hex (list_info_type *); static void print_lines (list_info_type *, unsigned int, const char *, unsigned int); static void list_symbol_table (void); -static int debugging_pseudo (list_info_type *, const char *); static void listing_listing (char *); static void @@ -311,7 +313,8 @@ listing_newline (char *ps) considered to be debugging information. This includes the statement which switches us into the debugging section, which we can only set after we are already in the debugging section. */ - if ((listing & LISTING_NODEBUG) != 0 + if (IS_ELF + && (listing & LISTING_NODEBUG) != 0 && listing_tail != NULL && ! listing_tail->debugging) { @@ -320,7 +323,7 @@ listing_newline (char *ps) segname = segment_name (now_seg); if (startswith (segname, ".debug") || startswith (segname, ".line")) - listing_tail->debugging = 1; + listing_tail->debugging = true; } #endif @@ -421,13 +424,13 @@ listing_newline (char *ps) new_i->edict = EDICT_NONE; new_i->hll_file = (file_info_type *) NULL; new_i->hll_line = 0; - new_i->debugging = 0; new_frag (); #ifdef OBJ_ELF /* In ELF, anything in a section beginning with .debug or .line is considered to be debugging information. */ + new_i->debugging = false; if ((listing & LISTING_NODEBUG) != 0) { const char *segname; @@ -435,7 +438,7 @@ listing_newline (char *ps) segname = segment_name (now_seg); if (startswith (segname, ".debug") || startswith (segname, ".line")) - new_i->debugging = 1; + new_i->debugging = true; } #endif } @@ -1120,24 +1123,20 @@ print_source (file_info_type * current_file, /* Sometimes the user doesn't want to be bothered by the debugging records inserted by the compiler, see if the line is suspicious. */ -static int -debugging_pseudo (list_info_type *list, const char *line) +static bool +debugging_pseudo (list_info_type *list ATTRIBUTE_UNUSED, const char *line) { #ifdef OBJ_ELF - static int in_debug; - int was_debug; -#endif + static bool in_debug; + bool was_debug; if (list->debugging) { -#ifdef OBJ_ELF - in_debug = 1; -#endif - return 1; + in_debug = true; + return true; } -#ifdef OBJ_ELF was_debug = in_debug; - in_debug = 0; + in_debug = false; #endif while (ISSPACE (*line)) @@ -1156,42 +1155,42 @@ debugging_pseudo (list_info_type *list, const char *line) && list->next != NULL && list->next->debugging) { - in_debug = 1; - return 1; + in_debug = true; + return true; } #endif - return 0; + return false; } line++; if (startswith (line, "def")) - return 1; + return true; if (startswith (line, "val")) - return 1; + return true; if (startswith (line, "scl")) - return 1; + return true; if (startswith (line, "line")) - return 1; + return true; if (startswith (line, "endef")) - return 1; + return true; if (startswith (line, "ln")) - return 1; + return true; if (startswith (line, "type")) - return 1; + return true; if (startswith (line, "size")) - return 1; + return true; if (startswith (line, "dim")) - return 1; + return true; if (startswith (line, "tag")) - return 1; + return true; if (startswith (line, "stabs")) - return 1; + return true; if (startswith (line, "stabn")) - return 1; + return true; - return 0; + return false; } static void