binutils-gdb/gas/config/tc-tic4x.h
Alan Modra ed2917de68 gas: rename md_end to md_finish
Currently md_end is typically used for some final actions rather than
freeing memory like other *_end functions.  Rename it to md_finish,
and rename target implementation.  The renaming of target functions
makes it possible to find them all with "grep md_finish",
eg. md_mips_end is renamed to mips_md_finish, not md_mips_finish.
This patch leaves a number of md_end functions unchanged, those that
either do nothing or deallocate memory, and calls them late.

The idea here is that target maintainers implement md_end functions to
tidy memory, if anyone cares.  Freeing persistent memory in gas is
not at all important, except that it can hide more important memory
leaks, those that happen once per some frequent gas operation, amongst
these unimportant memory leaks.

	* as.c (main): Rename md_end to md_finish.
	* config/tc-alpha.c, * config/tc-alpha.h,
	* config/tc-arc.c, * config/tc-arc.h,
	* config/tc-arm.c, * config/tc-arm.h,
	* config/tc-csky.c, * config/tc-csky.h,
	* config/tc-ia64.c, * config/tc-ia64.h,
	* config/tc-mcore.c, * config/tc-mcore.h,
	* config/tc-mips.c, * config/tc-mips.h,
	* config/tc-mmix.c, * config/tc-mmix.h,
	* config/tc-msp430.c, * config/tc-msp430.h,
	* config/tc-nds32.c, * config/tc-nds32.h,
	* config/tc-ppc.c, * config/tc-ppc.h,
	* config/tc-pru.c, * config/tc-pru.h,
	* config/tc-riscv.c, * config/tc-riscv.h,
	* config/tc-s390.c, * config/tc-s390.h,
	* config/tc-sparc.c, * config/tc-sparc.h,
	* config/tc-tic4x.c, * config/tc-tic4x.h,
	* config/tc-tic6x.c, * config/tc-tic6x.h,
	* config/tc-v850.c, * config/tc-v850.h,
	* config/tc-xtensa.c, * config/tc-xtensa.h,
	* config/tc-z80.c, * config/tc-z80.h: Similarly.
	* output-file.c (output_file_close): Call md_end.
2022-07-09 21:23:00 +09:30

94 lines
3.3 KiB
C

/* tc-tic4x.h -- Assemble for the Texas TMS320C[34]X.
Copyright (C) 1997-2022 Free Software Foundation, Inc.
Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz)
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 3, 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, 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA. */
#define TC_TIC4X
#define TIC4X
#define TARGET_ARCH bfd_arch_tic4x
#define WORKING_DOT_WORD
/* There are a number of different formats used for local labels. gas
expects local labels either of the form `10$:' or `n:', where n is
a single digit. When LOCAL_LABEL_DOLLARS is defined labels of the
form `10$:' are expected. When LOCAL_LABEL_FB is defined labels of
the form `n:' are expected. The latter are expected to be referred
to using `nf' for a forward reference of `nb' for a backward
reference.
The local labels expected by the TI tools are of the form `$n:',
where the colon is optional. Now the $ character is considered to
be valid symbol name character, so gas doesn't recognise our local
symbols by default. Defining LEX_DOLLAR to be 1 means that gas
won't allow labels starting with $ and thus the hook
tc_unrecognized_line() will be called from read.c. We can thus
parse lines starting with $n as having local labels.
The other problem is the forward reference of local labels. If a
symbol is undefined, symbol_make() calls the md_undefined_symbol()
hook where we create a local label if recognised. */
/* Don't stick labels starting with 'L' into symbol table of COFF file. */
#define LOCAL_LABEL(name) ((name)[0] == '$' || (name)[0] == 'L')
#define TARGET_BYTES_BIG_ENDIAN 0
#define OCTETS_PER_BYTE_POWER 2
#define TARGET_ARCH bfd_arch_tic4x
#define TIC_NOP_OPCODE 0x0c800000
#define reloc_type int
#define NO_RELOC 0
/* '||' denotes parallel instruction */
#define DOUBLEBAR_PARALLEL 1
/* Labels are not required to have a colon for a suffix. */
#define LABELS_WITHOUT_COLONS 1
/* Use $ as the section program counter (SPC). */
#define DOLLAR_DOT
/* Accept numbers with a suffix, e.g. 0ffffh, 1010b. */
#define NUMBERS_WITH_SUFFIX 1
extern int tic4x_unrecognized_line (int);
#define tc_unrecognized_line(c) tic4x_unrecognized_line (c)
#define md_number_to_chars number_to_chars_littleendian
extern int tic4x_do_align (int, const char *, int, int);
#define md_do_align(n,fill,len,max,label) if( tic4x_do_align (n,fill,len,max) ) goto label;
/* Start of line hook to remove parallel instruction operator || */
extern void tic4x_start_line (void);
#define md_start_line_hook() tic4x_start_line()
extern void tic4x_cleanup (void);
#define md_cleanup() tic4x_cleanup()
extern void tic4x_md_finish (void);
#define md_finish() tic4x_md_finish()