* as.h: Replace flagseen with separate variables.

* as.c (parse_args): Set them.  Don't accept -1 option, or -v
	explicitly (it's a synonym for --version).
	* as.c, input-scrub.c, messages.c, read.c, symbols.c, write.c,
	config/obj-aout.c, config/obj-aout.h, config/obj-bout.c,
	config/obj-bout.h, config/obj-coff.c, config/obj-coff.h,
	config/obj-vms.c, config/tc-hppa.c, config/tc-i386.c,
	config/tc-i960.c, config/tc-m68k.c, config/tc-mips.c,
	config/tc-vax.c: Use the new flag variables instead of flagseen.
	* config/tc-vax.c [OBJ_VMS]: Recognize -+, -1, -v, and document in
	usage.
This commit is contained in:
David MacKenzie 1994-06-03 20:59:20 +00:00
parent 26997f44ba
commit def66e248c
14 changed files with 186 additions and 95 deletions

View File

@ -1,5 +1,17 @@
Fri Jun 3 12:50:13 1994 David J. MacKenzie (djm@rtl.cygnus.com)
* as.h: Replace flagseen with separate variables.
* as.c (parse_args): Set them. Don't accept -1 option, or -v
explicitly (it's a synonym for --version).
* as.c, input-scrub.c, messages.c, read.c, symbols.c, write.c,
config/obj-aout.c, config/obj-aout.h, config/obj-bout.c,
config/obj-bout.h, config/obj-coff.c, config/obj-coff.h,
config/obj-vms.c, config/tc-hppa.c, config/tc-i386.c,
config/tc-i960.c, config/tc-m68k.c, config/tc-mips.c,
config/tc-vax.c: Use the new flag variables instead of flagseen.
* config/tc-vax.c [OBJ_VMS]: Recognize -+, -1, -v, and document in
usage.
* as.c (show_usage): Remove target specific messages;
instead, call md_show_usage.
(parse_args): Use getopt_long_only. Take pointers to argc and

View File

@ -122,7 +122,6 @@ Options:\n\
-o OBJFILE name the object-file output OBJFILE (default a.out)\n\
-R fold data section into text section\n\
--statistics print maximum bytes and total seconds used\n\
-v print assembler version number\n\
--version print assembler version number and exit\n\
-W suppress warnings\n\
-w ignored\n\
@ -133,9 +132,6 @@ Options:\n\
}
/*
* Parse arguments, but we are only interested in flags.
* When we find a flag, we process it then make it's argv[] NULL.
* This helps any future argv[] scanners avoid what we processed.
* Since it is easy to do here we interpret the special arg "-"
* to mean "use stdin" and we set that argv[] pointing to "".
* After we have munged argv[], the only things left are source file
@ -161,7 +157,9 @@ parse_args (pargc, pargv)
char *shortopts;
extern CONST char *md_shortopts;
CONST char *std_shortopts = "-1JKLRWZfa::DI:o:vwX";
/* -v takes an argument on VMS, so we don't make it a generic option.
It gets recognized as an abbreviation of -version, anyway. */
CONST char *std_shortopts = "-JKLRWZfa::DI:o:wX";
struct option *longopts;
extern struct option md_longopts[];
@ -240,15 +238,28 @@ parse_args (pargc, pargv)
print_version_id ();
exit (0);
case '1':
case 'J':
flag_signed_overflow_ok = 1;
break;
case 'K':
flag_warn_displacement = 1;
break;
case 'L':
flag_keep_locals = 1;
break;
case 'R':
flag_readonly_data_in_text = 1;
break;
case 'W':
flag_no_warnings = 1;
break;
case 'Z':
case 'f':
flagseen[(unsigned char) optc] = 1;
flag_always_generate_output = 1;
break;
case 'a':
@ -288,6 +299,11 @@ parse_args (pargc, pargv)
case 'D':
/* DEBUG is implemented: it debugs different */
/* things to other people's assemblers. */
flag_debug = 1;
break;
case 'f':
flag_no_comments = 1;
break;
case 'I':
@ -305,10 +321,6 @@ parse_args (pargc, pargv)
as_fatal ("virtual memory exhausted");
break;
case 'v':
print_version_id ();
break;
case 'w':
break;
@ -345,7 +357,6 @@ main (argc, argv)
#endif
myname = argv[0];
memset (flagseen, '\0', sizeof (flagseen)); /* aint seen nothing yet */
#ifndef OBJ_DEFAULT_OUTPUT_FILE_NAME
#define OBJ_DEFAULT_OUTPUT_FILE_NAME "a.out"
#endif
@ -371,14 +382,13 @@ main (argc, argv)
tc_init_after_args ();
#endif
/* Here with flags set up in flagseen[]. */
perform_an_assembly_pass (argc, argv); /* Assemble it. */
#ifdef TC_I960
brtab_emit ();
#endif
if (seen_at_least_1_file ()
&& !((had_warnings () && flagseen['Z'])
&& !((had_warnings () && flag_always_generate_output)
|| had_errors () > 0))
keep_it = 1;
else
@ -418,7 +428,7 @@ main (argc, argv)
myname, (long) (lim - (char *) &environ));
}
if ((had_warnings () && flagseen['Z'])
if ((had_warnings () && flag_always_generate_output)
|| had_errors () > 0)
return EXIT_FAILURE;
return EXIT_SUCCESS;

View File

@ -341,8 +341,14 @@ COMMON fragS bss_address_frag;
/* main program "as.c" (command arguments etc) */
/* ['x'] TRUE if "-x" seen. */
COMMON char flagseen[128];
COMMON unsigned char flag_no_comments; /* -f */
COMMON unsigned char flag_debug; /* -D */
COMMON unsigned char flag_signed_overflow_ok; /* -J */
COMMON unsigned char flag_warn_displacement; /* -K */
COMMON unsigned char flag_keep_locals; /* -L */
COMMON unsigned char flag_readonly_data_in_text; /* -R */
COMMON unsigned char flag_no_warnings; /* -W */
COMMON unsigned char flag_always_generate_output; /* -Z */
/* name of emitted object file */
COMMON char *out_file_name;

View File

@ -116,6 +116,10 @@ obj_aout_frob_symbol (sym, punt)
sym->bsym->section = sec = &bfd_und_section;
if ((type & N_TYPE) != N_INDR
&& (type & N_TYPE) != N_SETA
&& (type & N_TYPE) != N_SETT
&& (type & N_TYPE) != N_SETD
&& (type & N_TYPE) != N_SETB
&& type != N_WARNING
&& (sec == &bfd_abs_section
|| sec == &bfd_und_section))
@ -307,7 +311,7 @@ obj_crawl_symbol_chain (headers)
symbolPP = &symbol_rootP; /*->last symbol chain link. */
while ((symbolP = *symbolPP) != NULL)
{
if (flagseen['R'] && (S_GET_SEGMENT (symbolP) == SEG_DATA))
if (flag_readonly_data_in_text && (S_GET_SEGMENT (symbolP) == SEG_DATA))
{
S_SET_SEGMENT (symbolP, SEG_TEXT);
} /* if pusing data into text */
@ -336,7 +340,7 @@ obj_crawl_symbol_chain (headers)
|| !S_IS_DEFINED (symbolP)
|| S_IS_EXTERNAL (symbolP)
|| (S_GET_NAME (symbolP)[0] != '\001'
&& (flagseen['L'] || !S_LOCAL_NAME (symbolP)))))
&& (flag_keep_locals || !S_LOCAL_NAME (symbolP)))))
{
symbolP->sy_number = symbol_number++;
@ -457,7 +461,7 @@ DEFUN_VOID (s_sect)
if (strcmp (section_name, ".data") == 0)
{
if (flagseen['R'])
if (flag_readonly_data_in_text)
subseg_set (SEG_TEXT, (subsegT) exp + 1000);
else
subseg_set (SEG_DATA, (subsegT) exp);

View File

@ -1,18 +1,18 @@
/* a.out object file format
Copyright (C) 1989, 1990, 1991 Free Software Foundation, Inc.
/* obj-aout.h, a.out object file format for gas, the assembler.
Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
GAS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2,
or (at your option) any later version.
GAS is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
the GNU General Public License for more details.
You should have received a copy of the GNU General Public
License along with GAS; see the file COPYING. If not, write
to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
@ -22,8 +22,18 @@
#include "targ-cpu.h"
#ifndef VMS
#include "a.out.gnu.h" /* Needed to define struct nlist. Sigh. */
#ifdef BFD_ASSEMBLER
#include "../bfd/libaout.h"
#ifndef TARGET_FORMAT
/* #define TARGET_FORMAT "a.out" / * There is no "a.out" target. */
#endif
#else /* ! BFD_ASSEMBLER */
#ifndef VMS
#include "aout_gnu.h" /* Needed to define struct nlist. Sigh. */
#else
#include "a_out.h"
#endif
@ -33,19 +43,41 @@
#endif /* AOUT_MACHTYPE */
extern const short seg_N_TYPE[];
extern const segT N_TYPE_seg[];
extern const segT N_TYPE_seg[];
#ifndef DEFAULT_MAGIC_NUMBER_FOR_OBJECT_FILE
#define DEFAULT_MAGIC_NUMBER_FOR_OBJECT_FILE (OMAGIC)
#endif /* DEFAULT_MAGIC_NUMBER_FOR_OBJECT_FILE */
#endif /* ! BFD_ASSEMBLER */
/* SYMBOL TABLE */
/* Symbol table entry data type */
typedef struct nlist obj_symbol_type; /* Symbol table entry */
typedef struct nlist obj_symbol_type; /* Symbol table entry */
/* Symbol table macros and constants */
#ifdef BFD_ASSEMBLER
#define S_SET_OTHER(S,V) (aout_symbol((S)->bsym)->other = (V))
#define S_SET_TYPE(S,T) (aout_symbol((S)->bsym)->type = (T))
#define S_SET_DESC(S,D) (aout_symbol((S)->bsym)->desc = (D))
#define S_GET_OTHER(S) (aout_symbol((S)->bsym)->other)
#define S_GET_TYPE(S) (aout_symbol((S)->bsym)->type)
#define S_GET_DESC(S) (aout_symbol((S)->bsym)->desc)
asection *text_section, *data_section, *bss_section;
#define obj_frob_symbol(S,PUNT) obj_aout_frob_symbol (S, &PUNT)
#define obj_frob_file() obj_aout_frob_file ()
extern void obj_aout_frob_symbol PARAMS ((struct symbol *, int *));
extern void obj_aout_frob_file PARAMS ((void));
#define obj_sec_sym_ok_for_reloc(SEC) (1)
#else
/*
* Macros to extract information from a symbol table entry.
* This syntaxic indirection allows independence regarding a.out or coff.
@ -68,15 +100,13 @@ typedef struct nlist obj_symbol_type; /* Symbol table entry */
#define S_IS_LOCAL(s) (S_GET_NAME(s) && \
!S_IS_DEBUG(s) && \
(S_GET_NAME(s)[0] == '\001' || \
(S_LOCAL_NAME(s) && !flagseen['L'])))
(S_LOCAL_NAME(s) && !flag_keep_locals)))
/* True if a symbol is not defined in this file */
#define S_IS_EXTERN(s) ((s)->sy_symbol.n_type & N_EXT)
/* True if the symbol has been generated because of a .stabd directive */
#define S_IS_STABD(s) (S_GET_NAME(s) == (char *)0)
/* Accessors */
/* The value of the symbol */
#define S_GET_VALUE(s) (((s)->sy_symbol.n_value))
/* The name of the symbol */
#define S_GET_NAME(s) ((s)->sy_symbol.n_un.n_name)
/* The pointer to the string table */
@ -91,8 +121,6 @@ typedef struct nlist obj_symbol_type; /* Symbol table entry */
#define S_GET_DESC(s) ((s)->sy_symbol.n_desc)
/* Modifiers */
/* Set the value of the symbol */
#define S_SET_VALUE(s,v) ((s)->sy_symbol.n_value = (unsigned long) (v))
/* Assume that a symbol cannot be simultaneously in more than on segment */
/* set segment */
#define S_SET_SEGMENT(s,seg) ((s)->sy_symbol.n_type &= ~N_TYPE,(s)->sy_symbol.n_type|=SEGMENT_TO_SYMBOL_TYPE(seg))
@ -104,6 +132,8 @@ typedef struct nlist obj_symbol_type; /* Symbol table entry */
#define S_SET_NAME(s,v) ((s)->sy_symbol.n_un.n_name = (v))
/* Set the offset in the string table */
#define S_SET_OFFSET(s,v) ((s)->sy_symbol.n_un.n_strx = (v))
/* Set the n_type field */
#define S_SET_TYPE(s,t) ((s)->sy_symbol.n_type = (t))
/* Set the n_other expression value */
#define S_SET_OTHER(s,v) ((s)->sy_symbol.n_other = (v))
/* Set the n_desc expression value */
@ -119,7 +149,7 @@ typedef struct nlist obj_symbol_type; /* Symbol table entry */
+ H_GET_DATA_RELOCATION_SIZE(h) \
+ H_GET_STRING_SIZE(h))
#define H_GET_HEADER_SIZE(h) (sizeof(struct exec))
#define H_GET_HEADER_SIZE(h) (EXEC_BYTES_SIZE)
#define H_GET_TEXT_SIZE(h) ((h)->header.a_text)
#define H_GET_DATA_SIZE(h) ((h)->header.a_data)
#define H_GET_BSS_SIZE(h) ((h)->header.a_bss)
@ -164,41 +194,29 @@ typedef struct nlist obj_symbol_type; /* Symbol table entry */
#define H_SET_TEXT_RELOCATION_SIZE(h,v) ((h)->header.a_trsize = (v))
#define H_SET_DATA_RELOCATION_SIZE(h,v) ((h)->header.a_drsize = (v))
#define H_SET_SYMBOL_TABLE_SIZE(h,v) ((h)->header.a_syms = (v) * \
sizeof(struct nlist))
#define H_SET_SYMBOL_TABLE_SIZE(h,v) ((h)->header.a_syms = (v) * 12)
#define H_SET_ENTRY_POINT(h,v) ((h)->header.a_entry = (v))
#define H_SET_STRING_SIZE(h,v) ((h)->string_table_size = (v))
/*
* Current means for getting the name of a segment.
* This will change for infinite-segments support (e.g. COFF).
*/
#define segment_name(seg) ( seg_name[(int)(seg)] )
extern char *const seg_name[];
typedef struct
{
struct exec header; /* a.out header */
long string_table_size; /* names + '\0' + sizeof(int) */
}
typedef struct {
struct exec header; /* a.out header */
long string_table_size; /* names + '\0' + sizeof(int) */
} object_headers;
object_headers;
/* line numbering stuff. */
#define OBJ_EMIT_LINENO(a, b, c) {;}
struct fix;
void tc_aout_fix_to_chars PARAMS ((char *where, struct fix *fixP, relax_addressT segment_address));
#endif
#define obj_symbol_new_hook(s) {;}
#ifdef __STDC__
struct fix;
void tc_aout_fix_to_chars(char *where, struct fix *fixP, relax_addressT segment_address);
#else
void tc_aout_fix_to_chars();
#endif /* __STDC__ */
/*
* Local Variables:
* comment-column: 0
* fill-column: 131
* End:
*/
#define EMIT_SECTION_SYMBOLS 0
/* end of obj-aout.h */

