mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-21 04:42:53 +08:00
ed2917de68
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.
94 lines
3.3 KiB
C
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()
|
|
|