* ldexp.c: Add LOG2CEIL() builtin function to linker script language

* ldgram.y: Likewise
	* ldlex.l: Likewise
	* NEWS: Mention the new feature.
	* ld.texinfo: Document the new feature.

	* ld-scripts/log2.exp: New: Run the new log2 test.
	* ld-scripts/log2.s: Source for the new test.
	* ld-scripts/log2.t: Linker script for new test.
This commit is contained in:
Nick Clifton
2013-08-15 07:30:15 +00:00
parent dbdf691ab9
commit 2e53f7d601
10 changed files with 96 additions and 4 deletions

View File

@@ -1,3 +1,9 @@
2013-08-14 Clemens Lang <clemens.lang@fau.de>
* ld-scripts/log2.exp: New: Run the new log2 test.
* ld-scripts/log2.s: Source for the new test.
* ld-scripts/log2.t: Linker script for new test.
2013-08-14 John Tytgat <john@bass-software.com>
PR ld/15787

View File

@@ -0,0 +1,34 @@
# Test LOG2() expression in linker script language.
# By Clemens Lang
# Copyright 2013
# Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
set testname "binary logarithm"
if {![ld_assemble $as $srcdir/$subdir/log2.s tmpdir/log2.o]} {
unresolved $testname
return
}
if {![ld_simple_link $ld tmpdir/log2 "-T $srcdir/$subdir/log2.t tmpdir/log2.o"]} {
fail $testname
} else {
pass $testname
}

View File

@@ -0,0 +1 @@
.word 0

View File

@@ -0,0 +1,8 @@
ASSERT(LOG2CEIL(0) == 0, "LOG2CEIL(0) == 0");
ASSERT(LOG2CEIL(1) == 0, "LOG2CEIL(1) == 0");
ASSERT(LOG2CEIL(2) == 1, "LOG2CEIL(2) == 1");
ASSERT(LOG2CEIL(3) == 2, "LOG2CEIL(3) == 2");
ASSERT(LOG2CEIL(4) == 2, "LOG2CEIL(4) == 2");
ASSERT(LOG2CEIL(0x0ff) == 8, "LOG2CEIL(0x0ff) == 8");
ASSERT(LOG2CEIL(0x100) == 8, "LOG2CEIL(0x100) == 8");
ASSERT(LOG2CEIL(0x1ff) == 9, "LOG2CEIL(0x1ff) == 9");