2011-05-18 11:53:07 +00:00
|
|
|
#! /bin/sh
|
|
|
|
set -e
|
|
|
|
|
2010-08-29 11:13:07 +00:00
|
|
|
# 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:
|
|
|
|
#
|
2010-09-19 13:59:36 +00:00
|
|
|
# genmod.sh moddep.lst normal.module normal.mod
|
2010-08-29 11:13:07 +00:00
|
|
|
#
|
|
|
|
|
|
|
|
moddep=$1
|
|
|
|
infile=$2
|
|
|
|
outfile=$3
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
# stripout .modname and .moddeps sections from input module
|
2010-12-25 17:21:46 +00:00
|
|
|
@OBJCOPY@ -R .modname -R .moddeps $infile $tmpfile
|
2010-08-29 11:13:07 +00:00
|
|
|
|
|
|
|
# Attach .modname and .moddeps sections
|
2010-10-18 20:50:01 +00:00
|
|
|
t1=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
|
2010-08-29 11:13:07 +00:00
|
|
|
printf "$modname\0" >$t1
|
|
|
|
|
2010-10-18 20:50:01 +00:00
|
|
|
t2=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
|
2010-08-29 11:13:07 +00:00
|
|
|
for dep in $deps; do printf "$dep\0" >> $t2; done
|
|
|
|
|
|
|
|
if test -n "$deps"; then
|
2010-12-25 17:21:46 +00:00
|
|
|
@OBJCOPY@ --add-section .modname=$t1 --add-section .moddeps=$t2 $tmpfile
|
2010-08-29 11:13:07 +00:00
|
|
|
else
|
2010-12-25 17:21:46 +00:00
|
|
|
@OBJCOPY@ --add-section .modname=$t1 $tmpfile
|
2010-08-29 11:13:07 +00:00
|
|
|
fi
|
|
|
|
rm -f $t1 $t2
|
|
|
|
|
|
|
|
if test x@TARGET_APPLE_CC@ != x1; then
|
2011-01-13 21:23:49 +00:00
|
|
|
if ! test -z "${TARGET_OBJ2ELF}"; then
|
|
|
|
./${TARGET_OBJ2ELF} $tmpfile || exit 1
|
2010-08-29 11:13:07 +00:00
|
|
|
fi
|
|
|
|
if test x@platform@ != xemu; then
|
|
|
|
@STRIP@ --strip-unneeded \
|
|
|
|
-K grub_mod_init -K grub_mod_fini \
|
|
|
|
-K _grub_mod_init -K _grub_mod_fini \
|
2012-02-26 21:57:26 +00:00
|
|
|
-R .note.GNU-stack -R .note -R .comment $tmpfile || exit 1
|
2010-08-29 11:13:07 +00:00
|
|
|
fi
|
|
|
|
else
|
|
|
|
# XXX Test these Apple CC fixes
|
|
|
|
cp $tmpfile $tmpfile.bin
|
|
|
|
@OBJCONV@ -f@TARGET_MODULE_FORMAT@ \
|
|
|
|
-nr:_grub_mod_init:grub_mod_init \
|
|
|
|
-nr:_grub_mod_fini:grub_mod_fini \
|
|
|
|
-wd1106 -ew2030 -ew2050 -nu -nd $tmpfile.bin $tmpfile || exit 1
|
|
|
|
rm -f $name.bin
|
|
|
|
fi
|
|
|
|
mv $tmpfile $outfile
|