osf.h (ASM_OUTPUT_WEAK_ALIAS, [...]): Define.

* config/alpha/osf.h (ASM_OUTPUT_WEAK_ALIAS, ASM_WEAKEN_LABEL,
	HANDLE_SYSV_PRAGMA): Define.
	* mips-tfile.c (add_ext_symbol): Pass complete symbol ptr, inline
	previous args.
	(copy_object): Caller changed.

	testsuite:
	* g++.old-deja/g++.pt/static3.C: Removed alpha*-*-osf* XFAIL.
	g++.old-deja/g++.pt/static6.C: Likewise.
	* lib/target-supports.exp (check_weak_available): alpha*-*-osf*
	supports weak symbols.

From-SVN: r44153
This commit is contained in:
Rainer Orth 2001-07-19 18:08:17 +00:00 committed by Rainer Orth
parent deaabf1413
commit 432fa9f208
7 changed files with 63 additions and 31 deletions

View File

@ -1,3 +1,11 @@
2001-07-19 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* config/alpha/osf.h (ASM_OUTPUT_WEAK_ALIAS, ASM_WEAKEN_LABEL,
HANDLE_SYSV_PRAGMA): Define.
* mips-tfile.c (add_ext_symbol): Pass complete symbol ptr, inline
previous args.
(copy_object): Caller changed.
2001-07-19 Andreas Schwab <schwab@suse.de>
* configure.in (assembler dwarf2 debug_line support): Define nop

View File

@ -186,3 +186,26 @@ __enable_execute_stack (addr) \
(TARGET_GAS \
? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4) \
: DW_EH_PE_aligned)
/* This is how we tell the assembler that a symbol is weak. */
#define ASM_OUTPUT_WEAK_ALIAS(FILE, NAME, VALUE) \
do \
{ \
ASM_GLOBALIZE_LABEL (FILE, NAME); \
fputs ("\t.weakext\t", FILE); \
assemble_name (FILE, NAME); \
if (VALUE) \
{ \
fputc (' ', FILE); \
assemble_name (FILE, VALUE); \
} \
fputc ('\n', FILE); \
} \
while (0)
#define ASM_WEAKEN_LABEL(FILE, NAME) ASM_OUTPUT_WEAK_ALIAS(FILE, NAME, 0)
/* Handle #pragma weak and #pragma pack. */
#undef HANDLE_SYSV_PRAGMA
#define HANDLE_SYSV_PRAGMA 1

View File

@ -1624,13 +1624,8 @@ STATIC symint_t add_local_symbol
symint_t,
symint_t));
STATIC symint_t add_ext_symbol PARAMS ((const char *,
const char *,
st_t,
sc_t,
long,
symint_t,
int));
STATIC symint_t add_ext_symbol PARAMS ((EXTR *,
int));
STATIC symint_t add_aux_sym_symint
PARAMS ((symint_t));
@ -2044,23 +2039,24 @@ add_local_symbol (str_start, str_end_p1, type, storage, value, indx)
/* Add an external symbol. */
STATIC symint_t
add_ext_symbol (str_start, str_end_p1, type, storage, value, indx, ifd)
const char *str_start; /* first byte in string */
const char *str_end_p1; /* first byte after string */
st_t type; /* symbol type */
sc_t storage; /* storage class */
long value; /* value of symbol */
symint_t indx; /* index to local/aux. syms */
add_ext_symbol (esym, ifd)
EXTR *esym; /* symbol pointer */
int ifd; /* file index */
{
const char *str_start; /* first byte in string */
const char *str_end_p1; /* first byte after string */
register EXTR *psym;
register varray_t *vp = &ext_symbols;
shash_t *hash_ptr = (shash_t *) 0;
str_start = ORIG_ESTRS (esym->asym.iss);
str_end_p1 = str_start + strlen(str_start);
if (debug > 1)
{
const char *sc_str = sc_to_string (storage);
const char *st_str = st_to_string (type);
long value = esym->asym.value;
const char *sc_str = sc_to_string (esym->asym.sc);
const char *st_str = st_to_string (esym->asym.st);
fprintf (stderr,
"\tesym\tv= %10ld, ifd= %2d, sc= %-12s",
@ -2078,11 +2074,9 @@ add_ext_symbol (str_start, str_end_p1, type, storage, value, indx, ifd)
psym = &vp->last->datum->esym[ vp->objects_last_page++ ];
*psym = *esym;
psym->ifd = ifd;
psym->asym.value = value;
psym->asym.st = (unsigned) type;
psym->asym.sc = (unsigned) storage;
psym->asym.index = indx;
psym->asym.index = indexNil;
psym->asym.iss = (str_start == (const char *) 0)
? 0
: add_string (&ext_strings,
@ -4629,17 +4623,10 @@ copy_object ()
for (es = 0; es < orig_sym_hdr.iextMax; es++)
{
register EXTR *eptr = orig_ext_syms + es;
register char *ename = ORIG_ESTRS (eptr->asym.iss);
register unsigned ifd = eptr->ifd;
(void) add_ext_symbol (ename,
ename + strlen (ename),
(st_t) eptr->asym.st,
(sc_t) eptr->asym.sc,
eptr->asym.value,
(symint_t) indexNil,
((long) ifd < orig_sym_hdr.ifdMax
? remap_file_number[ifd] : (int) ifd));
(void) add_ext_symbol (eptr, ((long) ifd < orig_sym_hdr.ifdMax)
? remap_file_number[ ifd ] : ifd );
}

View File

@ -1,3 +1,10 @@
2001-07-19 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* g++.old-deja/g++.pt/static3.C: Removed alpha*-*-osf* XFAIL.
g++.old-deja/g++.pt/static6.C: Likewise.
* lib/target-supports.exp (check_weak_available): alpha*-*-osf*
supports weak symbols.
2001-07-18 Andreas Jaeger <aj@suse.de>
* g++.dg/vtgc1.C: Revert patch from 2001-04-26 since vtable-gc is

View File

@ -1,6 +1,6 @@
// On targets that don't support weak symbols, we require an explicit
// instantiation of arr.
// excess errors test - XFAIL *-*-aout *-*-coff *-*-hpux* alpha*-dec-osf* *-*-hms
// excess errors test - XFAIL *-*-aout *-*-coff *-*-hpux* *-*-hms
template<class T>
struct A {

View File

@ -1,5 +1,5 @@
// Build don't run:
// excess errors test - XFAIL *-*-aout *-*-coff *-*-hpux* alpha*-dec-osf* *-*-hms
// excess errors test - XFAIL *-*-aout *-*-coff *-*-hpux* *-*-hms
// Simplified from testcase by Erez Louidor Lior <s3824888@techst02.technion.ac.il>

View File

@ -27,6 +27,7 @@
# this proc returns 1 if they're supported, 0 if they're not, or -1 if unsure
proc check_weak_available { } {
global target_triplet
global target_cpu
# All mips targets should support it
@ -35,6 +36,12 @@ proc check_weak_available { } {
return 1
}
# DEC OSF/1/Digital UNIX/Tru64 UNIX supports it
if { [regexp "alpha.*osf.*" $target_triplet] } {
return 1
}
# ELF and ECOFF support it. a.out does with gas/gld but may also with
# other linkers, so we should try it