aboutsummaryrefslogtreecommitdiff
path: root/ld/ldlang.c
diff options
context:
space:
mode:
Diffstat (limited to 'ld/ldlang.c')
-rw-r--r--ld/ldlang.c31
1 files changed, 10 insertions, 21 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 905d08c..4b0a57e 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -2635,15 +2635,11 @@ insert_pad (ptr, fill, alignment_needed, output_section, dot)
bfd_vma dot;
{
lang_statement_union_type *pad;
- size_t ptr_off;
- /* ptr_off is zero, but let's not be too fast and loose with
- pointers. */
- ptr_off = ((char *) &((lang_statement_union_type *) 0)->header.next
- - (char *) 0);
+ pad = ((lang_statement_union_type *)
+ ((char *) ptr - offsetof (lang_statement_union_type *, header.next)));
if (ptr != &statement_list.head
- && ((pad = (lang_statement_union_type *) ((char *) ptr - ptr_off))
- ->header.type == lang_padding_statement_enum)
+ && pad->header.type == lang_padding_statement_enum)
&& pad->padding_statement.output_section == output_section)
{
/* Use the existing pad statement. The above test on output
@@ -3163,18 +3159,12 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
break;
case lang_padding_statement_enum:
- if (relax)
- {
- /* If we are relaxing, and this is not the first pass,
- we need to allow padding to shrink. If padding is
- needed on this pass, it will be added back in. */
- s->padding_statement.size = 0;
- break;
- }
-
- dot += s->padding_statement.size / opb;
- output_section_statement->bfd_section->_raw_size +=
- s->padding_statement.size;
+ /* If this is the first time lang_size_sections is called,
+ we won't have any padding statements. If this is the
+ second or later passes when relaxing, we should allow
+ padding to shrink. If padding is needed on this pass, it
+ will be added back in. */
+ s->padding_statement.size = 0;
break;
case lang_group_statement_enum:
@@ -3188,8 +3178,7 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
FAIL ();
break;
- /* This can only get here when relaxing is turned on. */
-
+ /* We can only get here when relaxing is turned on. */
case lang_address_statement_enum:
break;
}