View File

@ -239,7 +239,7 @@ obj_crawl_symbol_chain (headers)
symbolPP = &symbol_rootP; /*->last symbol chain link. */
while ((symbolP = *symbolPP) != NULL)
{
if (flagseen['R'] && (S_GET_SEGMENT (symbolP) == SEG_DATA))
if (flag_readonly_data_in_text && (S_GET_SEGMENT (symbolP) == SEG_DATA))
{
S_SET_SEGMENT (symbolP, SEG_TEXT);
} /* if pusing data into text */
@ -271,7 +271,7 @@ obj_crawl_symbol_chain (headers)
|| !S_IS_DEFINED (symbolP)
|| S_IS_EXTERNAL (symbolP)
#endif /* TC_I960 */
|| (S_GET_NAME (symbolP)[0] != '\001' && (flagseen['L'] || !S_LOCAL_NAME (symbolP)))))
|| (S_GET_NAME (symbolP)[0] != '\001' && (flag_keep_locals || !S_LOCAL_NAME (symbolP)))))
{
symbolP->sy_number = symbol_number++;

View File

@ -192,7 +192,7 @@ struct relocation_info
#define S_IS_LOCAL(s) (S_GET_NAME(s) && \
!S_IS_DEBUG(s) && \
(S_GET_NAME(s)[0] == '\001' || \
(S_LOCAL_NAME(s) && !flagseen['L'])))
(S_LOCAL_NAME(s) && !flag_keep_locals)))
/* True if a symbol is not defined in this file */
#define S_IS_EXTERN(s) ((s)->sy_symbol.n_type & N_EXT)
/* True if the symbol has been generated because of a .stabd directive */

