123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- #! @BUILD_SHEBANG@
- set -e
- # Copyright (C) 2010 Free Software Foundation, Inc.
- #
- # This gensymlist.sh is free software; the author
- # gives unlimited permission to copy and/or distribute it,
- # with or without modifications, as long as this notice is preserved.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
- # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- # PARTICULAR PURPOSE.
- #
- # Example:
- #
- # genmod.sh moddep.lst normal.module build-grub-module-verifier normal.mod
- #
- moddep=$1
- infile=$2
- outfile=$4
- tmpfile=${outfile}.tmp
- modname=`echo $infile | sed -e 's@\.module.*$@@'`
- if ! grep ^$modname: $moddep >/dev/null; then
- echo "warning: moddep.lst has no dependencies for $modname" >&2
- exit 0
- fi
- deps=`grep ^$modname: $moddep | sed s@^.*:@@`
- # remove old files if any
- rm -f $tmpfile $outfile
- if test x@TARGET_APPLE_LINKER@ != x1; then
- # stripout .modname and .moddeps sections from input module
- @TARGET_OBJCOPY@ -R .modname -R .moddeps $infile $tmpfile
- # Attach .modname and .moddeps sections
- t1=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
- printf "$modname\0" >$t1
- t2=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
- for dep in $deps; do printf "$dep\0" >> $t2; done
- if test -n "$deps"; then
- @TARGET_OBJCOPY@ --add-section .modname=$t1 --add-section .moddeps=$t2 $tmpfile
- else
- @TARGET_OBJCOPY@ --add-section .modname=$t1 $tmpfile
- fi
- rm -f $t1 $t2
- if test x@platform@ != xemu; then
- @TARGET_STRIP@ --strip-unneeded \
- -K grub_mod_init -K grub_mod_fini \
- -K _grub_mod_init -K _grub_mod_fini \
- -R .note.gnu.gold-version -R .note.GNU-stack \
- -R .note -R .comment -R .ARM.exidx $tmpfile || exit 1
- fi
- if ! test -z "${TARGET_OBJ2ELF}"; then
- "${TARGET_OBJ2ELF}" $tmpfile || exit 1
- fi
- else
- tmpfile2=${outfile}.tmp2
- t1=${outfile}.t1.c
- t2=${outfile}.t2.c
- # remove old files if any
- rm -f $t1 $t2
- cp $infile $tmpfile
- # Attach .modname and .moddeps sections
- echo "char modname[] __attribute__ ((section(\"_modname, _modname\"))) = \"$modname\";" >$t1
- for dep in $deps; do echo "char moddep_$dep[] __attribute__ ((section(\"_moddeps, _moddeps\"))) = \"$dep\";" >>$t2; done
- if test -n "$deps"; then
- @TARGET_CC@ @TARGET_LDFLAGS@ -ffreestanding -nostdlib -o $tmpfile2 $t1 $t2 $tmpfile -Wl,-r,-d
- else
- @TARGET_CC@ @TARGET_LDFLAGS@ -ffreestanding -nostdlib -o $tmpfile2 $t1 $tmpfile -Wl,-r,-d
- fi
- rm -f $t1 $t2 $tmpfile
- mv $tmpfile2 $tmpfile
- cp $tmpfile $tmpfile.bin
- @TARGET_OBJCONV@ -f@TARGET_MODULE_FORMAT@ \
- -nr:_grub_mod_init:grub_mod_init \
- -nr:_grub_mod_fini:grub_mod_fini \
- -wd1106 -nu -nd $tmpfile.bin $tmpfile || exit 1
- rm -f $tmpfile.bin
- fi
- if test x@platform@ != xemu; then
- ./build-grub-module-verifier@BUILD_EXEEXT@ $tmpfile @target_cpu@ @platform@
- fi
- mv $tmpfile $outfile
|