This is the mail archive of the
binutils@sourceware.cygnus.com
mailing list for the binutils project.
[patch] More on HP weak symbols
- To: binutils at sourceware dot cygnus dot com
- Subject: [patch] More on HP weak symbols
- From: Catherine Moore <clm at cygnus dot com>
- Date: Fri, 02 Jun 2000 09:09:01 -0700
- cc: clm at cygnus dot com
A couple of months ago, I submitted some patches to support weak
symbols on hp platforms. A problem was discovered where a weak
symbol in an archive was not being used to satisfy a reference.
For ELF, the scope of symbol can be GLOBAL, WEAK or LOCAL. For
SOM, the scope is GLOBAL or LOCAL and weak is something else
altogether. The routine S_SET_EXTERNAL in symbol.c assumes
that global symbols can't be weak. This is wrong for this
platform.
Okay to commit?
Thu Jun 1 15:32:54 2000 Catherine Moore <clm@redhat.com>
* config/tc-hppa.c (pa_export): Weak symbols can be global.
Index: tc-hppa.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gas/config/tc-hppa.c,v
retrieving revision 1.163
diff -p -r1.163 tc-hppa.c
*** tc-hppa.c 1998/05/29 22:25:43 1.163
- - --- tc-hppa.c 2000/06/01 22:23:48
*************** pa_export (unused)
*** 4635,4642 ****
}
else
{
! /* OK. Set the external bits and process argument relocations. */
S_SET_EXTERNAL (symbol);
p = input_line_pointer;
*p = c;
if (!is_end_of_statement ())
- - --- 4635,4647 ----
}
else
{
! /* OK. Set the external bits and process argument relocations.
! For the HP, weak and global are not mutually exclusive.
! S_SET_EXTERNAL will not set BSF_GLOBAL if WEAK is set.
! CALL S_SET_EXTERNAL to get the other processing. Manually
! set BSF_GLOBAL when we get back. */
S_SET_EXTERNAL (symbol);
+ symbol->bsym->flags |= BSF_GLOBAL;
p = input_line_pointer;
*p = c;
if (!is_end_of_statement ())