From 13c56984403dc9e06ac4f03f76022fe154b1e72d Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Sat, 13 Dec 2003 08:59:24 +0000 Subject: [PATCH] * read.c (s_lcomm_internal): Make global. * read.h (s_lcomm_internal): Declare. * config/obj-elf.c (elf_pseudo_table): Handle lcomm. (obj_elf_lcomm): New function. --- gas/ChangeLog | 7 +++++++ gas/config/obj-elf.c | 33 ++++++++++++++++++++++----------- gas/read.c | 2 +- gas/read.h | 1 + 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index b4c156ae413..0fd6aa55db5 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2003-12-13 Alan Modra + + * read.c (s_lcomm_internal): Make global. + * read.h (s_lcomm_internal): Declare. + * config/obj-elf.c (elf_pseudo_table): Handle lcomm. + (obj_elf_lcomm): New function. + 2003-12-13 Alan Modra * read.c: Remove unneeded prototypes. diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c index dd33ec444d3..7468d63099c 100644 --- a/gas/config/obj-elf.c +++ b/gas/config/obj-elf.c @@ -85,12 +85,14 @@ static void obj_elf_symver PARAMS ((int)); static void obj_elf_subsection PARAMS ((int)); static void obj_elf_popsection PARAMS ((int)); static void obj_elf_tls_common PARAMS ((int)); +static void obj_elf_lcomm (int); static const pseudo_typeS elf_pseudo_table[] = { {"comm", obj_elf_common, 0}, {"common", obj_elf_common, 1}, {"ident", obj_elf_ident, 0}, + {"lcomm", obj_elf_lcomm, 0}, {"local", obj_elf_local, 0}, {"previous", obj_elf_previous, 0}, {"section", obj_elf_section, 0}, @@ -381,6 +383,15 @@ obj_elf_tls_common (ignore) symbol_get_bfdsym (symbolP)->flags |= BSF_THREAD_LOCAL; } +static void +obj_elf_lcomm (int ignore ATTRIBUTE_UNUSED) +{ + symbolS *symbolP = s_comm_internal (0, s_lcomm_internal); + + if (symbolP) + symbol_get_bfdsym (symbolP)->flags |= BSF_OBJECT; +} + static void obj_elf_local (ignore) int ignore ATTRIBUTE_UNUSED; @@ -640,7 +651,7 @@ obj_elf_change_section (name, type, attr, entsize, group_name, linkonce, push) /* Prevent SEC_HAS_CONTENTS from being inadvertently set. */ if (type == SHT_NOBITS) - seg_info (sec)->bss = 1; + seg_info (sec)->bss = 1; if (linkonce) flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD; @@ -654,7 +665,7 @@ obj_elf_change_section (name, type, attr, entsize, group_name, linkonce, push) if (secsym != NULL) symbol_set_bfdsym (secsym, sec->symbol); else - symbol_table_insert (section_symbol (sec)); + symbol_table_insert (section_symbol (sec)); } else if (attr != 0) { @@ -1738,9 +1749,9 @@ elf_frob_symbol (symp, puntp) /* This symbol was given a new name with the .symver directive. - If this is an external reference, just rename the symbol to - include the version string. This will make the relocs be - against the correct versioned symbol. + If this is an external reference, just rename the symbol to + include the version string. This will make the relocs be + against the correct versioned symbol. If this is a definition, add an alias. FIXME: Using an alias will permit the debugging information to refer to the right @@ -1750,8 +1761,8 @@ elf_frob_symbol (symp, puntp) if (! S_IS_DEFINED (symp)) { /* Verify that the name isn't using the @@ syntax--this is - reserved for definitions of the default version to link - against. */ + reserved for definitions of the default version to link + against. */ if (p[1] == ELF_VER_CHR) { as_bad (_("invalid attempt to declare external version name as default in symbol `%s'"), @@ -2080,9 +2091,9 @@ elf_frob_file_after_relocs () sec->_raw_size = bfd_ecoff_debug_size (stdoutput, &debug, debug_swap); /* Pass BUF to bfd_set_section_contents because this will - eventually become a call to fwrite, and ISO C prohibits - passing a NULL pointer to a stdio function even if the - pointer will not be used. */ + eventually become a call to fwrite, and ISO C prohibits + passing a NULL pointer to a stdio function even if the + pointer will not be used. */ if (! bfd_set_section_contents (stdoutput, sec, (PTR) buf, (file_ptr) 0, (bfd_size_type) 0)) as_fatal (_("can't start writing .mdebug section: %s"), @@ -2121,7 +2132,7 @@ elf_frob_file_after_relocs () int_32 version = (major ver # << 16) | version of tools ; int_32 source = (tool_id << 16 ) | 1 ; int_32 info = 0 ; These are set by the SCO tools, but we - don't know enough about the source + don't know enough about the source environment to set them. SCO ld currently ignores them, and recommends we set them to zero. */ diff --git a/gas/read.c b/gas/read.c index 55a68bea7f3..b156b1c3427 100644 --- a/gas/read.c +++ b/gas/read.c @@ -2022,7 +2022,7 @@ parse_align (int align_bytes) (alignment as a power of 2), or 2 if this was a ".bss" directive with alignment in bytes. */ -static symbolS * +symbolS * s_lcomm_internal (int needs_align, symbolS *symbolP, addressT size) { addressT align = 0; diff --git a/gas/read.h b/gas/read.h index 614d5700022..7ebcecb275c 100644 --- a/gas/read.h +++ b/gas/read.h @@ -142,6 +142,7 @@ extern void s_align_ptwo (int); extern void bss_alloc (symbolS *, addressT, int); extern offsetT parse_align (int); extern symbolS *s_comm_internal (int, symbolS *(*) (int, symbolS *, addressT)); +extern symbolS *s_lcomm_internal (int, symbolS *, addressT); extern void s_app_file_string (char *); extern void s_app_file (int); extern void s_app_line (int); -- 2.30.2