mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-19 17:18:24 +08:00
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:
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user