mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-03-07 13:39:43 +08:00
x86: allow @size to also (sensibly) apply to sections
So far this (counter-intuitively) produced the size as recorded in the (section) symbol. Obtain the section's size instead for section symbols. (I wonder whether STT_SECTION symbols couldn't properly hold the section's size in their st_size field, which in turn would likely mean the internal symbol would also have its size properly updated.) Note that this is not the same as the .sizeof.() pseudo-operator: @size yields the local file's contribution to a section, while .sizeof.() gets resolved by the linker to produce the final full section's size. As to the 3rd each of the expected output lines in the changed testcase: I can't find justification for zzz to come after yyy despite them being defined in the opposite order in source. Therefore I think it's better to permit both possible outcomes.
This commit is contained in:
parent
8eb82ba1fd
commit
44f871628c
@ -1,3 +1,11 @@
|
||||
2021-04-29 Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
* config/tc-i386.c (tc_gen_reloc): Use section size for section
|
||||
symbols when resolving BFD_RELOC_SIZE*.
|
||||
* testsuite/gas/i386/size-2.s: Add section size cases.
|
||||
* testsuite/gas/i386/size-2.d,
|
||||
testsuite/gas/i386/x86-64-size-2.d: Adjust expectations.
|
||||
|
||||
2021-04-28 Jan Beulich <jbeulich@suse.com>
|
||||
H.J. Lu <hjl.tools@gmail.com>
|
||||
|
||||
|
@ -14241,7 +14241,11 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
|
||||
{
|
||||
/* Resolve size relocation against local symbol to size of
|
||||
the symbol plus addend. */
|
||||
valueT value = S_GET_SIZE (fixp->fx_addsy) + fixp->fx_offset;
|
||||
valueT value = S_GET_SIZE (fixp->fx_addsy);
|
||||
|
||||
if (symbol_get_bfdsym (fixp->fx_addsy)->flags & BSF_SECTION_SYM)
|
||||
value = bfd_section_size (S_GET_SEGMENT (fixp->fx_addsy));
|
||||
value += fixp->fx_offset;
|
||||
if (fixp->fx_r_type == BFD_RELOC_SIZE32
|
||||
&& object_64bit
|
||||
&& !fits_in_unsigned_long (value))
|
||||
|
@ -1,10 +1,14 @@
|
||||
#name: i386 size 2
|
||||
#objdump: -dwr
|
||||
|
||||
#objdump: -dhwr
|
||||
|
||||
.*: +file format .*
|
||||
|
||||
|
||||
Sections:
|
||||
Idx Name +Size .*
|
||||
0 \.text +0*3c .*
|
||||
1 \.data +0*5c .*
|
||||
2 \.bss +0*199999(ae|b0) .*
|
||||
#...
|
||||
Disassembly of section .text:
|
||||
|
||||
0+ <.text>:
|
||||
@ -17,4 +21,7 @@ Disassembly of section .text:
|
||||
[ ]*[a-f0-9]+: b8 90 99 99 19 mov \$0x19999990,%eax
|
||||
[ ]*[a-f0-9]+: b8 70 99 99 19 mov \$0x19999970,%eax
|
||||
[ ]*[a-f0-9]+: b8 b0 99 99 19 mov \$0x199999b0,%eax
|
||||
[ ]*[a-f0-9]+: b8 3c 00 00 00 mov \$0x3c,%eax
|
||||
[ ]*[a-f0-9]+: b8 60 00 00 00 mov \$0x60,%eax
|
||||
[ ]*[a-f0-9]+: b8 (ae|b0) 99 99 09 mov \$0x99999(ae|b0),%eax
|
||||
#pass
|
||||
|
@ -9,6 +9,9 @@
|
||||
movl $zzz@SIZE, %eax
|
||||
movl $zzz@SIZE - 32, %eax
|
||||
movl $zzz@SIZE + 32, %eax
|
||||
movl $.text@SIZE, %eax
|
||||
movl $.data@SIZE + 4, %eax
|
||||
movl $.bss@SIZE - 0x10000000, %eax
|
||||
.local zzz
|
||||
.comm zzz,429496720,32
|
||||
.bss
|
||||
|
@ -1,11 +1,15 @@
|
||||
#name: x86-64 size 2
|
||||
#source: size-2.s
|
||||
#objdump: -dwr
|
||||
|
||||
#objdump: -dhwr
|
||||
|
||||
.*: +file format .*
|
||||
|
||||
|
||||
Sections:
|
||||
Idx Name +Size .*
|
||||
0 \.text +0*3c .*
|
||||
1 \.data +0*5c .*
|
||||
2 \.bss +0*199999(ae|b0) .*
|
||||
#...
|
||||
Disassembly of section .text:
|
||||
|
||||
0+ <.text>:
|
||||
@ -18,4 +22,7 @@ Disassembly of section .text:
|
||||
[ ]*[a-f0-9]+: b8 90 99 99 19 mov \$0x19999990,%eax
|
||||
[ ]*[a-f0-9]+: b8 70 99 99 19 mov \$0x19999970,%eax
|
||||
[ ]*[a-f0-9]+: b8 b0 99 99 19 mov \$0x199999b0,%eax
|
||||
[ ]*[a-f0-9]+: b8 3c 00 00 00 mov \$0x3c,%eax
|
||||
[ ]*[a-f0-9]+: b8 60 00 00 00 mov \$0x60,%eax
|
||||
[ ]*[a-f0-9]+: b8 (ae|b0) 99 99 09 mov \$0x99999(ae|b0),%eax
|
||||
#pass
|
||||
|
Loading…
Reference in New Issue
Block a user