diff options
author | Alan Modra <amodra@gmail.com> | 2005-02-21 08:39:53 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2005-02-21 08:39:53 +0000 |
commit | cc1bc22af7e433b5cfca0907e069ffbeb8a29660 (patch) | |
tree | 9a33febbcc7d92442b4bb902a93c96be671faf1f /gas | |
parent | 2562953678f04d6574d5dffdbc41242e5b487ff5 (diff) | |
download | gdb-cc1bc22af7e433b5cfca0907e069ffbeb8a29660.zip gdb-cc1bc22af7e433b5cfca0907e069ffbeb8a29660.tar.gz gdb-cc1bc22af7e433b5cfca0907e069ffbeb8a29660.tar.bz2 |
gas/
* read.c (address_bytes): New function.
(TC_ADDRESS_BYTES): Default for BSD_ASSEMBLER to address_bytes.
(potable): Add "dc.a".
(cons_worker): Handle "dc.a".
* doc/internals.texi (TC_ADDRESS_BYTES): Document.
ld/testsuite/
* ld-elf/exclude1.s: Use ".dc.a".
* ld-elfvsb/hidden2.s: Likewise.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 8 | ||||
-rw-r--r-- | gas/doc/internals.texi | 5 | ||||
-rw-r--r-- | gas/read.c | 26 |
3 files changed, 39 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index f92c3d6..7abba5e 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,13 @@ 2005-02-21 Alan Modra <amodra@bigpond.net.au> + * read.c (address_bytes): New function. + (TC_ADDRESS_BYTES): Default for BSD_ASSEMBLER to address_bytes. + (potable): Add "dc.a". + (cons_worker): Handle "dc.a". + * doc/internals.texi (TC_ADDRESS_BYTES): Document. + +2005-02-21 Alan Modra <amodra@bigpond.net.au> + * input-file.c (input_file_open): Rearrange to avoid warning. 2005-02-19 Alan Modra <amodra@bigpond.net.au> diff --git a/gas/doc/internals.texi b/gas/doc/internals.texi index e0fb749..8cfd33e 100644 --- a/gas/doc/internals.texi +++ b/gas/doc/internals.texi @@ -1114,6 +1114,11 @@ pseudo-op. @cindex TC_CONS_FIX_NEW You may define this macro to generate a fixup for a data allocation pseudo-op. +@item TC_ADDRESS_BYTES +@cindex TC_ADDRESS_BYTES +Define this macro to specify the number of bytes used to store an address. +Used to implement @code{dc.a}. The target must have a reloc for this size. + @item TC_INIT_FIX_DATA (@var{fixp}) @cindex TC_INIT_FIX_DATA A C statement to initialize the target specific fields of fixup @var{fixp}. @@ -243,6 +243,24 @@ read_begin (void) lex_type['?'] = 3; } +#ifndef TC_ADDRESS_BYTES +#ifdef BFD_ASSEMBLER +#define TC_ADDRESS_BYTES address_bytes + +static inline int +address_bytes (void) +{ + /* Choose smallest of 1, 2, 4, 8 bytes that is large enough to + contain an address. */ + int n = (stdoutput->arch_info->bits_per_address - 1) / 8; + n |= n >> 1; + n |= n >> 2; + n += 1; + return n; +} +#endif +#endif + /* Set up pseudo-op tables. */ static struct hash_control *po_hash; @@ -263,6 +281,9 @@ static const pseudo_typeS potable[] = { {"common.s", s_mri_common, 1}, {"data", s_data, 0}, {"dc", cons, 2}, +#ifdef TC_ADDRESS_BYTES + {"dc.a", cons, 0}, +#endif {"dc.b", cons, 1}, {"dc.d", float_cons, 'd'}, {"dc.l", cons, 4}, @@ -3335,6 +3356,11 @@ cons_worker (register int nbytes, /* 1=.byte, 2=.word, 4=.long. */ return; } +#ifdef TC_ADDRESS_BYTES + if (nbytes == 0) + nbytes = TC_ADDRESS_BYTES (); +#endif + #ifdef md_cons_align md_cons_align (nbytes); #endif |