This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] ELF: make .struct interact with .previous


struct did not interact correctly with ELF's .previous.

Built and tested on i686-pc-linux-gnu.

Jan

gas/
2005-04-13  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-13  Jan Beulich  <jbeulich@novell.com>

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

--- /home/jbeulich/src/binutils/mainline/2005-04-11/gas/config/obj-elf.c	2005-02-28 08:27:13.000000000 +0100
+++ 2005-04-11/gas/config/obj-elf.c	2005-04-13 15:25:24.000000000 +0200
@@ -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_tab
 
   /* 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)
 {
--- /home/jbeulich/src/binutils/mainline/2005-04-11/gas/testsuite/gas/elf/elf.exp	2005-01-18 10:43:34.000000000 +0100
+++ 2005-04-11/gas/testsuite/gas/elf/elf.exp	2005-04-13 15:26:20.000000000 +0200
@@ -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\\\]\"" 
 }
--- /home/jbeulich/src/binutils/mainline/2005-04-11/gas/testsuite/gas/elf/struct.d	1970-01-01 01:00:00.000000000 +0100
+++ 2005-04-11/gas/testsuite/gas/elf/struct.d	2005-04-12 11:48:51.000000000 +0200
@@ -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
--- /home/jbeulich/src/binutils/mainline/2005-04-11/gas/testsuite/gas/elf/struct.s	1970-01-01 01:00:00.000000000 +0100
+++ 2005-04-11/gas/testsuite/gas/elf/struct.s	2005-04-12 11:45:06.000000000 +0200
@@ -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


Attachment: binutils-mainline-elf-struct.patch
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]