gas/
authorAlan Modra <amodra@gmail.com>
Mon, 21 Feb 2005 08:39:53 +0000 (08:39 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 21 Feb 2005 08:39:53 +0000 (08:39 +0000)
* 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.

gas/ChangeLog
gas/doc/internals.texi
gas/read.c
ld/testsuite/ChangeLog
ld/testsuite/ld-elf/exclude1.s
ld/testsuite/ld-elfvsb/hidden2.s

index f92c3d67596e1b020336c0d708fbb0ada0a058d5..7abba5e04671bb4f58e456b7710f6e0fb4c2c30b 100644 (file)
@@ -1,3 +1,11 @@
+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.
index e0fb74905caf6fb1cd637b3c7e05f0fbfcc59890..8cfd33ef99fc6d4d676d1d4b01197a67558ccc69 100644 (file)
@@ -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}.
index 807f41030a061aa8db3aedd59388c2cdbee39269..c86b7d7c1ee423f4ee4d0904bff9614c8d07e307 100644 (file)
@@ -243,6 +243,24 @@ read_begin (void)
     lex_type['?'] = 3;
 }
 \f
+#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
index 51486851218ea1b537231d687e1feccf9386223e..85ef563de9ff0a278ba5b65573a242f1a2664b22 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-21  Alan Modra  <amodra@bigpond.net.au>
+
+       * ld-elf/exclude1.s: Use ".dc.a".
+       * ld-elfvsb/hidden2.s: Likewise.
+
 2005-02-21  Alan Modra  <amodra@bigpond.net.au>
 
        * ld-elf/warn1.d: Specify -Ttext.
index 515d078315e2c9b263616192d7c14e733e02b34c..99efc7e9ad2158ed741d5ec64a303415f1d1603a 100644 (file)
@@ -1,4 +1,4 @@
        .globl include_sym
        .data
 include_sym:
-       .long   exclude_sym
+       .dc.a   exclude_sym
index b4a2e92bee7f6398e2dfbca1612dab18205dce7b..beb123b5e2d87df52ab48c05c2e1bc647acc45da 100644 (file)
@@ -1,4 +1,4 @@
        .data
        .hidden foo
        .global foo
-       .long foo
+       .dc.a foo