https://sourceware.org/bugzilla/show_bug.cgi?id=30193
--- Comment #2 from Nick Clifton <nickc at redhat dot com> --- Hmmm, I have been thinking about this issue a bit more and uncovered another problem with the ASCII directive. It assumes that the space is a constant. Consider this: % cat ascii.t SECTIONS { .data : { *(.data) data_end = . ; ASCII ( 40 - data_end ) "goodbye world" } /DISCARD/ : { *(*) } } % ld ../ld/ld-new foo.o -e 0 -T ascii.t This creates an output file with a gigantic .data section: % readelf --wide --sections a.out | grep .data [ 1] .data PROGBITS 0000000000000000 001000 2037650 00 WA 0 0 1 because the expression cannot be evaluated at the time that the script is parsed, so the value field in the etree_type structure is uninitialised. Fortunately there is an easy fix: diff --git a/ld/ldgram.y b/ld/ldgram.y index faffeec94b8..26e56fe1566 100644 --- a/ld/ldgram.y +++ b/ld/ldgram.y @@ -672,7 +672,10 @@ statement: { /* 'value' is a memory leak, do we care? */ etree_type *value = $3; - lang_add_string (value->value.value, $5); + if (value->type.node_code == INT) + lang_add_string (value->value.value, $5); + else + einfo (_("%X%P:%pS: ASCII expression must be an integer\n"), NULL); } | ASCIZ NAME { I am running some regression tests to see if this breaks anything... -- You are receiving this mail because: You are on the CC list for the bug.