Commit 432fa9f2 by Rainer Orth Committed by Rainer Orth

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
parent deaabf14
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> 2001-07-19 Andreas Schwab <schwab@suse.de>
* configure.in (assembler dwarf2 debug_line support): Define nop * configure.in (assembler dwarf2 debug_line support): Define nop
......
...@@ -186,3 +186,26 @@ __enable_execute_stack (addr) \ ...@@ -186,3 +186,26 @@ __enable_execute_stack (addr) \
(TARGET_GAS \ (TARGET_GAS \
? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4) \ ? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4) \
: DW_EH_PE_aligned) : 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
...@@ -1624,13 +1624,8 @@ STATIC symint_t add_local_symbol ...@@ -1624,13 +1624,8 @@ STATIC symint_t add_local_symbol
symint_t, symint_t,
symint_t)); symint_t));
STATIC symint_t add_ext_symbol PARAMS ((const char *, STATIC symint_t add_ext_symbol PARAMS ((EXTR *,
const char *, int));
st_t,
sc_t,
long,
symint_t,
int));
STATIC symint_t add_aux_sym_symint STATIC symint_t add_aux_sym_symint
PARAMS ((symint_t)); PARAMS ((symint_t));
...@@ -2044,23 +2039,24 @@ add_local_symbol (str_start, str_end_p1, type, storage, value, indx) ...@@ -2044,23 +2039,24 @@ add_local_symbol (str_start, str_end_p1, type, storage, value, indx)
/* Add an external symbol. */ /* Add an external symbol. */
STATIC symint_t STATIC symint_t
add_ext_symbol (str_start, str_end_p1, type, storage, value, indx, ifd) add_ext_symbol (esym, ifd)
const char *str_start; /* first byte in string */ EXTR *esym; /* symbol pointer */
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 */
int ifd; /* file index */ 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 EXTR *psym;
register varray_t *vp = &ext_symbols; register varray_t *vp = &ext_symbols;
shash_t *hash_ptr = (shash_t *) 0; 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) if (debug > 1)
{ {
const char *sc_str = sc_to_string (storage); long value = esym->asym.value;
const char *st_str = st_to_string (type); const char *sc_str = sc_to_string (esym->asym.sc);
const char *st_str = st_to_string (esym->asym.st);
fprintf (stderr, fprintf (stderr,
"\tesym\tv= %10ld, ifd= %2d, sc= %-12s", "\tesym\tv= %10ld, ifd= %2d, sc= %-12s",
...@@ -2078,11 +2074,9 @@ add_ext_symbol (str_start, str_end_p1, type, storage, value, indx, ifd) ...@@ -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 = &vp->last->datum->esym[ vp->objects_last_page++ ];
*psym = *esym;
psym->ifd = ifd; psym->ifd = ifd;
psym->asym.value = value; psym->asym.index = indexNil;
psym->asym.st = (unsigned) type;
psym->asym.sc = (unsigned) storage;
psym->asym.index = indx;
psym->asym.iss = (str_start == (const char *) 0) psym->asym.iss = (str_start == (const char *) 0)
? 0 ? 0
: add_string (&ext_strings, : add_string (&ext_strings,
...@@ -4629,17 +4623,10 @@ copy_object () ...@@ -4629,17 +4623,10 @@ copy_object ()
for (es = 0; es < orig_sym_hdr.iextMax; es++) for (es = 0; es < orig_sym_hdr.iextMax; es++)
{ {
register EXTR *eptr = orig_ext_syms + es; register EXTR *eptr = orig_ext_syms + es;
register char *ename = ORIG_ESTRS (eptr->asym.iss);
register unsigned ifd = eptr->ifd; register unsigned ifd = eptr->ifd;
(void) add_ext_symbol (ename, (void) add_ext_symbol (eptr, ((long) ifd < orig_sym_hdr.ifdMax)
ename + strlen (ename), ? remap_file_number[ ifd ] : ifd );
(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));
} }
......
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> 2001-07-18 Andreas Jaeger <aj@suse.de>
* g++.dg/vtgc1.C: Revert patch from 2001-04-26 since vtable-gc is * g++.dg/vtgc1.C: Revert patch from 2001-04-26 since vtable-gc is
......
// On targets that don't support weak symbols, we require an explicit // On targets that don't support weak symbols, we require an explicit
// instantiation of arr. // 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> template<class T>
struct A { struct A {
......
// Build don't run: // 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> // Simplified from testcase by Erez Louidor Lior <s3824888@techst02.technion.ac.il>
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
# this proc returns 1 if they're supported, 0 if they're not, or -1 if unsure # this proc returns 1 if they're supported, 0 if they're not, or -1 if unsure
proc check_weak_available { } { proc check_weak_available { } {
global target_triplet
global target_cpu global target_cpu
# All mips targets should support it # All mips targets should support it
...@@ -35,6 +36,12 @@ proc check_weak_available { } { ...@@ -35,6 +36,12 @@ proc check_weak_available { } {
return 1 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 # ELF and ECOFF support it. a.out does with gas/gld but may also with
# other linkers, so we should try it # other linkers, so we should try it
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment