summaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
Diffstat (limited to 'gas')
-rw-r--r--gas/NEWS7
-rw-r--r--gas/as.c19
-rw-r--r--gas/as.h3
-rw-r--r--gas/config.in4
-rwxr-xr-xgas/configure27
-rw-r--r--gas/configure.ac19
-rw-r--r--gas/doc/as.texinfo9
-rw-r--r--gas/testsuite/gas/elf/common3.s1
-rw-r--r--gas/testsuite/gas/elf/common3a.d7
-rw-r--r--gas/testsuite/gas/elf/common3b.d7
-rw-r--r--gas/testsuite/gas/elf/common4.s1
-rw-r--r--gas/testsuite/gas/elf/common4a.d7
-rw-r--r--gas/testsuite/gas/elf/common4b.d7
-rw-r--r--gas/testsuite/gas/elf/elf.exp4
-rw-r--r--gas/testsuite/gas/i386/dw2-compress-3a.d (renamed from gas/testsuite/gas/i386/dw2-compressed-3.d)4
-rw-r--r--gas/testsuite/gas/i386/dw2-compress-3b.d (renamed from gas/testsuite/gas/i386/dw2-compress-3.d)5
-rw-r--r--gas/testsuite/gas/i386/dw2-compressed-3a.d104
-rw-r--r--gas/testsuite/gas/i386/dw2-compressed-3b.d104
-rw-r--r--gas/testsuite/gas/i386/i386.exp6
-rw-r--r--gas/write.c5
20 files changed, 342 insertions, 8 deletions
diff --git a/gas/NEWS b/gas/NEWS
index dd34a9f6dc3..a627028de15 100644
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -1,4 +1,11 @@
-*- text -*-
+* Add a configure option --enable-elf-stt-common to decide whether ELF
+ assembler should generate common symbols with the STT_COMMON type by
+ default. Default to no.
+
+* New command line option --elf-stt-common= for ELF targets to control
+ whether to generate common symbols with the STT_COMMON type.
+
* Add ability to set section flags and types via numeric values for ELF
based targets.
diff --git a/gas/as.c b/gas/as.c
index 55214f43904..14980b97c2c 100644
--- a/gas/as.c
+++ b/gas/as.c
@@ -96,6 +96,10 @@ int debug_memory = 0;
/* Enable verbose mode. */
int verbose = 0;
+#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
+int flag_use_elf_stt_common = DEFAULT_GENERATE_ELF_STT_COMMON;
+#endif
+
/* Keep the output file. */
static int keep_it = 0;
@@ -300,6 +304,9 @@ Options:\n\
--size-check=[error|warning]\n\
ELF .size directive check (default --size-check=error)\n"));
fprintf (stream, _("\
+ --elf-stt-common=[no|yes]\n\
+ generate ELF common symbols with STT_COMMON type\n"));
+ fprintf (stream, _("\
--sectname-subst enable section name substitution sequences\n"));
#endif
fprintf (stream, _("\
@@ -464,6 +471,7 @@ parse_args (int * pargc, char *** pargv)
OPTION_EXECSTACK,
OPTION_NOEXECSTACK,
OPTION_SIZE_CHECK,
+ OPTION_ELF_STT_COMMON,
OPTION_SECTNAME_SUBST,
OPTION_ALTERNATE,
OPTION_AL,
@@ -499,6 +507,7 @@ parse_args (int * pargc, char *** pargv)
,{"execstack", no_argument, NULL, OPTION_EXECSTACK}
,{"noexecstack", no_argument, NULL, OPTION_NOEXECSTACK}
,{"size-check", required_argument, NULL, OPTION_SIZE_CHECK}
+ ,{"elf-stt-common", required_argument, NULL, OPTION_ELF_STT_COMMON}
,{"sectname-subst", no_argument, NULL, OPTION_SECTNAME_SUBST}
#endif
,{"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL}
@@ -868,6 +877,16 @@ This program has absolutely no warranty.\n"));
as_fatal (_("Invalid --size-check= option: `%s'"), optarg);
break;
+ case OPTION_ELF_STT_COMMON:
+ if (strcasecmp (optarg, "no") == 0)
+ flag_use_elf_stt_common = 0;
+ else if (strcasecmp (optarg, "yes") == 0)
+ flag_use_elf_stt_common = 1;
+ else
+ as_fatal (_("Invalid --elf-stt-common= option: `%s'"),
+ optarg);
+ break;
+
case OPTION_SECTNAME_SUBST:
flag_sectname_subst = 1;
break;
diff --git a/gas/as.h b/gas/as.h
index bf1206faed1..4e5601b536d 100644
--- a/gas/as.h
+++ b/gas/as.h
@@ -592,6 +592,9 @@ COMMON enum
}
flag_size_check;
+/* If we should generate ELF common symbols with the STT_COMMON type. */
+extern int flag_use_elf_stt_common;
+
/* If section name substitution sequences should be honored */
COMMON int flag_sectname_subst;
#endif
diff --git a/gas/config.in b/gas/config.in
index 8b040fc5084..e06f16031c9 100644
--- a/gas/config.in
+++ b/gas/config.in
@@ -39,6 +39,10 @@
/* Define if you want compressed debug sections by default. */
#undef DEFAULT_FLAG_COMPRESS_DEBUG
+/* Define to 1 if you want to generate ELF common symbols with the STT_COMMON
+ type by default. */
+#undef DEFAULT_GENERATE_ELF_STT_COMMON
+
/* Define to 1 if you want to generate x86 relax relocations by default. */
#undef DEFAULT_GENERATE_X86_RELAX_RELOCATIONS
diff --git a/gas/configure b/gas/configure
index cd7182f2942..bc5a1ba415d 100755
--- a/gas/configure
+++ b/gas/configure
@@ -766,6 +766,7 @@ enable_targets
enable_checking
enable_compressed_debug_sections
enable_x86_relax_relocations
+enable_elf_stt_common
enable_werror
enable_build_warnings
enable_nls
@@ -1418,6 +1419,8 @@ Optional Features:
compress debug sections by default
--enable-x86-relax-relocations
generate x86 relax relocations by default
+ --enable-elf-stt-common generate ELF common symbols with STT_COMMON type by
+ default
--enable-werror treat compile warnings as errors
--enable-build-warnings enable build-time compiler warnings
--disable-nls do not use Native Language Support
@@ -10975,7 +10978,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10978 "configure"
+#line 10981 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11081,7 +11084,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11084 "configure"
+#line 11087 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11694,6 +11697,17 @@ if test "${enable_x86_relax_relocations+set}" = set; then :
esac
fi
+# Decide if ELF assembler should generate common symbols with the
+# STT_COMMON type.
+ac_default_elf_stt_common=unset
+# Provide a configure time option to override our default.
+# Check whether --enable-elf_stt_common was given.
+if test "${enable_elf_stt_common+set}" = set; then :
+ enableval=$enable_elf_stt_common; case "${enableval}" in
+ yes) ac_default_elf_stt_common=1 ;;
+esac
+fi
+
using_cgen=no
@@ -12539,6 +12553,15 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
+if test ${ac_default_elf_stt_common} = unset; then
+ ac_default_elf_stt_common=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_GENERATE_ELF_STT_COMMON $ac_default_elf_stt_common
+_ACEOF
+
+
if test x$ac_default_compressed_debug_sections = xyes ; then
$as_echo "#define DEFAULT_FLAG_COMPRESS_DEBUG 1" >>confdefs.h
diff --git a/gas/configure.ac b/gas/configure.ac
index 377526e72b4..8f718258ab1 100644
--- a/gas/configure.ac
+++ b/gas/configure.ac
@@ -88,6 +88,17 @@ AC_ARG_ENABLE(x86_relax_relocations,
no) ac_default_x86_relax_relocations=0 ;;
esac])dnl
+# Decide if ELF assembler should generate common symbols with the
+# STT_COMMON type.
+ac_default_elf_stt_common=unset
+# Provide a configure time option to override our default.
+AC_ARG_ENABLE(elf_stt_common,
+ AS_HELP_STRING([--enable-elf-stt-common],
+ [generate ELF common symbols with STT_COMMON type by default]),
+[case "${enableval}" in
+ yes) ac_default_elf_stt_common=1 ;;
+esac])dnl
+
using_cgen=no
AM_BINUTILS_WARNINGS
@@ -578,6 +589,14 @@ AC_DEFINE_UNQUOTED(DEFAULT_GENERATE_X86_RELAX_RELOCATIONS,
$ac_default_x86_relax_relocations,
[Define to 1 if you want to generate x86 relax relocations by default.])
+if test ${ac_default_elf_stt_common} = unset; then
+ ac_default_elf_stt_common=0
+fi
+AC_DEFINE_UNQUOTED(DEFAULT_GENERATE_ELF_STT_COMMON,
+ $ac_default_elf_stt_common,
+ [Define to 1 if you want to generate ELF common symbols with the
+ STT_COMMON type by default.])
+
if test x$ac_default_compressed_debug_sections = xyes ; then
AC_DEFINE(DEFAULT_FLAG_COMPRESS_DEBUG, 1, [Define if you want compressed debug sections by default.])
fi
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo
index 055e2f7223b..a0584d33eca 100644
--- a/gas/doc/as.texinfo
+++ b/gas/doc/as.texinfo
@@ -242,6 +242,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
[@b{-W}] [@b{--warn}] [@b{--fatal-warnings}] [@b{-w}] [@b{-x}]
[@b{-Z}] [@b{@@@var{FILE}}]
[@b{--sectname-subst}] [@b{--size-check=[error|warning]}]
+ [@b{--elf-stt-common=[no|yes]}]
[@b{--target-help}] [@var{target-options}]
[@b{--}|@var{files} @dots{}]
@c
@@ -712,10 +713,18 @@ will have its dwarf line number information placed into a section called
then debug line section will still be called just @var{.debug_line} without any
suffix.
+@ifset ELF
@item --size-check=error
@itemx --size-check=warning
Issue an error or warning for invalid ELF .size directive.
+@item --elf-stt-common=no
+@itemx --elf-stt-common=yes
+These options control whether the ELF assembler should generate common
+symbols with the @code{STT_COMMON} type. The default can be controlled
+by a configure option @option{--enable-elf-stt-common}.
+@end ifset
+
@item --help
Print a summary of the command line options and exit.
diff --git a/gas/testsuite/gas/elf/common3.s b/gas/testsuite/gas/elf/common3.s
new file mode 100644
index 00000000000..f684da48c4f
--- /dev/null
+++ b/gas/testsuite/gas/elf/common3.s
@@ -0,0 +1 @@
+ .comm foobar,30,4
diff --git a/gas/testsuite/gas/elf/common3a.d b/gas/testsuite/gas/elf/common3a.d
new file mode 100644
index 00000000000..fa9d5ceb395
--- /dev/null
+++ b/gas/testsuite/gas/elf/common3a.d
@@ -0,0 +1,7 @@
+#source: common3.s
+#as: --elf-stt-common=yes
+#readelf: -s -W
+
+#...
+ +[0-9]+: +0+4 +30 +COMMON +GLOBAL +DEFAULT +COM +foobar
+#pass
diff --git a/gas/testsuite/gas/elf/common3b.d b/gas/testsuite/gas/elf/common3b.d
new file mode 100644
index 00000000000..9481d134274
--- /dev/null
+++ b/gas/testsuite/gas/elf/common3b.d
@@ -0,0 +1,7 @@
+#source: common3.s
+#as: --elf-stt-common=no
+#readelf: -s -W
+
+#...
+ +[0-9]+: +0+4 +30 +OBJECT +GLOBAL +DEFAULT +COM +foobar
+#pass
diff --git a/gas/testsuite/gas/elf/common4.s b/gas/testsuite/gas/elf/common4.s
new file mode 100644
index 00000000000..bf2c26cbc68
--- /dev/null
+++ b/gas/testsuite/gas/elf/common4.s
@@ -0,0 +1 @@
+ .tls_common foobar,30,4
diff --git a/gas/testsuite/gas/elf/common4a.d b/gas/testsuite/gas/elf/common4a.d
new file mode 100644
index 00000000000..fceb01b687d
--- /dev/null
+++ b/gas/testsuite/gas/elf/common4a.d
@@ -0,0 +1,7 @@
+#source: common4.s
+#as: --elf-stt-common=yes
+#readelf: -s -W
+
+#...
+ +[0-9]+: +0+4 +30 +TLS +GLOBAL +DEFAULT +COM +foobar
+#pass
diff --git a/gas/testsuite/gas/elf/common4b.d b/gas/testsuite/gas/elf/common4b.d
new file mode 100644
index 00000000000..c18284ef5c5
--- /dev/null
+++ b/gas/testsuite/gas/elf/common4b.d
@@ -0,0 +1,7 @@
+#source: common4.s
+#as: --elf-stt-common=no
+#readelf: -s -W
+
+#...
+ +[0-9]+: +0+4 +30 +TLS +GLOBAL +DEFAULT +COM +foobar
+#pass
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
index a2a86dd2996..fb5619d5621 100644
--- a/gas/testsuite/gas/elf/elf.exp
+++ b/gas/testsuite/gas/elf/elf.exp
@@ -218,6 +218,10 @@ if { [is_elf_format] } then {
if { ![istarget "*-*-hpux*"] } then {
run_dump_test "common1"
run_dump_test "common2"
+ run_dump_test "common3a"
+ run_dump_test "common3b"
+ run_dump_test "common4a"
+ run_dump_test "common4b"
}
run_dump_test "strtab"
diff --git a/gas/testsuite/gas/i386/dw2-compressed-3.d b/gas/testsuite/gas/i386/dw2-compress-3a.d
index bd2818ba345..fe19884de34 100644
--- a/gas/testsuite/gas/i386/dw2-compressed-3.d
+++ b/gas/testsuite/gas/i386/dw2-compress-3a.d
@@ -1,7 +1,7 @@
#source: dw2-compress-3.s
-#as: --compress-debug-sections=zlib-gabi
+#as: --compress-debug-sections --elf-stt-common=no
#readelf: -w
-#name: DWARF2 debugging information 3 with SHF_COMPRESSED
+#name: DWARF2 debugging information 3 w/o STT_COMMON
Contents of the .debug_info section:
diff --git a/gas/testsuite/gas/i386/dw2-compress-3.d b/gas/testsuite/gas/i386/dw2-compress-3b.d
index d2aa8ef1fc6..aa0651e4d13 100644
--- a/gas/testsuite/gas/i386/dw2-compress-3.d
+++ b/gas/testsuite/gas/i386/dw2-compress-3b.d
@@ -1,6 +1,7 @@
-#as: --compress-debug-sections
+#source: dw2-compress-3.s
+#as: --compress-debug-sections --elf-stt-common=yes
#readelf: -w
-#name: DWARF2 debugging information 3
+#name: DWARF2 debugging information 3 with STT_COMMON
Contents of the .debug_info section:
diff --git a/gas/testsuite/gas/i386/dw2-compressed-3a.d b/gas/testsuite/gas/i386/dw2-compressed-3a.d
new file mode 100644
index 00000000000..a0d16c756c4
--- /dev/null
+++ b/gas/testsuite/gas/i386/dw2-compressed-3a.d
@@ -0,0 +1,104 @@
+#source: dw2-compress-3.s
+#as: --compress-debug-sections=zlib-gabi --elf-stt-common=no
+#readelf: -w
+#name: DWARF2 debugging information 3 with SHF_COMPRESSED w/o STT_COMMON
+
+Contents of the .debug_info section:
+
+ Compilation Unit @ offset 0x0:
+ Length: 0x32 \(32-bit\)
+ Version: 4
+ Abbrev Offset: 0x0
+ Pointer Size: 4
+ <0><b>: Abbrev Number: 1 \(DW_TAG_compile_unit\)
+ <c> DW_AT_producer : \(indirect string, offset: 0x2\): GNU C 4.8.3
+ <10> DW_AT_language : 1 \(ANSI C\)
+ <11> DW_AT_name : \(indirect string, offset: 0xe\): dw2-compress-3.c
+ <15> DW_AT_comp_dir : \(indirect string, offset: 0x0\): .
+ <19> DW_AT_stmt_list : 0x0
+ <1><1d>: Abbrev Number: 2 \(DW_TAG_variable\)
+ <1e> DW_AT_name : foo
+ <22> DW_AT_decl_file : 1
+ <23> DW_AT_decl_line : 1
+ <24> DW_AT_type : <0x2e>
+ <28> DW_AT_external : 1
+ <28> DW_AT_location : 5 byte block: 3 4 0 0 0 \(DW_OP_addr: 4\)
+ <1><2e>: Abbrev Number: 3 \(DW_TAG_base_type\)
+ <2f> DW_AT_byte_size : 4
+ <30> DW_AT_encoding : 5 \(signed\)
+ <31> DW_AT_name : int
+ <1><35>: Abbrev Number: 0
+
+Contents of the .debug_abbrev section:
+
+ Number TAG \(0x0\)
+ 1 DW_TAG_compile_unit \[has children\]
+ DW_AT_producer DW_FORM_strp
+ DW_AT_language DW_FORM_data1
+ DW_AT_name DW_FORM_strp
+ DW_AT_comp_dir DW_FORM_strp
+ DW_AT_stmt_list DW_FORM_sec_offset
+ DW_AT value: 0 DW_FORM value: 0
+ 2 DW_TAG_variable \[no children\]
+ DW_AT_name DW_FORM_string
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_type DW_FORM_ref4
+ DW_AT_external DW_FORM_flag_present
+ DW_AT_location DW_FORM_exprloc
+ DW_AT value: 0 DW_FORM value: 0
+ 3 DW_TAG_base_type \[no children\]
+ DW_AT_byte_size DW_FORM_data1
+ DW_AT_encoding DW_FORM_data1
+ DW_AT_name DW_FORM_string
+ DW_AT value: 0 DW_FORM value: 0
+
+Contents of the .debug_aranges section:
+
+ Length: 20
+ Version: 2
+ Offset into .debug_info: 0x0
+ Pointer Size: 4
+ Segment Size: 0
+
+ Address Length
+ 00000000 00000000
+
+Raw dump of debug contents of section .debug_line:
+
+ Offset: 0x0
+ Length: 45
+ DWARF Version: 2
+ Prologue Length: 39
+ Minimum Instruction Length: 1
+ Initial value of 'is_stmt': 1
+ Line Base: -5
+ Line Range: 14
+ Opcode Base: 13
+
+ Opcodes:
+ Opcode 1 has 0 args
+ Opcode 2 has 1 args
+ Opcode 3 has 1 args
+ Opcode 4 has 1 args
+ Opcode 5 has 1 args
+ Opcode 6 has 0 args
+ Opcode 7 has 0 args
+ Opcode 8 has 0 args
+ Opcode 9 has 1 args
+ Opcode 10 has 0 args
+ Opcode 11 has 0 args
+ Opcode 12 has 1 args
+
+ The Directory Table is empty.
+
+ The File Name Table \(offset 0x1c\):
+ Entry Dir Time Size Name
+ 1 0 0 0 dw2-compress-3.c
+
+ No Line Number Statements.
+Contents of the .debug_str section:
+
+ 0x00000000 2e00474e 55204320 342e382e 33006477 ..GNU C 4.8.3.dw
+ 0x00000010 322d636f 6d707265 73732d33 2e6300 2-compress-3.c.
+
diff --git a/gas/testsuite/gas/i386/dw2-compressed-3b.d b/gas/testsuite/gas/i386/dw2-compressed-3b.d
new file mode 100644
index 00000000000..6469ca9a4e7
--- /dev/null
+++ b/gas/testsuite/gas/i386/dw2-compressed-3b.d
@@ -0,0 +1,104 @@
+#source: dw2-compress-3.s
+#as: --compress-debug-sections=zlib-gabi --elf-stt-common=yes
+#readelf: -w
+#name: DWARF2 debugging information 3 with SHF_COMPRESSED with STT_COMMON
+
+Contents of the .debug_info section:
+
+ Compilation Unit @ offset 0x0:
+ Length: 0x32 \(32-bit\)
+ Version: 4
+ Abbrev Offset: 0x0
+ Pointer Size: 4
+ <0><b>: Abbrev Number: 1 \(DW_TAG_compile_unit\)
+ <c> DW_AT_producer : \(indirect string, offset: 0x2\): GNU C 4.8.3
+ <10> DW_AT_language : 1 \(ANSI C\)
+ <11> DW_AT_name : \(indirect string, offset: 0xe\): dw2-compress-3.c
+ <15> DW_AT_comp_dir : \(indirect string, offset: 0x0\): .
+ <19> DW_AT_stmt_list : 0x0
+ <1><1d>: Abbrev Number: 2 \(DW_TAG_variable\)
+ <1e> DW_AT_name : foo
+ <22> DW_AT_decl_file : 1
+ <23> DW_AT_decl_line : 1
+ <24> DW_AT_type : <0x2e>
+ <28> DW_AT_external : 1
+ <28> DW_AT_location : 5 byte block: 3 4 0 0 0 \(DW_OP_addr: 4\)
+ <1><2e>: Abbrev Number: 3 \(DW_TAG_base_type\)
+ <2f> DW_AT_byte_size : 4
+ <30> DW_AT_encoding : 5 \(signed\)
+ <31> DW_AT_name : int
+ <1><35>: Abbrev Number: 0
+
+Contents of the .debug_abbrev section:
+
+ Number TAG \(0x0\)
+ 1 DW_TAG_compile_unit \[has children\]
+ DW_AT_producer DW_FORM_strp
+ DW_AT_language DW_FORM_data1
+ DW_AT_name DW_FORM_strp
+ DW_AT_comp_dir DW_FORM_strp
+ DW_AT_stmt_list DW_FORM_sec_offset
+ DW_AT value: 0 DW_FORM value: 0
+ 2 DW_TAG_variable \[no children\]
+ DW_AT_name DW_FORM_string
+ DW_AT_decl_file DW_FORM_data1
+ DW_AT_decl_line DW_FORM_data1
+ DW_AT_type DW_FORM_ref4
+ DW_AT_external DW_FORM_flag_present
+ DW_AT_location DW_FORM_exprloc
+ DW_AT value: 0 DW_FORM value: 0
+ 3 DW_TAG_base_type \[no children\]
+ DW_AT_byte_size DW_FORM_data1
+ DW_AT_encoding DW_FORM_data1
+ DW_AT_name DW_FORM_string
+ DW_AT value: 0 DW_FORM value: 0
+
+Contents of the .debug_aranges section:
+
+ Length: 20
+ Version: 2
+ Offset into .debug_info: 0x0
+ Pointer Size: 4
+ Segment Size: 0
+
+ Address Length
+ 00000000 00000000
+
+Raw dump of debug contents of section .debug_line:
+
+ Offset: 0x0
+ Length: 45
+ DWARF Version: 2
+ Prologue Length: 39
+ Minimum Instruction Length: 1
+ Initial value of 'is_stmt': 1
+ Line Base: -5
+ Line Range: 14
+ Opcode Base: 13
+
+ Opcodes:
+ Opcode 1 has 0 args
+ Opcode 2 has 1 args
+ Opcode 3 has 1 args
+ Opcode 4 has 1 args
+ Opcode 5 has 1 args
+ Opcode 6 has 0 args
+ Opcode 7 has 0 args
+ Opcode 8 has 0 args
+ Opcode 9 has 1 args
+ Opcode 10 has 0 args
+ Opcode 11 has 0 args
+ Opcode 12 has 1 args
+
+ The Directory Table is empty.
+
+ The File Name Table \(offset 0x1c\):
+ Entry Dir Time Size Name
+ 1 0 0 0 dw2-compress-3.c
+
+ No Line Number Statements.
+Contents of the .debug_str section:
+
+ 0x00000000 2e00474e 55204320 342e382e 33006477 ..GNU C 4.8.3.dw
+ 0x00000010 322d636f 6d707265 73732d33 2e6300 2-compress-3.c.
+
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index 22aca23b15d..f1e7611efb2 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -448,9 +448,11 @@ if [expr [istarget "i*86-*-*"] || [istarget "x86_64-*-*"]] then {
run_list_test_stdin "list-2" "-al"
run_list_test_stdin "list-3" "-al"
run_dump_test "dw2-compress-1"
- run_dump_test "dw2-compress-3"
+ run_dump_test "dw2-compress-3a"
+ run_dump_test "dw2-compress-3b"
run_dump_test "dw2-compressed-1"
- run_dump_test "dw2-compressed-3"
+ run_dump_test "dw2-compressed-3a"
+ run_dump_test "dw2-compressed-3b"
}
}
diff --git a/gas/write.c b/gas/write.c
index f623b00e278..24cd6ca4037 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -2209,6 +2209,11 @@ write_object_file (void)
obj_frob_file_after_relocs ();
#endif
+#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
+ if (IS_ELF && flag_use_elf_stt_common)
+ stdoutput->flags |= BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON;
+#endif
+
/* Once all relocations have been written, we can compress the
contents of the debug sections. This needs to be done before
we start writing any sections, because it will affect the file