Port-vax archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Anyone running -current?



So here are, finaly, the details of the story:

Newer gcc has this in config/elfos.h:

/* A C statement (sans semicolon) to output to the stdio stream STREAM
   any text necessary for declaring the name of an external symbol
   named NAME which is referenced in this compilation but not defined.
   It is needed to properly support non-default visibility.  */

#ifndef ASM_OUTPUT_EXTERNAL
#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
  default_elf_asm_output_external (FILE, DECL, NAME)
#endif


This boils down to putting a statement like

        .protected      _lc_global_locale

into every assembler file that uses _lc_global_locale but does not define
it. At the ELF level, this means the symbol looks like:

  Num: Value     Size Type    Bind   Vis        Ndx Name
   50: 00000000     0 NOTYPE  GLOBAL PROTECTED  UND _lc_global_locale

instead of:

   50: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND _lc_global_locale


And ld would do the right thing if we had it properly marked protected.

Basically this means that gcc 4.1 is not able to use symbols with non default
visibility - which is a pain, as we use it besides the case at hand also
for ld.elf_so (at least).


Anyway, I don't feel like backporting that change to gcc 4.1. For unbreaking
-current it will be enough to #ifndef __VAX__ the __dso_protected declaration
and document it in doc/HACKS.

If anyone else would like to fight this at the gcc level, please speak up!

Martin



Home | Main Index | Thread Index | Old Index