diff --git a/configure.ac b/configure.ac index 00f4688e..d3ae0457 100644 --- a/configure.ac +++ b/configure.ac @@ -87,7 +87,6 @@ AC_MSG_RESULT([$fuse_version]) fi AC_CHECK_LIB([pthread], [pthread_create], [], AC_MSG_ERROR([*** pthread library (libpthread) not found])) -AC_PATH_PROG(OBJCOPY, objcopy, ,) ##ext2/3## AC_ARG_ENABLE([extfs], @@ -491,6 +490,14 @@ PKG_CHECK_VAR([bashcompletiondir], [bash-completion], [completionsdir], [], [bashcompletiondir="${sysconfdir}/bash_completion.d"]) AC_SUBST(bashcompletiondir) +##fail-mbr +AC_CHECK_TOOL([OBJCOPY], [objcopy]) +AC_CHECK_TOOL([OBJDUMP], [objdump]) +AM_CONDITIONAL(X86, [case $host_cpu in + x86_64|i[0-9]86) true ;; + *) false ;; +esac]) + AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ Makefile diff --git a/fail-mbr/Makefile.am b/fail-mbr/Makefile.am index 3a8ab521..851990ed 100644 --- a/fail-mbr/Makefile.am +++ b/fail-mbr/Makefile.am @@ -6,5 +6,34 @@ clean-local: distclean-local: clean-local -fail-mbr.bin: - sh $(srcdir)/compile-mbr.sh +if X86 +fail-mbr.image: fail-mbr.S + $(CC) -c "$<" -o "$@" + +fail-mbr.bin: fail-mbr.image + $(OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .note.gnu.property -R .reginfo -R .rel.dyn "$<" "$@" + + ## Check that this file is the same as the original fail-mbr: + @echo "Checking the file:" + $(OBJDUMP) -D -b binary -mi386 -Maddr16,data16 "$@" > f1.obj + $(OBJDUMP) -D -b binary -mi386 -Maddr16,data16 "$(srcdir)/$@.orig" > f2.obj + + ## The regular expression is used to reject lines which contain either: + ## - the name of the file, "fail-mbr" + ## - a line separator output by diff, "---" + ## - the OP code "xor %ax,%ax" which may begin by 0x31 or 0x33 + ## - a numerical offset output by diff, ^[a-f0-9]*$ + @if diff f1.obj f2.obj | grep -qEv 'fail-mbr|---|xor %ax,%ax|^[a-f0-9]*$$'; then \ + echo "files $@ and $@.orig differ significantly:"; \ + diff f1.obj f2.obj; \ + exit 1; \ + else \ + echo "'$@.bin' and '$@.orig' have no significant differences."; \ + rm f1.obj f2.obj; \ + exit 0; \ + fi +else +fail-mbr.bin: fail-mbr.bin.orig + @echo "The architecture is not x86, so the file '$@' is not compiled" + cp -vp "$<" "$@" +endif diff --git a/fail-mbr/compile-mbr.sh b/fail-mbr/compile-mbr.sh deleted file mode 100644 index 52069b7a..00000000 --- a/fail-mbr/compile-mbr.sh +++ /dev/null @@ -1,56 +0,0 @@ - -srcdir="$(dirname "$0")" - -hostarch="$(dpkg-architecture -q DEB_BUILD_ARCH 2>/dev/null)" \ -|| hostarch="$(rpm --eval '%{_arch}' 2>/dev/null)" \ -|| hostarch="$(arch 2>/dev/null)" \ -|| hostarch='' - -case "${hostarch:-}" in -'i386'|'i486'|'i586'|'i686'|'amd64'|'x86_64') - - ############### compiles source file for x86 architectures ################## - # compile the file fail-mbr.bin - #echo -n "Compiling: fail-mbr.S -> fail-mbr.o -> " - #gcc -Wall -Werror -m32 -nostdlib -static -Wl,--relocatable -o fail-mbr.o fail-mbr.S - - #echo -n "fail-mbr.image -> " - #gcc -Os -Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes -Wundef -Wstrict-prototypes -g -falign-jumps=1 -falign-loops=1 -falign-functions=1 -mno-mmx -mno-sse -mno-sse2 -mno-3dnow -fno-dwarf2-cfi-asm -fno-asynchronous-unwind-tables -m32 -fno-stack-protector -mno-stack-arg-probe -Werror -Wno-trampolines -DUSE_ASCII_FAILBACK=1 -DHAVE_UNIFONT_WIDTHSPEC=1 -mrtd -mregparm=3 -fno-builtin -m32 -Wl,--build-id=none -nostdlib -Wl,-N,-S -Wl,-N -Wl,-Ttext,0x7C00 -Wl,--no-dynamic-linker -o fail-mbr.image fail-mbr.o - - #echo "fail-mbr.bin [Done]. " - gcc -c "${srcdir}/"fail-mbr.S -o fail-mbr.image - objcopy -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .note.gnu.property -R .reginfo -R .rel.dyn fail-mbr.image fail-mbr.bin - - ######################### Checks the build ############################# - # checks that this file does the same than the original fail-mbr - echo "Checking the file:" - objdump -D -b binary -mi386 -Maddr16,data16 fail-mbr.bin > f1.obj - objdump -D -b binary -mi386 -Maddr16,data16 "${srcdir}/"fail-mbr.bin.orig > f2.obj - - ######################### Checks the build ############################# - # the regular expression 'fail-mbr|---|xor %ax,%ax|^[a-f0-9]*$' is used - # to reject lines which contain either: - # - the name of the file, "fail-mbr" - # - a line separator output by diff, "---" - # - the OP code "xor %ax,%ax" which may begin by 0x31 or 0x33 - # - a numerical offset output by diff, ^[a-f0-9]*$ - report=$(diff f1.obj f2.obj | grep -Ev 'fail-mbr|---|xor %ax,%ax|^[a-f0-9]*$') - if [ -n "$report" ]; then - echo "files fail-mbr.bin and fail-mbr.bin.orig differ significantly:" - diff f1.obj f2.obj - exit 1 - else - echo "'fail-mbr.bin' and 'fail-mbr.bin.orig' have no significant differences." - rm f1.obj f2.obj - exit 0 - fi - - ;; - -*) - - echo "The architecture is not x86, so the file 'fail-mbr.bin' is not compiled" - echo "Copying 'fail-mbr.bin.orig' to 'fail-mbr.bin'" - cp -p "${srcdir}/"fail-mbr.bin.orig fail-mbr.bin - -esac