gas: Port "copy st_size only if unset" to aarch64 and riscv

And disable the new test gas/elf/size.s for alpha which uses its own
.set, for hppa*-*-hpux* which does not allow .size before declaration.
This commit is contained in:
Fangrui Song
2022-04-08 14:06:36 -07:00
parent 9f184a64f5
commit a3a7f5e158
3 changed files with 22 additions and 21 deletions

View File

@ -10469,17 +10469,17 @@ aarch64_elf_copy_symbol_attributes (symbolS *dest, symbolS *src)
{
struct elf_obj_sy *srcelf = symbol_get_obj (src);
struct elf_obj_sy *destelf = symbol_get_obj (dest);
if (srcelf->size)
/* If size is unset, copy size from src. Because we don't track whether
.size has been used, we can't differentiate .size dest, 0 from the case
where dest's size is unset. */
if (!destelf->size && S_GET_SIZE (dest) == 0)
{
if (destelf->size == NULL)
destelf->size = XNEW (expressionS);
*destelf->size = *srcelf->size;
if (srcelf->size)
{
destelf->size = XNEW (expressionS);
*destelf->size = *srcelf->size;
}
S_SET_SIZE (dest, S_GET_SIZE (src));
}
else
{
free (destelf->size);
destelf->size = NULL;
}
S_SET_SIZE (dest, S_GET_SIZE (src));
}
#endif

View File

@ -4540,19 +4540,18 @@ riscv_elf_copy_symbol_attributes (symbolS *dest, symbolS *src)
{
struct elf_obj_sy *srcelf = symbol_get_obj (src);
struct elf_obj_sy *destelf = symbol_get_obj (dest);
if (srcelf->size)
/* If size is unset, copy size from src. Because we don't track whether
.size has been used, we can't differentiate .size dest, 0 from the case
where dest's size is unset. */
if (!destelf->size && S_GET_SIZE (dest) == 0)
{
if (destelf->size == NULL)
destelf->size = XNEW (expressionS);
*destelf->size = *srcelf->size;
if (srcelf->size)
{
destelf->size = XNEW (expressionS);
*destelf->size = *srcelf->size;
}
S_SET_SIZE (dest, S_GET_SIZE (src));
}
else
{
if (destelf->size != NULL)
free (destelf->size);
destelf->size = NULL;
}
S_SET_SIZE (dest, S_GET_SIZE (src));
}
/* RISC-V pseudo-ops table. */

View File

@ -1,5 +1,7 @@
#readelf: -sW
#name: ELF symbol size
#notarget: alpha-*-* hppa*-*-hpux*
# The Alpha target uses its own .set pseudo-insn.
#...
+[0-9]+: 0+ +1 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +foo1