68e158dffd
This section is generated by clang and is useful only for debugging. It contains exotic relocations, so strip them to avoid them interferring with module loading.
97 lines
2.8 KiB
Bash
97 lines
2.8 KiB
Bash
#! /bin/sh
|
|
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 $name.bin
|
|
fi
|
|
./build-grub-module-verifier $tmpfile @target_cpu@
|
|
mv $tmpfile $outfile
|