forked from Imagelibrary/binutils-gdb
* as.c (parse_args): Add --keep-locals alias for -L.
Add --strip-local-absolute. (show_usage): Update. * as.h (flag_strip_local_absolute): New flag. * symbols.c (S_IS_LOCAL): Use it. * config/obj-aout.h (S_IS_LOCAL): Likewise. * config/obj-bout.h (S_IS_LOCAL): Likewise. * config/obj-coff.h (S_IS_LOCAL): Likewise. PR 14689
This commit is contained in:
@@ -1,3 +1,14 @@
|
|||||||
|
Tue Jan 27 05:32:05 1998 Richard Henderson <rth@cygnus.com>
|
||||||
|
|
||||||
|
* as.c (parse_args): Add --keep-locals alias for -L.
|
||||||
|
Add --strip-local-absolute.
|
||||||
|
(show_usage): Update.
|
||||||
|
* as.h (flag_strip_local_absolute): New flag.
|
||||||
|
* symbols.c (S_IS_LOCAL): Use it.
|
||||||
|
* config/obj-aout.h (S_IS_LOCAL): Likewise.
|
||||||
|
* config/obj-bout.h (S_IS_LOCAL): Likewise.
|
||||||
|
* config/obj-coff.h (S_IS_LOCAL): Likewise.
|
||||||
|
|
||||||
start-sanitize-sky
|
start-sanitize-sky
|
||||||
Mon Jan 26 16:29:49 1998 Doug Evans <devans@seba.cygnus.com>
|
Mon Jan 26 16:29:49 1998 Doug Evans <devans@seba.cygnus.com>
|
||||||
|
|
||||||
|
|||||||
28
gas/as.c
28
gas/as.c
@@ -78,7 +78,9 @@ segT reg_section, expr_section;
|
|||||||
segT text_section, data_section, bss_section;
|
segT text_section, data_section, bss_section;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int chunksize = 5000;
|
/* The default obstack chunk size. If we set this to zero, the
|
||||||
|
obstack code will use whatever will fit in a 4096 byte block. */
|
||||||
|
int chunksize = 0;
|
||||||
|
|
||||||
/* To monitor memory allocation more effectively, make this non-zero.
|
/* To monitor memory allocation more effectively, make this non-zero.
|
||||||
Then the chunk sizes for gas and bfd will be reduced. */
|
Then the chunk sizes for gas and bfd will be reduced. */
|
||||||
@@ -135,6 +137,7 @@ Options:\n\
|
|||||||
d omit debugging directives\n\
|
d omit debugging directives\n\
|
||||||
h include high-level source\n\
|
h include high-level source\n\
|
||||||
l include assembly\n\
|
l include assembly\n\
|
||||||
|
m include macro expansions\n\
|
||||||
n omit forms processing\n\
|
n omit forms processing\n\
|
||||||
s include symbols\n\
|
s include symbols\n\
|
||||||
=file set listing file name (must be last sub-option)\n");
|
=file set listing file name (must be last sub-option)\n");
|
||||||
@@ -147,7 +150,7 @@ Options:\n\
|
|||||||
-I DIR add DIR to search list for .include directives\n\
|
-I DIR add DIR to search list for .include directives\n\
|
||||||
-J don't warn about signed overflow\n\
|
-J don't warn about signed overflow\n\
|
||||||
-K warn when differences altered for long displacements\n\
|
-K warn when differences altered for long displacements\n\
|
||||||
-L keep local symbols (starting with `L')\n");
|
-L,--keep-locals keep local symbols (e.g. starting with `L')\n");
|
||||||
fprintf (stream, "\
|
fprintf (stream, "\
|
||||||
-M,--mri assemble in MRI compatibility mode\n\
|
-M,--mri assemble in MRI compatibility mode\n\
|
||||||
--MD FILE write dependency information in FILE (default none)\n\
|
--MD FILE write dependency information in FILE (default none)\n\
|
||||||
@@ -155,6 +158,7 @@ Options:\n\
|
|||||||
-o OBJFILE name the object-file output OBJFILE (default a.out)\n\
|
-o OBJFILE name the object-file output OBJFILE (default a.out)\n\
|
||||||
-R fold data section into text section\n\
|
-R fold data section into text section\n\
|
||||||
--statistics print various measured statistics from execution\n\
|
--statistics print various measured statistics from execution\n\
|
||||||
|
--strip-local-absolute strip local absolute symbols\n\
|
||||||
--version print assembler version number and exit\n\
|
--version print assembler version number and exit\n\
|
||||||
-W suppress warnings\n\
|
-W suppress warnings\n\
|
||||||
--itbl INSTTBL extend instruction set to include instructions\n\
|
--itbl INSTTBL extend instruction set to include instructions\n\
|
||||||
@@ -305,6 +309,7 @@ parse_args (pargc, pargv)
|
|||||||
static const struct option std_longopts[] = {
|
static const struct option std_longopts[] = {
|
||||||
#define OPTION_HELP (OPTION_STD_BASE)
|
#define OPTION_HELP (OPTION_STD_BASE)
|
||||||
{"help", no_argument, NULL, OPTION_HELP},
|
{"help", no_argument, NULL, OPTION_HELP},
|
||||||
|
{"keep-locals", no_argument, NULL, 'L'},
|
||||||
{"mri", no_argument, NULL, 'M'},
|
{"mri", no_argument, NULL, 'M'},
|
||||||
#define OPTION_NOCPP (OPTION_STD_BASE + 1)
|
#define OPTION_NOCPP (OPTION_STD_BASE + 1)
|
||||||
{"nocpp", no_argument, NULL, OPTION_NOCPP},
|
{"nocpp", no_argument, NULL, OPTION_NOCPP},
|
||||||
@@ -331,7 +336,9 @@ parse_args (pargc, pargv)
|
|||||||
#define OPTION_DEPFILE (OPTION_STD_BASE + 9)
|
#define OPTION_DEPFILE (OPTION_STD_BASE + 9)
|
||||||
{"MD", required_argument, NULL, OPTION_DEPFILE},
|
{"MD", required_argument, NULL, OPTION_DEPFILE},
|
||||||
#define OPTION_GSTABS (OPTION_STD_BASE + 10)
|
#define OPTION_GSTABS (OPTION_STD_BASE + 10)
|
||||||
{"gstabs", no_argument, NULL, OPTION_GSTABS}
|
{"gstabs", no_argument, NULL, OPTION_GSTABS},
|
||||||
|
#define OPTION_STRIP_LOCAL_ABSOLUTE (OPTION_STD_BASE + 11)
|
||||||
|
{"strip-local-absolute", no_argument, NULL, OPTION_STRIP_LOCAL_ABSOLUTE}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Construct the option lists from the standard list and the
|
/* Construct the option lists from the standard list and the
|
||||||
@@ -412,6 +419,10 @@ parse_args (pargc, pargv)
|
|||||||
flag_print_statistics = 1;
|
flag_print_statistics = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OPTION_STRIP_LOCAL_ABSOLUTE:
|
||||||
|
flag_strip_local_absolute = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case OPTION_VERSION:
|
case OPTION_VERSION:
|
||||||
/* This output is intended to follow the GNU standards document. */
|
/* This output is intended to follow the GNU standards document. */
|
||||||
printf ("GNU assembler %s\n", VERSION);
|
printf ("GNU assembler %s\n", VERSION);
|
||||||
@@ -556,6 +567,9 @@ the GNU General Public License. This program has absolutely no warranty.\n");
|
|||||||
case 'l':
|
case 'l':
|
||||||
listing |= LISTING_LISTING;
|
listing |= LISTING_LISTING;
|
||||||
break;
|
break;
|
||||||
|
case 'm':
|
||||||
|
listing |= LISTING_MACEXP;
|
||||||
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
listing |= LISTING_NOFORM;
|
listing |= LISTING_NOFORM;
|
||||||
break;
|
break;
|
||||||
@@ -733,6 +747,14 @@ main (argc, argv)
|
|||||||
else
|
else
|
||||||
keep_it = 0;
|
keep_it = 0;
|
||||||
|
|
||||||
|
#if defined (BFD_ASSEMBLER) || !defined (BFD)
|
||||||
|
/* This used to be done at the start of write_object_file in
|
||||||
|
write.c, but that caused problems when doing listings when
|
||||||
|
keep_it was zero. This could probably be moved above md_end, but
|
||||||
|
I didn't want to risk the change. */
|
||||||
|
subsegs_finish ();
|
||||||
|
#endif
|
||||||
|
|
||||||
if (keep_it)
|
if (keep_it)
|
||||||
write_object_file ();
|
write_object_file ();
|
||||||
|
|
||||||
|
|||||||
96
gas/as.h
96
gas/as.h
@@ -394,95 +394,6 @@ typedef unsigned int relax_substateT;
|
|||||||
Could be a problem, cross-assembling for 64-bit machines. */
|
Could be a problem, cross-assembling for 64-bit machines. */
|
||||||
typedef addressT relax_addressT;
|
typedef addressT relax_addressT;
|
||||||
|
|
||||||
|
|
||||||
/* frags.c */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A code fragment (frag) is some known number of chars, followed by some
|
|
||||||
* unknown number of chars. Typically the unknown number of chars is an
|
|
||||||
* instruction address whose size is yet unknown. We always know the greatest
|
|
||||||
* possible size the unknown number of chars may become, and reserve that
|
|
||||||
* much room at the end of the frag.
|
|
||||||
* Once created, frags do not change address during assembly.
|
|
||||||
* We chain the frags in (a) forward-linked list(s). The object-file address
|
|
||||||
* of the 1st char of a frag is generally not known until after relax().
|
|
||||||
* Many things at assembly time describe an address by {object-file-address
|
|
||||||
* of a particular frag}+offset.
|
|
||||||
|
|
||||||
BUG: it may be smarter to have a single pointer off to various different
|
|
||||||
notes for different frag kinds. See how code pans
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct frag
|
|
||||||
{
|
|
||||||
/* Object file address. */
|
|
||||||
addressT fr_address;
|
|
||||||
/* Chain forward; ascending address order. Rooted in frch_root. */
|
|
||||||
struct frag *fr_next;
|
|
||||||
|
|
||||||
/* (Fixed) number of chars we know we have. May be 0. */
|
|
||||||
offsetT fr_fix;
|
|
||||||
/* (Variable) number of chars after above. May be 0. */
|
|
||||||
offsetT fr_var;
|
|
||||||
/* For variable-length tail. */
|
|
||||||
struct symbol *fr_symbol;
|
|
||||||
/* For variable-length tail. */
|
|
||||||
offsetT fr_offset;
|
|
||||||
/* Points to opcode low addr byte, for relaxation. */
|
|
||||||
char *fr_opcode;
|
|
||||||
|
|
||||||
#ifndef NO_LISTING
|
|
||||||
struct list_info_struct *line;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* What state is my tail in? */
|
|
||||||
relax_stateT fr_type;
|
|
||||||
relax_substateT fr_subtype;
|
|
||||||
|
|
||||||
union {
|
|
||||||
/* These are needed only on the NS32K machines. But since we don't
|
|
||||||
include targ-cpu.h until after this structure has been defined,
|
|
||||||
we can't really conditionalize it. This code should be
|
|
||||||
rearranged a bit to make that possible. */
|
|
||||||
struct {
|
|
||||||
struct frag *fr_opcode_fragP;
|
|
||||||
unsigned int fr_opcode_offset;
|
|
||||||
char fr_bsr;
|
|
||||||
} fr_ns32k;
|
|
||||||
#ifdef USING_CGEN
|
|
||||||
/* Don't include this unless using CGEN to keep frag size down. */
|
|
||||||
struct {
|
|
||||||
const struct cgen_insn *insn;
|
|
||||||
unsigned char opindex, opinfo;
|
|
||||||
} cgen;
|
|
||||||
#endif
|
|
||||||
} fr_targ;
|
|
||||||
|
|
||||||
/* Where the frag was created, or where it became a variant frag. */
|
|
||||||
char *fr_file;
|
|
||||||
unsigned int fr_line;
|
|
||||||
|
|
||||||
/* Data begins here. */
|
|
||||||
char fr_literal[1];
|
|
||||||
};
|
|
||||||
|
|
||||||
#define SIZEOF_STRUCT_FRAG \
|
|
||||||
((char *)zero_address_frag.fr_literal-(char *)&zero_address_frag)
|
|
||||||
/* We want to say fr_literal[0] above. */
|
|
||||||
|
|
||||||
typedef struct frag fragS;
|
|
||||||
|
|
||||||
/* Current frag we are building. This frag is incomplete. It is,
|
|
||||||
however, included in frchain_now. The fr_fix field is bogus;
|
|
||||||
instead, use frag_now_fix (). */
|
|
||||||
COMMON fragS *frag_now;
|
|
||||||
extern int frag_now_fix PARAMS ((void));
|
|
||||||
|
|
||||||
/* For foreign-segment symbol fixups. */
|
|
||||||
COMMON fragS zero_address_frag;
|
|
||||||
/* For local common (N_BSS segment) fixups. */
|
|
||||||
COMMON fragS bss_address_frag;
|
|
||||||
|
|
||||||
/* main program "as.c" (command arguments etc) */
|
/* main program "as.c" (command arguments etc) */
|
||||||
|
|
||||||
COMMON unsigned char flag_no_comments; /* -f */
|
COMMON unsigned char flag_no_comments; /* -f */
|
||||||
@@ -513,9 +424,11 @@ COMMON int flag_no_warnings; /* -W */
|
|||||||
COMMON unsigned char flag_always_generate_output; /* -Z */
|
COMMON unsigned char flag_always_generate_output; /* -Z */
|
||||||
|
|
||||||
/* This is true if the assembler should output time and space usage. */
|
/* This is true if the assembler should output time and space usage. */
|
||||||
|
|
||||||
COMMON unsigned char flag_print_statistics;
|
COMMON unsigned char flag_print_statistics;
|
||||||
|
|
||||||
|
/* True if local absolute symbols are to be stripped. */
|
||||||
|
COMMON int flag_strip_local_absolute;
|
||||||
|
|
||||||
/* name of emitted object file */
|
/* name of emitted object file */
|
||||||
COMMON char *out_file_name;
|
COMMON char *out_file_name;
|
||||||
|
|
||||||
@@ -538,7 +451,7 @@ extern int listing;
|
|||||||
enum debug_info_type { DEBUG_NONE, DEBUG_STABS, DEBUG_ECOFF };
|
enum debug_info_type { DEBUG_NONE, DEBUG_STABS, DEBUG_ECOFF };
|
||||||
|
|
||||||
extern enum debug_info_type debug_type;
|
extern enum debug_info_type debug_type;
|
||||||
|
|
||||||
/* Maximum level of macro nesting. */
|
/* Maximum level of macro nesting. */
|
||||||
extern int max_macro_nest;
|
extern int max_macro_nest;
|
||||||
|
|
||||||
@@ -646,6 +559,7 @@ struct expressionS;
|
|||||||
struct fix;
|
struct fix;
|
||||||
struct symbol;
|
struct symbol;
|
||||||
struct relax_type;
|
struct relax_type;
|
||||||
|
typedef struct frag fragS;
|
||||||
|
|
||||||
#ifdef BFD_ASSEMBLER
|
#ifdef BFD_ASSEMBLER
|
||||||
/* literal.c */
|
/* literal.c */
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/* obj-aout.h, a.out object file format for gas, the assembler.
|
/* obj-aout.h, a.out object file format for gas, the assembler.
|
||||||
Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
|
Copyright (C) 1989, 90, 91, 92, 93, 94, 95, 1996
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GAS, the GNU Assembler.
|
This file is part of GAS, the GNU Assembler.
|
||||||
|
|
||||||
@@ -89,7 +90,11 @@ extern void obj_aout_frob_file PARAMS ((void));
|
|||||||
#define S_IS_EXTERNAL(s) ((s)->sy_symbol.n_type & N_EXT)
|
#define S_IS_EXTERNAL(s) ((s)->sy_symbol.n_type & N_EXT)
|
||||||
|
|
||||||
/* True if symbol has been defined, ie is in N_{TEXT,DATA,BSS,ABS} or N_EXT */
|
/* True if symbol has been defined, ie is in N_{TEXT,DATA,BSS,ABS} or N_EXT */
|
||||||
#define S_IS_DEFINED(s) ((S_GET_TYPE(s) != N_UNDF) || (S_GET_OTHER(s) != 0) || (S_GET_DESC(s) != 0))
|
#define S_IS_DEFINED(s) \
|
||||||
|
(S_GET_TYPE (s) != N_UNDF || S_GET_DESC (s) != 0)
|
||||||
|
|
||||||
|
#define S_IS_COMMON(s) \
|
||||||
|
(S_GET_TYPE (s) == N_UNDF && S_GET_VALUE (s) != 0)
|
||||||
|
|
||||||
#define S_IS_REGISTER(s) ((s)->sy_symbol.n_type == N_REGISTER)
|
#define S_IS_REGISTER(s) ((s)->sy_symbol.n_type == N_REGISTER)
|
||||||
|
|
||||||
@@ -97,11 +102,14 @@ extern void obj_aout_frob_file PARAMS ((void));
|
|||||||
#define S_IS_DEBUG(s) ((s)->sy_symbol.n_type & N_STAB)
|
#define S_IS_DEBUG(s) ((s)->sy_symbol.n_type & N_STAB)
|
||||||
/* True if a symbol is local symbol name */
|
/* True if a symbol is local symbol name */
|
||||||
#define S_IS_LOCAL(s) \
|
#define S_IS_LOCAL(s) \
|
||||||
(S_GET_NAME (s) \
|
((S_GET_NAME (s) \
|
||||||
&& !S_IS_DEBUG (s) \
|
&& !S_IS_DEBUG (s) \
|
||||||
&& (strchr (S_GET_NAME (s), '\001') != NULL \
|
&& (strchr (S_GET_NAME (s), '\001') != NULL \
|
||||||
|| strchr (S_GET_NAME (s), '\002') != NULL \
|
|| strchr (S_GET_NAME (s), '\002') != NULL \
|
||||||
|| (S_LOCAL_NAME(s) && !flag_keep_locals)))
|
|| (S_LOCAL_NAME(s) && !flag_keep_locals))) \
|
||||||
|
|| (flag_strip_local_absolute \
|
||||||
|
&& ! S_IS_EXTERNAL(s) \
|
||||||
|
&& S_GET_SEGMENT == absolute_section))
|
||||||
/* True if a symbol is not defined in this file */
|
/* True if a symbol is not defined in this file */
|
||||||
#define S_IS_EXTERN(s) ((s)->sy_symbol.n_type & N_EXT)
|
#define S_IS_EXTERN(s) ((s)->sy_symbol.n_type & N_EXT)
|
||||||
/* True if the symbol has been generated because of a .stabd directive */
|
/* True if the symbol has been generated because of a .stabd directive */
|
||||||
|
|||||||
@@ -192,11 +192,14 @@ struct relocation_info
|
|||||||
#define S_IS_DEBUG(s) ((s)->sy_symbol.n_type & N_STAB)
|
#define S_IS_DEBUG(s) ((s)->sy_symbol.n_type & N_STAB)
|
||||||
/* True if a symbol is local symbol name */
|
/* True if a symbol is local symbol name */
|
||||||
#define S_IS_LOCAL(s) \
|
#define S_IS_LOCAL(s) \
|
||||||
(S_GET_NAME (s) \
|
((S_GET_NAME (s) \
|
||||||
&& !S_IS_DEBUG (s) \
|
&& !S_IS_DEBUG (s) \
|
||||||
&& (strchr (S_GET_NAME (s), '\001') != NULL \
|
&& (strchr (S_GET_NAME (s), '\001') != NULL \
|
||||||
|| strchr (S_GET_NAME (s), '\002') != NULL \
|
|| strchr (S_GET_NAME (s), '\002') != NULL \
|
||||||
|| (S_LOCAL_NAME(s) && !flag_keep_locals)))
|
|| (S_LOCAL_NAME(s) && !flag_keep_locals))) \
|
||||||
|
|| (flag_strip_local_absolute \
|
||||||
|
&& !S_IS_EXTERNAL(s) \
|
||||||
|
&& S_GET_SEGMENT(s) == absolute_section))
|
||||||
/* True if a symbol is not defined in this file */
|
/* True if a symbol is not defined in this file */
|
||||||
#define S_IS_EXTERN(s) ((s)->sy_symbol.n_type & N_EXT)
|
#define S_IS_EXTERN(s) ((s)->sy_symbol.n_type & N_EXT)
|
||||||
/* True if the symbol has been generated because of a .stabd directive */
|
/* True if the symbol has been generated because of a .stabd directive */
|
||||||
|
|||||||
@@ -111,7 +111,10 @@
|
|||||||
|
|
||||||
#ifdef TC_SH
|
#ifdef TC_SH
|
||||||
#include "coff/sh.h"
|
#include "coff/sh.h"
|
||||||
#define TARGET_FORMAT (shl ? "coff-shl" : "coff-sh")
|
#define TARGET_FORMAT \
|
||||||
|
(shl \
|
||||||
|
? (sh_small ? "coff-shl-small" : "coff-shl") \
|
||||||
|
: (sh_small ? "coff-sh-small" : "coff-sh"))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TC_M88K
|
#ifdef TC_M88K
|
||||||
@@ -451,7 +454,10 @@ typedef struct
|
|||||||
((s)->sy_symbol.ost_entry.n_scnum == C_REGISTER_SECTION \
|
((s)->sy_symbol.ost_entry.n_scnum == C_REGISTER_SECTION \
|
||||||
|| (S_LOCAL_NAME(s) && ! flag_keep_locals && ! S_IS_DEBUG (s)) \
|
|| (S_LOCAL_NAME(s) && ! flag_keep_locals && ! S_IS_DEBUG (s)) \
|
||||||
|| strchr (S_GET_NAME (s), '\001') != NULL \
|
|| strchr (S_GET_NAME (s), '\001') != NULL \
|
||||||
|| strchr (S_GET_NAME (s), '\002') != NULL)
|
|| strchr (S_GET_NAME (s), '\002') != NULL \
|
||||||
|
|| (flag_strip_local_absolute \
|
||||||
|
&& !S_IS_EXTERNAL(s) \
|
||||||
|
&& (s)->sy_symbol.ost_entry.n_scnum == C_ABS_SECTION))
|
||||||
/* True if a symbol is not defined in this file */
|
/* True if a symbol is not defined in this file */
|
||||||
#define S_IS_EXTERN(s) ((s)->sy_symbol.ost_entry.n_scnum == 0 \
|
#define S_IS_EXTERN(s) ((s)->sy_symbol.ost_entry.n_scnum == 0 \
|
||||||
&& S_GET_VALUE (s) == 0)
|
&& S_GET_VALUE (s) == 0)
|
||||||
|
|||||||
@@ -200,8 +200,8 @@ Here is a brief summary of how to invoke @code{@value{AS}}. For details,
|
|||||||
@smallexample
|
@smallexample
|
||||||
@value{AS} [ -a[cdhlns][=file] ] [ -D ] [ --defsym @var{sym}=@var{val} ]
|
@value{AS} [ -a[cdhlns][=file] ] [ -D ] [ --defsym @var{sym}=@var{val} ]
|
||||||
[ -f ] [ --gstabs ] [ --help ] [ -I @var{dir} ] [ -J ] [ -K ] [ -L ]
|
[ -f ] [ --gstabs ] [ --help ] [ -I @var{dir} ] [ -J ] [ -K ] [ -L ]
|
||||||
[ -o @var{objfile} ] [ -R ] [ --statistics ] [ -v ] [ -version ]
|
[ --keep-locals ] [ -o @var{objfile} ] [ -R ] [ --statistics ] [ -v ]
|
||||||
[ --version ] [ -W ] [ -w ] [ -x ] [ -Z ]
|
[ -version ] [ --version ] [ -W ] [ -w ] [ -x ] [ -Z ]
|
||||||
@ifset A29K
|
@ifset A29K
|
||||||
@c am29k has no machine-dependent assembler options
|
@c am29k has no machine-dependent assembler options
|
||||||
@end ifset
|
@end ifset
|
||||||
@@ -219,7 +219,11 @@ Here is a brief summary of how to invoke @code{@value{AS}}. For details,
|
|||||||
@ifset D10V
|
@ifset D10V
|
||||||
[ -O ]
|
[ -O ]
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@c start-sanitize-d30v
|
||||||
|
@ifset D30V
|
||||||
|
[ -O | -n | -N ]
|
||||||
|
@end ifset
|
||||||
|
@c end-sanitize-d30v
|
||||||
@ifset H8
|
@ifset H8
|
||||||
@c Hitachi family chips have no machine-dependent assembler options
|
@c Hitachi family chips have no machine-dependent assembler options
|
||||||
@end ifset
|
@end ifset
|
||||||
@@ -244,7 +248,7 @@ Here is a brief summary of how to invoke @code{@value{AS}}. For details,
|
|||||||
@ifset M32R
|
@ifset M32R
|
||||||
[ --m32rx ]
|
[ --m32rx ]
|
||||||
@end ifset
|
@end ifset
|
||||||
@c start-sanitize-m32rx
|
@c end-sanitize-m32rx
|
||||||
@ifset M680X0
|
@ifset M680X0
|
||||||
[ -l ] [ -m68000 | -m68010 | -m68020 | ... ]
|
[ -l ] [ -m68000 | -m68010 | -m68020 | ... ]
|
||||||
@end ifset
|
@end ifset
|
||||||
@@ -326,7 +330,10 @@ Issue warnings when difference tables altered for long displacements.
|
|||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
@item -L
|
@item -L
|
||||||
Keep (in the symbol table) local symbols, starting with @samp{L}.
|
@itemx --keep-locals
|
||||||
|
Keep (in the symbol table) local symbols. On traditional a.out systems
|
||||||
|
these start with @samp{L}, but different systems have different local
|
||||||
|
label prefixes.
|
||||||
|
|
||||||
@item -o @var{objfile}
|
@item -o @var{objfile}
|
||||||
Name the object-file output from @code{@value{AS}} @var{objfile}.
|
Name the object-file output from @code{@value{AS}} @var{objfile}.
|
||||||
@@ -338,6 +345,9 @@ Fold the data section into the text section.
|
|||||||
Print the maximum space (in bytes) and total time (in seconds) used by
|
Print the maximum space (in bytes) and total time (in seconds) used by
|
||||||
assembly.
|
assembly.
|
||||||
|
|
||||||
|
@item --strip-local-absolute
|
||||||
|
Remove local absolute symbols from the outgoing symbol table.
|
||||||
|
|
||||||
@item -v
|
@item -v
|
||||||
@itemx -version
|
@itemx -version
|
||||||
Print the @code{as} version.
|
Print the @code{as} version.
|
||||||
@@ -410,6 +420,27 @@ Optimize output by parallelizing instructions.
|
|||||||
@end table
|
@end table
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
|
@c start-sanitize-d30v
|
||||||
|
@ifset D30V
|
||||||
|
The following options are available when @value{AS} is configured for a D30V
|
||||||
|
processor.
|
||||||
|
@table @code
|
||||||
|
@cindex D30V optimization
|
||||||
|
@cindex optimization, D30V
|
||||||
|
@item -O
|
||||||
|
Optimize output by parallelizing instructions.
|
||||||
|
|
||||||
|
@cindex D30V nops
|
||||||
|
@item -n
|
||||||
|
Warn when nops are generated.
|
||||||
|
|
||||||
|
@cindex D30V nops after 32-bit multiply
|
||||||
|
@item -N
|
||||||
|
Warn when a nop after a 32-bit multiply instruction is generated.
|
||||||
|
@end table
|
||||||
|
@end ifset
|
||||||
|
@c end-sanitize-d30v
|
||||||
|
|
||||||
@ifset I960
|
@ifset I960
|
||||||
The following options are available when @value{AS} is configured for the
|
The following options are available when @value{AS} is configured for the
|
||||||
Intel 80960 processor.
|
Intel 80960 processor.
|
||||||
@@ -4670,6 +4701,11 @@ subject, see the hardware manufacturer's manual.
|
|||||||
@ifset D10V
|
@ifset D10V
|
||||||
* D10V-Dependent:: D10V Dependent Features
|
* D10V-Dependent:: D10V Dependent Features
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@c start-sanitize-d30v
|
||||||
|
@ifset D30V
|
||||||
|
* D30V-Dependent:: D30V Dependent Features
|
||||||
|
@end ifset
|
||||||
|
@c end-sanitize-d30v
|
||||||
@ifset H8/300
|
@ifset H8/300
|
||||||
* H8/300-Dependent:: Hitachi H8/300 Dependent Features
|
* H8/300-Dependent:: Hitachi H8/300 Dependent Features
|
||||||
@end ifset
|
@end ifset
|
||||||
@@ -4830,6 +4866,12 @@ family.
|
|||||||
@include c-d10v.texi
|
@include c-d10v.texi
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
|
@c start-sanitize-d30v
|
||||||
|
@ifset D30V
|
||||||
|
@include c-d30v.texi
|
||||||
|
@end ifset
|
||||||
|
@c end-sanitize-d30v
|
||||||
|
|
||||||
@ifset H8/300
|
@ifset H8/300
|
||||||
@include c-h8300.texi
|
@include c-h8300.texi
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|||||||
@@ -724,8 +724,8 @@ resolve_symbol_value (symp, finalize)
|
|||||||
{
|
{
|
||||||
symp->sy_value.X_op = O_symbol;
|
symp->sy_value.X_op = O_symbol;
|
||||||
S_SET_SEGMENT (symp, S_GET_SEGMENT (add_symbol));
|
S_SET_SEGMENT (symp, S_GET_SEGMENT (add_symbol));
|
||||||
|
symp->sy_value.X_add_number = final_val;
|
||||||
}
|
}
|
||||||
symp->sy_value.X_add_number = final_val;
|
|
||||||
final_val = 0;
|
final_val = 0;
|
||||||
resolved = add_symbol->sy_resolved;
|
resolved = add_symbol->sy_resolved;
|
||||||
goto exit_dont_set_value;
|
goto exit_dont_set_value;
|
||||||
@@ -887,12 +887,12 @@ resolve_symbol_value (symp, finalize)
|
|||||||
case O_bit_and: left &= right; break;
|
case O_bit_and: left &= right; break;
|
||||||
case O_add: left += right; break;
|
case O_add: left += right; break;
|
||||||
case O_subtract: left -= right; break;
|
case O_subtract: left -= right; break;
|
||||||
case O_eq: left = left == right ? ~ (offsetT) 0 : 0;
|
case O_eq: left = left == right ? ~ (offsetT) 0 : 0; break;
|
||||||
case O_ne: left = left != right ? ~ (offsetT) 0 : 0;
|
case O_ne: left = left != right ? ~ (offsetT) 0 : 0; break;
|
||||||
case O_lt: left = left < right ? ~ (offsetT) 0 : 0;
|
case O_lt: left = left < right ? ~ (offsetT) 0 : 0; break;
|
||||||
case O_le: left = left <= right ? ~ (offsetT) 0 : 0;
|
case O_le: left = left <= right ? ~ (offsetT) 0 : 0; break;
|
||||||
case O_ge: left = left >= right ? ~ (offsetT) 0 : 0;
|
case O_ge: left = left >= right ? ~ (offsetT) 0 : 0; break;
|
||||||
case O_gt: left = left > right ? ~ (offsetT) 0 : 0;
|
case O_gt: left = left > right ? ~ (offsetT) 0 : 0; break;
|
||||||
case O_logical_and: left = left && right; break;
|
case O_logical_and: left = left && right; break;
|
||||||
case O_logical_or: left = left || right; break;
|
case O_logical_or: left = left || right; break;
|
||||||
default: abort ();
|
default: abort ();
|
||||||
@@ -1364,7 +1364,7 @@ S_IS_EXTERNAL (s)
|
|||||||
flagword flags = s->bsym->flags;
|
flagword flags = s->bsym->flags;
|
||||||
|
|
||||||
/* sanity check */
|
/* sanity check */
|
||||||
if (flags & BSF_LOCAL && flags & BSF_GLOBAL)
|
if ((flags & BSF_LOCAL) && (flags & BSF_GLOBAL))
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
return (flags & BSF_GLOBAL) != 0;
|
return (flags & BSF_GLOBAL) != 0;
|
||||||
@@ -1408,12 +1408,17 @@ S_IS_LOCAL (s)
|
|||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
/* sanity check */
|
/* sanity check */
|
||||||
if (flags & BSF_LOCAL && flags & BSF_GLOBAL)
|
if ((flags & BSF_LOCAL) && (flags & BSF_GLOBAL))
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
if (bfd_get_section (s->bsym) == reg_section)
|
if (bfd_get_section (s->bsym) == reg_section)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
if (flag_strip_local_absolute
|
||||||
|
&& (flags & BSF_GLOBAL) == 0
|
||||||
|
&& bfd_get_section (s->bsym) == absolute_section)
|
||||||
|
return 1;
|
||||||
|
|
||||||
name = S_GET_NAME (s);
|
name = S_GET_NAME (s);
|
||||||
return (name != NULL
|
return (name != NULL
|
||||||
&& ! S_IS_DEBUG (s)
|
&& ! S_IS_DEBUG (s)
|
||||||
@@ -1459,7 +1464,17 @@ S_SET_SEGMENT (s, seg)
|
|||||||
symbolS *s;
|
symbolS *s;
|
||||||
segT seg;
|
segT seg;
|
||||||
{
|
{
|
||||||
s->bsym->section = seg;
|
/* Don't reassign section symbols. The direct reason is to prevent seg
|
||||||
|
faults assigning back to const global symbols such as *ABS*, but it
|
||||||
|
shouldn't happen anyway. */
|
||||||
|
|
||||||
|
if (s->bsym->flags & BSF_SECTION_SYM)
|
||||||
|
{
|
||||||
|
if (s->bsym->section != seg)
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
s->bsym->section = seg;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
Reference in New Issue
Block a user