gas/
authorJan Beulich <jbeulich@novell.com>
Fri, 15 Apr 2005 11:38:59 +0000 (11:38 +0000)
committerJan Beulich <jbeulich@novell.com>
Fri, 15 Apr 2005 11:38:59 +0000 (11:38 +0000)
2005-04-15  Jan Beulich  <jbeulich@novell.com>

* config/obj-elf.c (obj_elf_struct): New.
(elf_pseudo_table). Use it for .offset and .struct.

gas/testsuite/
2005-04-15  Jan Beulich  <jbeulich@novell.com>

* gas/elf/struct.[sd]: New.
* gas/elf/elf.exp: Run new test.

gas/ChangeLog
gas/config/obj-elf.c
gas/testsuite/ChangeLog
gas/testsuite/gas/elf/elf.exp
gas/testsuite/gas/elf/struct.d [new file with mode: 0644]
gas/testsuite/gas/elf/struct.s [new file with mode: 0644]

index 5616f33e97bc6e298461d203ffcc515b1044b6db..09ddfac14e9d740efeb39c0e68b71c24482bb22c 100644 (file)
@@ -1,3 +1,8 @@
+2005-04-15  Jan Beulich  <jbeulich@novell.com>
+
+       * config/obj-elf.c (obj_elf_struct): New.
+       (elf_pseudo_table). Use it for .offset and .struct.
+
 2005-04-14  Bob Wilson  <bob.wilson@acm.org>
            Sterling Augustine  <sterling@tensilica.com>
 
index 37bb27ff6b64017b01b3bc41148b3135626dc969..d8a93a525995b4aeda94a2c1a95c797dd6d98bd3 100644 (file)
@@ -65,6 +65,7 @@ static void obj_elf_subsection (int);
 static void obj_elf_popsection (int);
 static void obj_elf_tls_common (int);
 static void obj_elf_lcomm (int);
+static void obj_elf_struct (int);
 
 static const pseudo_typeS elf_pseudo_table[] =
 {
@@ -113,6 +114,8 @@ static const pseudo_typeS elf_pseudo_table[] =
 
   /* We need to trap the section changing calls to handle .previous.  */
   {"data", obj_elf_data, 0},
+  {"offset", obj_elf_struct, 0},
+  {"struct", obj_elf_struct, 0},
   {"text", obj_elf_text, 0},
 
   {"tls_common", obj_elf_tls_common, 0},
@@ -1036,6 +1039,24 @@ obj_elf_text (int i)
 #endif
 }
 
+/* Change to the *ABS* section.  */
+
+void
+obj_elf_struct (int i)
+{
+#ifdef md_flush_pending_output
+  md_flush_pending_output ();
+#endif
+
+  previous_section = now_seg;
+  previous_subsection = now_subseg;
+  s_struct (i);
+
+#ifdef md_elf_section_change_hook
+  md_elf_section_change_hook ();
+#endif
+}
+
 static void
 obj_elf_subsection (int ignore ATTRIBUTE_UNUSED)
 {
index 559f2d9fef47368b2ffa062ef8e39015292184a6..a41d8135522f43072c6c605b41f2159bc09b39bd 100644 (file)
@@ -1,3 +1,8 @@
+2005-04-15  Jan Beulich  <jbeulich@novell.com>
+
+       * gas/elf/struct.[sd]: New.
+       * gas/elf/elf.exp: Run new test.
+
 2005-04-15  Alan Modra  <amodra@bigpond.net.au>
 
        * gas/all/assign.s: New.
index 01e1ccd267554b105feba69d6ffe659d66320ac6..89dffe8ba5122ebf084805927dc8c0f157db0318 100644 (file)
@@ -61,6 +61,7 @@ if { ([istarget "*-*-*elf*"]
     run_dump_test "section3" 
     run_dump_test "section4"
     run_list_test "section5" "" "-al" "-SW" "| grep \" \\\\.test\\\[0-9\\\]\""
+    run_dump_test "struct" 
     run_dump_test "symver" 
     run_list_test "type" "" "" "-s" "| grep \"1 \\\[FONT\\\]\""
 }
diff --git a/gas/testsuite/gas/elf/struct.d b/gas/testsuite/gas/elf/struct.d
new file mode 100644 (file)
index 0000000..a681068
--- /dev/null
@@ -0,0 +1,10 @@
+#nm: --extern-only
+#name: struct
+
+# Test the .struct pseudo-op.
+
+0+0 D l1
+0+4 D l2
+0+1 A w1
+0+3 A w2
+0+5 A w3
diff --git a/gas/testsuite/gas/elf/struct.s b/gas/testsuite/gas/elf/struct.s
new file mode 100644 (file)
index 0000000..f84f93e
--- /dev/null
@@ -0,0 +1,9 @@
+       .globl  w1, w2, w3, l1, l2
+       .data
+l1:    .long   0
+       .struct 1
+w1:    .short  0
+w2:    .short  0
+w3:    .short  0
+       .previous
+l2:    .long   0