View File

@ -2589,7 +2589,7 @@ yank_symbols ()
symbolP = real_symbolP;
} /* if not local but dup'd */
if (flagseen['R'] && (S_GET_SEGMENT (symbolP) == SEG_E1))
if (flag_readonly_data_in_text && (S_GET_SEGMENT (symbolP) == SEG_E1))
{
S_SET_SEGMENT (symbolP, SEG_E0);
} /* push data into text */
@ -3272,7 +3272,7 @@ static void
obj_coff_data (ignore)
int ignore;
{
if (flagseen['R'])
if (flag_readonly_data_in_text)
subseg_new (".text", get_absolute_expression () + 1000);
else
subseg_new (".data", get_absolute_expression ());
@ -3823,7 +3823,7 @@ fixup_segment (segP, this_segment_type)
a signed number. We already know it is not too
negative. This is to catch over-large switches
generated by gcc on the 68k. */
if (!flagseen['J']
if (!flag_signed_overflow_ok
&& size == 2
&& add_number > 0x7fff)
as_bad ("Signed .word overflow; switch may be too large; %ld at 0x%lx",

View File

@ -39,6 +39,11 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
*/
char *compiler_version_string;
extern int flag_hash_long_names; /* -+ */
extern int flag_one; /* -1 */
extern int flag_show_after_trunc; /* -H */
extern int flag_no_hash_mixed_case; /* -h NUM */
/* Flag that determines how we map names. This takes several values, and
* is set with the -h switch. A value of zero implies names should be
* upper case, and the presence of the -h switch inhibits the case hack.
@ -779,7 +784,7 @@ VMS_TBT_Module_Begin ()
*cp1 = 0;
if (strlen (Module_Name) > 31)
{
if (flagseen['+'])
if (flag_hash_long_names)
printf ("%s: Module name truncated: %s\n", myname, Module_Name);
Module_Name[31] = 0;
}
@ -3015,7 +3020,7 @@ Write_VMS_MHD_Records ()
*cp1 = 0;
if (strlen (Module_Name) > 31)
{
if (flagseen['+'])
if (flag_hash_long_names)
printf ("%s: Module name truncated: %s\n", myname, Module_Name);
Module_Name[31] = 0;
}
@ -3196,7 +3201,7 @@ VMS_Case_Hack_Symbol (In, Out)
}
old_name = In;
/* if (strlen(In) > 31 && flagseen['+'])
/* if (strlen(In) > 31 && flag_hash_long_names)
printf("%s: Symbol name truncated: %s\n",myname,In);*/
/*
* Do the case conversion
@ -3233,7 +3238,7 @@ VMS_Case_Hack_Symbol (In, Out)
/*
* If we saw a dollar sign, we don't do case hacking
*/
if (flagseen['h'] || Saw_Dollar)
if (flag_no_hash_mixed_case || Saw_Dollar)
Case_Hack_Bits = 0;
/*
@ -3256,7 +3261,7 @@ VMS_Case_Hack_Symbol (In, Out)
* and ensure that they are lowercase
*/
for (i = 0; (In[i] != 0) && (i < 8); i++)
if (isupper(In[i]) && !Saw_Dollar && !flagseen['h'])
if (isupper(In[i]) && !Saw_Dollar && !flag_no_hash_mixed_case)
break;
if (In[i] == 0)
@ -3291,7 +3296,7 @@ VMS_Case_Hack_Symbol (In, Out)
*/
/* Old behavior for regular GNU-C compiler */
if (!flagseen['+'])
if (!flag_hash_long_names)
truncate = 0;
if ((Case_Hack_Bits != 0) || (truncate == 1))
{
@ -3324,7 +3329,7 @@ VMS_Case_Hack_Symbol (In, Out)
* Done
*/
*Out = 0;
if (truncate == 1 && flagseen['+'] && flagseen['H'])
if (truncate == 1 && flag_hash_long_names && flag_show_after_trunc)
printf ("%s: Symbol %s replaced by %s\n", myname, old_name, new_name);
}
@ -4234,7 +4239,7 @@ VMS_Check_For_Main ()
S_IS_EXTERNAL (symbolP) && (S_GET_TYPE (symbolP) == N_TEXT))
{
#ifdef HACK_DEC_C_STARTUP
if (!flagseen['+'])
if (!flag_hash_long_names)
{
#endif
/*
@ -5223,10 +5228,10 @@ VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
if (Current_File->max_line == 0)
continue;
if ((strncmp (Current_File->name, "GNU_GXX_INCLUDE:", 16) == 0) &&
!flagseen['D'])
!flag_debug)
continue;
if ((strncmp (Current_File->name, "GNU_CC_INCLUDE:", 15) == 0) &&
!flagseen['D'])
!flag_debug)
continue;
/* show a few extra lines at the start of the region selected */
if (Current_File->min_line > 2)

View File

@ -1282,10 +1282,10 @@ md_begin ()
/* Folding of text and data segments fails miserably on the PA.
Warn user and disable "-R" option. */
if (flagseen['R'])
if (flag_readonly_data_in_text)
{
as_warn ("-R option not supported on this target.");
flagseen['R'] = 0;
flag_readonly_data_in_text = 0;
}
pa_spaces_begin ();

View File

@ -4928,7 +4928,7 @@ md_parse_option (c, arg)
#endif
/* FIXME: This breaks -L -EL. */
flagseen['L'] = 0;
flag_keep_locals = 0;
break;
case 'O':

View File

@ -55,6 +55,11 @@ static struct vit v;
LITTLENUM_TYPE big_operand_bits[VIT_MAX_OPERANDS][SIZE_OF_LARGE_NUMBER];
FLONUM_TYPE float_operand[VIT_MAX_OPERANDS];
/* Above is made to point into big_operand_bits by md_begin(). */
int flag_hash_long_names; /* -+ */
int flag_one; /* -1 */
int flag_show_after_trunc; /* -H */
int flag_no_hash_mixed_case; /* -h NUM */
/*
* For VAX, relative addresses of "just the right length" are easy.
@ -3099,7 +3104,7 @@ md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
}
#ifdef OBJ_VMS
CONST char *md_shortopts = "d:STt:V+h:H";
CONST char *md_shortopts = "d:STt:V+1h:Hv:";
#else
CONST char *md_shortopts = "d:STt:V";
#endif
@ -3136,17 +3141,31 @@ md_parse_option (c, arg)
break;
#ifdef OBJ_VMS
case '+': /* For g++ */
case '+': /* For g++. Hash any name > 31 chars long. */
flag_hash_long_names = 1;
break;
case '1': /* For backward compatibility */
flag_one = 1;
break;
case 'H': /* Show new symbol after hash truncation */
flag_show_after_trunc = 1;
break;
case 'h': /* No hashing of mixed-case names */
{
extern char vms_name_mapping;
vms_name_mapping = atoi (arg);
flag_no_hash_mixed_case = 1;
}
break;
case 'H': /* Show new symbol after hash truncation */
case 'v':
{
extern char *compiler_version_string;
compiler_version_string = arg;
}
break;
#endif
@ -3169,6 +3188,14 @@ VAX options:\n\
-t FILE ignored\n\
-T ignored\n\
-V ignored\n");
#ifdef OBJ_VMS
fprintf (stream, "\
-+ hash names longer than 31 characters\n\
-1 ?\n\
-H show new symbol after hash truncation\n\
-h do not hash mixed-case names\n\
-vVERSION compiler version is VERSION\n");
#endif
}
/* We have no need to default values of symbols. */

View File

@ -888,8 +888,11 @@ s_comm (ignore)
S_SET_EXTERNAL (symbolP);
}
#ifdef OBJ_VMS
if ( (!temp) || !flagseen['1'])
S_GET_OTHER(symbolP) = const_flag;
{
extern int flag_one;
if ( (!temp) || !flag_one)
S_GET_OTHER(symbolP) = const_flag;
}
#endif /* not OBJ_VMS */
know (symbolP->sy_frag == &zero_address_frag);
demand_empty_rest_of_line ();
@ -903,7 +906,7 @@ s_data (ignore)
register int temp;
temp = get_absolute_expression ();
if (flagseen['R'])
if (flag_readonly_data_in_text)
{
section = text_section;
temp += 1000;

View File

@ -1042,7 +1042,7 @@ write_object_file ()
n_errs = had_errors ();
/* The -Z flag indicates that an object file should be generated,
regardless of warnings and errors. */
if (flagseen['Z'])
if (flag_always_generate_output)
{
if (n_warns || n_errs)
as_warn ("%d error%s, %d warning%s, generating bad object file.\n",
@ -1128,7 +1128,7 @@ write_object_file ()
data frags into the text segment. Do this before relaxing so
we know to take advantage of -R and make shorter addresses. */
#if !defined (OBJ_AOUT) || defined (BFD_ASSEMBLER)
if (flagseen['R'])
if (flag_readonly_data_in_text)
{
merge_data_into_text ();
}
@ -1485,6 +1485,16 @@ write_object_file ()
}
}
/* Now do any format-specific adjustments to the symbol table, such
as adding file symbols. */
#ifdef obj_adjust_symtab
obj_adjust_symtab ();
#endif
/* Now that all the sizes are known, and contents correct, we can
start writing to the file. */
set_symtab ();
/* If *_frob_file changes the symbol value at this point, it is
responsible for moving the changed value into symp->bsym->value
as well. Hopefully all symbol value changing can be done in
@ -1496,10 +1506,6 @@ write_object_file ()
obj_frob_file ();
#endif
/* Now that all the sizes are known, and contents correct, we can
start writing to the file. */
set_symtab ();
bfd_map_over_sections (stdoutput, write_relocs, (char *) 0);
bfd_map_over_sections (stdoutput, write_contents, (char *) 0);
@ -1679,7 +1685,7 @@ relax_segment (segment_frag_root, segment)
+ S_GET_VALUE (lie->sub)));
if (offset <= -32768 || offset >= 32767)
{
if (flagseen['K'])
if (flag_warn_displacement)
{
char buf[50];
sprint_value (buf, (addressT) lie->addnum);
@ -2161,7 +2167,7 @@ fixup_segment (fixP, this_segment_type)
/* Warn if a .word value is too large when treated as a signed
number. We already know it is not too negative. This is to
catch over-large switches generated by gcc on the 68k. */
if (!flagseen['J']
if (!flag_signed_overflow_ok
&& size == 2
&& add_number > 0x7fff)
as_bad_where (fixP->fx_file, fixP->fx_line,