# Test SIZEOF in a linker script.
# By Ian Lance Taylor, Cygnus Support
# Based on a bug report from anders.blomdell@control.lth.se.

set testname "SIZEOF"

if ![ld_assemble $as $srcdir/$subdir/sizeof.s tmpdir/sizeof.o] {
    unresolved $testname
    return
}

if ![ld_simple_link $ld tmpdir/sizeof "-T $srcdir/$subdir/sizeof.t tmpdir/sizeof.o"] {
    fail $testname
    return
}

if ![ld_nm $nm tmpdir/sizeof] {
    unresolved $testname
    return
}

if {![info exists nm_output(text_start)] \
     || ![info exists nm_output(text_end)] \
     || ![info exists nm_output(data_start)] \
     || ![info exists nm_output(data_end)] \
     || ![info exists nm_output(sizeof_text)] \
     || ![info exists nm_output(sizeof_data)]} {
    send_log "bad output from nm\n"
    verbose "bad output from nm"
    fail $testname
    return
}

if {$nm_output(text_end) - $nm_output(text_start) != $nm_output(sizeof_text)} {
    send_log "text_end - text_start != sizeof_text\n"
    verbose "text_end - text_start != sizeof_text"
    fail $testname
    return
}

if {$nm_output(data_end) - $nm_output(data_start) != $nm_output(sizeof_data)} {
    send_log "data_end - data_start != sizeof_data\n"
    verbose "data_end - data_start != sizeof_data"
    fail $testname
    return
}

if {$nm_output(sizeof_text) != $nm_output(sizeof_data)} {
    send_log "sizeof_text != sizeof_data\n"
    verbose "sizeof_text != sizeof_data"
    fail $testname
    return
}

pass $testname
