mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 02:24:17 +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 *srcelf = symbol_get_obj (src);
|
||||||
struct elf_obj_sy *destelf = symbol_get_obj (dest);
|
struct elf_obj_sy *destelf = symbol_get_obj (dest);
|
||||||
|
/* 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 (srcelf->size)
|
if (srcelf->size)
|
||||||
{
|
{
|
||||||
if (destelf->size == NULL)
|
|
||||||
destelf->size = XNEW (expressionS);
|
destelf->size = XNEW (expressionS);
|
||||||
*destelf->size = *srcelf->size;
|
*destelf->size = *srcelf->size;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
free (destelf->size);
|
|
||||||
destelf->size = NULL;
|
|
||||||
}
|
|
||||||
S_SET_SIZE (dest, S_GET_SIZE (src));
|
S_SET_SIZE (dest, S_GET_SIZE (src));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -4540,20 +4540,19 @@ riscv_elf_copy_symbol_attributes (symbolS *dest, symbolS *src)
|
|||||||
{
|
{
|
||||||
struct elf_obj_sy *srcelf = symbol_get_obj (src);
|
struct elf_obj_sy *srcelf = symbol_get_obj (src);
|
||||||
struct elf_obj_sy *destelf = symbol_get_obj (dest);
|
struct elf_obj_sy *destelf = symbol_get_obj (dest);
|
||||||
|
/* 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 (srcelf->size)
|
if (srcelf->size)
|
||||||
{
|
{
|
||||||
if (destelf->size == NULL)
|
|
||||||
destelf->size = XNEW (expressionS);
|
destelf->size = XNEW (expressionS);
|
||||||
*destelf->size = *srcelf->size;
|
*destelf->size = *srcelf->size;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if (destelf->size != NULL)
|
|
||||||
free (destelf->size);
|
|
||||||
destelf->size = NULL;
|
|
||||||
}
|
|
||||||
S_SET_SIZE (dest, S_GET_SIZE (src));
|
S_SET_SIZE (dest, S_GET_SIZE (src));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* RISC-V pseudo-ops table. */
|
/* RISC-V pseudo-ops table. */
|
||||||
static const pseudo_typeS riscv_pseudo_table[] =
|
static const pseudo_typeS riscv_pseudo_table[] =
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#readelf: -sW
|
#readelf: -sW
|
||||||
#name: ELF symbol size
|
#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
|
+[0-9]+: 0+ +1 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +foo1
|
||||||
|
Reference in New Issue
Block a user