# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: ../mainline/
# testament_sha1: ca215b856a9f29c2fd30f660799fe36adfbd97bf
# timestamp: 2010-08-29 17:32:48 +0530
# base_revision_id: address@hidden
#
# Begin patch
=== modified file 'conf/Makefile.common'
--- conf/Makefile.common 2010-08-23 07:53:56 +0000
+++ conf/Makefile.common 2010-08-29 05:47:30 +0000
@@ -85,18 +85,10 @@
# Define these variables to calm down automake
-FS_FILES =
-DEF_FILES =
-UND_FILES =
+PP_FILES =
IMG_FILES =
MOD_FILES =
-VIDEO_FILES =
MODULE_FILES =
-HANDLER_FILES =
-PARTMAP_FILES =
-COMMAND_FILES =
-PARTTOOL_FILES =
-TERMINAL_FILES =
KERNEL_HEADER_FILES =
man_MANS =
=== modified file 'conf/Makefile.extra-dist'
--- conf/Makefile.extra-dist 2010-08-21 04:18:27 +0000
+++ conf/Makefile.extra-dist 2010-08-29 11:28:43 +0000
@@ -14,20 +14,13 @@
EXTRA_DIST += grub-core/Makefile.gcry.def
EXTRA_DIST += grub-core/genmoddep.awk
-EXTRA_DIST += grub-core/genmodsrc.sh
-EXTRA_DIST += grub-core/genfslist.sh
-EXTRA_DIST += grub-core/gencmdlist.sh
+EXTRA_DIST += grub-core/genmod.sh.in
+EXTRA_DIST += grub-core/gensyminfo.sh.in
EXTRA_DIST += grub-core/gensymlist.sh
EXTRA_DIST += grub-core/genemuinit.sh
-EXTRA_DIST += grub-core/genvideolist.sh
-EXTRA_DIST += grub-core/genhandlerlist.sh
-EXTRA_DIST += grub-core/genpartmaplist.sh
-EXTRA_DIST += grub-core/genterminallist.sh
-EXTRA_DIST += grub-core/genparttoollist.sh
EXTRA_DIST += grub-core/genemuinitheader.sh
EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h')
+EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib -name '*.h')
EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/gnulib -name '*.h')
EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/efiemu -name '*.h')
-EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib/posix_wrap -name '*.h')
-EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib/libgcrypt_wrap -name '*.h')
=== modified file 'gentpl.py'
--- gentpl.py 2010-08-23 08:37:29 +0000
+++ gentpl.py 2010-08-29 11:13:07 +0000
@@ -284,75 +284,12 @@
r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)")
r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)")
- r += gvar_add("DEF_FILES", "def-[+ name +].lst")
- r += gvar_add("UND_FILES", "und-[+ name +].lst")
r += gvar_add("MOD_FILES", "[+ name +].mod")
- r += gvar_add("platform_DATA", "[+ name +].mod")
- r += gvar_add("CLEANFILES", "def-[+ name +].lst und-[+ name +].lst mod-[+ name +].c mod-[+ name +].o [+ name +].mod")
-
- r += gvar_add("COMMAND_FILES", "command-[+ name +].lst")
- r += gvar_add("FS_FILES", "fs-[+ name +].lst")
- r += gvar_add("VIDEO_FILES", "video-[+ name +].lst")
- r += gvar_add("PARTMAP_FILES", "partmap-[+ name +].lst")
- r += gvar_add("HANDLER_FILES", "handler-[+ name +].lst")
- r += gvar_add("PARTTOOL_FILES", "parttool-[+ name +].lst")
- r += gvar_add("TERMINAL_FILES", "terminal-[+ name +].lst")
- r += gvar_add("CLEANFILES", "command-[+ name +].lst fs-[+ name +].lst")
- r += gvar_add("CLEANFILES", "handler-[+ name +].lst terminal-[+ name +].lst")
- r += gvar_add("CLEANFILES", "video-[+ name +].lst partmap-[+ name +].lst parttool-[+ name +].lst")
-
+ r += gvar_add("PP_FILES", "[+ name +].pp")
r += gvar_add("CLEANFILES", "[+ name +].pp")
r += """
[+ name +].pp: $(""" + cname() + """_SOURCES) $(nodist_""" + cname() + """_SOURCES)
$(TARGET_CPP) -DGRUB_LST_GENERATOR $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + cname() + """_CPPFLAGS) $(CPPFLAGS) $^ > $@ || (rm -f $@; exit 1)
-
-def-[+ name +].lst: [+ name +].module$(EXEEXT)
- if test x$(USE_APPLE_CC_FIXES) = xyes; then \
- $(NM) -g -P -p $< | grep -E '^[a-zA-Z0-9_]* [TDS]' | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@; \
- else \
- $(NM) -g --defined-only -P -p $< | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@; \
- fi
-
-und-[+ name +].lst: [+ name +].module$(EXEEXT)
- $(NM) -u -P -p $< | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@
-
-mod-[+ name +].c: [+ name +].module$(EXEEXT) moddep.lst genmodsrc.sh
- sh $(srcdir)/genmodsrc.sh [+ name +] moddep.lst > $@ || (rm -f $@; exit 1)
-
-mod-[+ name +].o: mod-[+ name +].c
- $(TARGET_CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + cname() + """_CPPFLAGS) $(CPPFLAGS) $(""" + cname() + """_CFLAGS) $(CFLAGS) -c -o $@ $<
-
-[+ name +].mod: [+ name +].module$(EXEEXT) mod-[+ name +].o
- if test x$(USE_APPLE_CC_FIXES) = xyes; then \
- $(CCLD) $(""" + cname() + """_LDFLAGS) $(LDFLAGS) -o address@hidden $^; \
- $(OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -wd1106 -nu -nd address@hidden $@; \
- rm -f address@hidden; \
- else \
- $(CCLD) -o $@ $(""" + cname() + """_LDFLAGS) $(LDFLAGS) $^; \
- if test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi; \
- $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@; \
- fi
-
-command-[+ name +].lst: [+ name +].pp $(srcdir)/gencmdlist.sh
- cat $< | sh $(srcdir)/gencmdlist.sh [+ name +] > $@ || (rm -f $@; exit 1)
-
-fs-[+ name +].lst: [+ name +].pp $(srcdir)/genfslist.sh
- cat $< | sh $(srcdir)/genfslist.sh [+ name +] > $@ || (rm -f $@; exit 1)
-
-video-[+ name +].lst: [+ name +].pp $(srcdir)/genvideolist.sh
- cat $< | sh $(srcdir)/genvideolist.sh [+ name +] > $@ || (rm -f $@; exit 1)
-
-partmap-[+ name +].lst: [+ name +].pp $(srcdir)/genpartmaplist.sh
- cat $< | sh $(srcdir)/genpartmaplist.sh [+ name +] > $@ || (rm -f $@; exit 1)
-
-parttool-[+ name +].lst: [+ name +].pp $(srcdir)/genparttoollist.sh
- cat $< | sh $(srcdir)/genparttoollist.sh [+ name +] > $@ || (rm -f $@; exit 1)
-
-handler-[+ name +].lst: [+ name +].pp $(srcdir)/genhandlerlist.sh
- cat $< | sh $(srcdir)/genhandlerlist.sh [+ name +] > $@ || (rm -f $@; exit 1)
-
-terminal-[+ name +].lst: [+ name +].pp $(srcdir)/genterminallist.sh
- cat $< | sh $(srcdir)/genterminallist.sh [+ name +] > $@ || (rm -f $@; exit 1)
"""
return r
@@ -479,9 +416,8 @@
r += "[+ IF mansection +]" + manpage() + "[+ ENDIF +]"
r += "[+ ENDIF +]"
- r += rule("[+ name +]", "$(top_builddir)/config.status " + platform_sources(platform), """
-$(top_builddir)/config.status --file=-:""" + platform_sources(platform) + """ \
- | sed -e 's,@pkglib_DATA@,$(pkglib_DATA),g' > $@
+ r += rule("[+ name +]", platform_sources(platform) + " $(top_builddir)/config.status", """
+$(top_builddir)/config.status --file=-:$< | sed -e 's,@pkglib_DATA@,$(pkglib_DATA),g' > $@
chmod a+x [+ name +]
""")
=== modified file 'grub-core/Makefile.am'
--- grub-core/Makefile.am 2010-08-22 15:30:22 +0000
+++ grub-core/Makefile.am 2010-08-29 11:13:07 +0000
@@ -235,8 +235,8 @@
$(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) $(CFLAGS) -DGRUB_SYMBOL_GENERATOR=1 $^ >kernel_syms.input
if grep "^#define HAVE_ASM_USCORE" $(top_builddir)/config.h; then u="_"; else u=""; fi; \
cat kernel_syms.input | grep -v '^#' | sed -n \
- -e '/EXPORT_FUNC *([a-zA-Z0-9_]*)/{s/.*EXPORT_FUNC *(\([a-zA-Z0-9_]*\)).*/'"$$u"'\1 kernel/;p;}' \
- -e '/EXPORT_VAR *([a-zA-Z0-9_]*)/{s/.*EXPORT_VAR *(\([a-zA-Z0-9_]*\)).*/'"$$u"'\1 kernel/;p;}' \
+ -e '/EXPORT_FUNC *([a-zA-Z0-9_]*)/{s/.*EXPORT_FUNC *(\([a-zA-Z0-9_]*\)).*/defined '"$$u"'kernel \1/;p;}' \
+ -e '/EXPORT_VAR *([a-zA-Z0-9_]*)/{s/.*EXPORT_VAR *(\([a-zA-Z0-9_]*\)).*/defined '"$$u"' kernel \1/;p;}' \
| sort -u >$@
rm -f kernel_syms.input
CLEANFILES += kernel_syms.lst
@@ -256,61 +256,100 @@
CLEANFILES += grub_emu_init.c
endif
-# .lst files
-platform_DATA += moddep.lst
+# List files
+
+fs.lst: $(PP_FILES)
+ (for pp in $^; do \
+ b=`basename $$pp .pp`; \
+ if grep -v "^#" $$pp | grep '^ *grub_fs_register' >/dev/null 2>&1; then \
+ echo $$b; \
+ fi; \
+ done) | sort -u > $@
platform_DATA += fs.lst
+CLEANFILES += fs.lst
+
+command.lst: $(PP_FILES)
+ (for pp in $^; do \
+ b=`basename $$pp .pp`; \
+ grep -v "^#" $$pp | sed -n \
+ -e "/grub_register_command *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" \
+ -e "/grub_register_extcmd *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \
+ -e "/grub_register_command_p1 *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}"; \
+ done) | sort -u > $@
platform_DATA += command.lst
+CLEANFILES += command.lst
+
+partmap.lst: $(PP_FILES)
+ (for pp in $^; do \
+ b=`basename $$pp .pp`; \
+ if grep -v "^#" $$pp | grep '^ *grub_partition_map_register' >/dev/null 2>&1; then \
+ echo $$b; \
+ fi; \
+ done) | sort -u > $@
platform_DATA += partmap.lst
+CLEANFILES += partmap.lst
+
+handler.lst: $(PP_FILES)
+ (for pp in $^; do \
+ b=`basename $$pp .pp`; \
+ grep -v "^#" $$pp | sed -n \
+ -e "/grub_parser_register *( *\"/{s/.*( *\"\([^\"]*\)\".*/parser.\1: $$b/;p;}"; \
+ done) | sort -u > $@
platform_DATA += handler.lst
+CLEANFILES += handler.lst
+
+terminal.lst: $(PP_FILES)
+ (for pp in $^; do \
+ b=`basename $$pp .pp`; \
+ grep -v "^#" $$pp | sed -n \
+ -e "/grub_term_register_input *( *\"/{s/.*( *\"\([^\"]*\)\".*/i\1: $$b/;p;}" \
+ -e "/grub_term_register_output *( *\"/{s/.*( *\"\([^\"]*\)\".*/o\1: $$b/;p;}"; \
+ done) | sort -u > $@
platform_DATA += terminal.lst
+CLEANFILES += terminal.lst
+
+parttool.lst: $(PP_FILES)
+ (for pp in $^; do \
+ b=`basename $$pp .pp`; \
+ grep -v "^#" $$pp | sed -n \
+ -e "/grub_parttool_register *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}"; \
+ done) | sort -u > $@
platform_DATA += parttool.lst
+CLEANFILES += parttool.lst
+
+video.lst: $(PP_FILES)
+ (for pp in $^; do \
+ b=`basename $$pp .pp`; \
+ if grep -v "^#" $$pp | grep '^ *grub_video_register' >/dev/null 2>&1; then \
+ echo $$b; \
+ fi; \
+ done) | sort -u > $@
platform_DATA += video.lst
-platform_DATA += crypto.lst
-CLEANFILES += moddep.lst
-CLEANFILES += handler.lst
-CLEANFILES += terminal.lst
-CLEANFILES += parttool.lst
-CLEANFILES += video.lst
-CLEANFILES += crypto.lst
-
-fs.lst: $(FS_FILES)
- cat $^ /dev/null | sort | uniq > $@
-CLEANFILES += fs.lst
-
-command.lst: $(COMMAND_FILES)
- cat $^ /dev/null | sort | uniq > $@
-CLEANFILES += command.lst
-
-partmap.lst: $(PARTMAP_FILES)
- cat $^ /dev/null | sort | uniq > $@
-CLEANFILES += partmap.lst
-
-handler.lst: $(HANDLER_FILES)
- cat $^ /dev/null | sort | uniq > $@
-CLEANFILES += handler.lst
-
-terminal.lst: $(TERMINAL_FILES)
- cat $^ /dev/null | sort | uniq > $@
-CLEANFILES += terminal.lst
-
-parttool.lst: $(PARTTOOL_FILES)
- cat $^ /dev/null | sort | uniq > $@
-CLEANFILES += parttool.lst
-
-video.lst: $(VIDEO_FILES)
- cat $^ /dev/null | sort | uniq > $@
CLEANFILES += video.lst
# but, crypto.lst is simply copied
crypto.lst: $(srcdir)/lib/libgcrypt-grub/cipher/crypto.lst
cp $^ $@
+platform_DATA += crypto.lst
CLEANFILES += crypto.lst
+syminfo.lst: gensyminfo.sh kernel_syms.lst $(MODULE_FILES)
+ cat kernel_syms.lst > address@hidden
+ for m in $(MODULE_FILES); do \
+ sh $< $$m >> address@hidden || exit 1; \
+ done
+ mv address@hidden $@
+
# generate global module dependencies list
-moddep.lst: kernel_syms.lst genmoddep.awk $(DEF_FILES) $(UND_FILES)
- cat $(DEF_FILES) kernel_syms.lst /dev/null \
- | $(AWK) -f $(srcdir)/genmoddep.awk $(UND_FILES) > $@ \
- || (rm -f $@; exit 1)
+moddep.lst: syminfo.lst genmoddep.awk
+ cat $< | sort | awk -f $(srcdir)/genmoddep.awk > $@ || (rm -f $@; exit 1)
+platform_DATA += moddep.lst
+CLEANFILES += config.log syminfo.lst moddep.lst
+
+$(MOD_FILES): %.mod : genmod.sh moddep.lst %.module$(EXEEXT)
+ sh $^ $@
+platform_DATA += $(MOD_FILES)
+CLEANFILES += $(MOD_FILES)
if COND_i386_pc
if COND_ENABLE_EFIEMU
=== modified file 'grub-core/Makefile.core.def'
--- grub-core/Makefile.core.def 2010-08-23 07:53:56 +0000
+++ grub-core/Makefile.core.def 2010-08-29 11:13:07 +0000
@@ -1403,3 +1403,13 @@
name = datehook;
common = hook/datehook.c;
};
+
+script = {
+ name = gensyminfo.sh;
+ common = gensyminfo.sh.in;
+};
+
+script = {
+ name = genmod.sh;
+ common = genmod.sh.in;
+};
=== removed file 'grub-core/gencmdlist.sh'
--- grub-core/gencmdlist.sh 2010-05-06 06:04:04 +0000
+++ grub-core/gencmdlist.sh 1970-01-01 00:00:00 +0000
@@ -1,22 +0,0 @@
-#! /bin/sh
-#
-# Copyright (C) 2005,2009 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.
-
-# Read source code from stdin and detect command names.
-
-module=$1
-
-grep -v "^#" | sed -n \
- -e "/grub_register_command *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $module/;p;}" \
- -e "/grub_register_extcmd *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $module/;p;}" \
- -e "/grub_register_command_p1 *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $module/;p;}"
-
=== removed file 'grub-core/genfslist.sh'
--- grub-core/genfslist.sh 2010-05-06 06:04:04 +0000
+++ grub-core/genfslist.sh 1970-01-01 00:00:00 +0000
@@ -1,26 +0,0 @@
-#! /bin/sh
-#
-# Copyright (C) 2005,2008 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.
-
-# Read source code from stdin and detect fs names.
-
-module=$1
-
-# Ignore kernel.mod.
-if test $module = kernel; then
- exit
-fi
-
-# For now, this emits only a module name, if the module registers a filesystem.
-if grep -v "^#" | grep '^ *grub_fs_register' >/dev/null 2>&1; then
- echo $module
-fi
=== removed file 'grub-core/genhandlerlist.sh'
--- grub-core/genhandlerlist.sh 2010-05-06 06:04:04 +0000
+++ grub-core/genhandlerlist.sh 1970-01-01 00:00:00 +0000
@@ -1,19 +0,0 @@
-#! /bin/sh
-#
-# Copyright (C) 2009 Free Software Foundation, Inc.
-#
-# This script 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.
-
-# Read source code from stdin and detect command names.
-
-module=$1
-
-grep -v "^#" | sed -n \
- -e "/grub_parser_register *( *\"/{s/.*( *\"\([^\"]*\)\".*/parser.\1: $module/;p;}"
=== added file 'grub-core/genmod.sh.in'
--- grub-core/genmod.sh.in 1970-01-01 00:00:00 +0000
+++ grub-core/genmod.sh.in 2010-08-29 11:13:07 +0000
@@ -0,0 +1,73 @@
+#! /bin/sh -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 echo.module
+#
+
+moddep=$1
+infile=$2
+outfile=$3
+
+tmpfile=${outfile}.tmp
+modname=`echo $infile | sed -e 'address@hidden@@'`
+
+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 address@hidden:@@`
+
+# remove old files if any
+rm -f $tmpfile $outfile
+
+# stripout .modname and .moddeps sections from input module
+objcopy -R .modname -R .moddeps $infile $tmpfile
+
+# Attach .modname and .moddeps sections
+t1=`mktemp`
+printf "$modname\0" >$t1
+
+t2=`mktemp`
+for dep in $deps; do printf "$dep\0" >> $t2; done
+
+if test -n "$deps"; then
+ objcopy --add-section .modname=$t1 --add-section .moddeps=$t2 $tmpfile
+else
+ objcopy --add-section .modname=$t1 $tmpfile
+fi
+rm -f $t1 $t2
+
+if test address@hidden@ != x1; then
+ if ! test -z "@TARGET_OBJ2ELF@"; then
+ ./@TARGET_OBJ2ELF@ $tmpfile || exit 1
+ fi
+ if test address@hidden@ != xemu; then
+ @STRIP@ --strip-unneeded \
+ -K grub_mod_init -K grub_mod_fini \
+ -K _grub_mod_init -K _grub_mod_fini \
+ -R .note -R .comment $tmpfile || exit 1
+ fi
+else
+# XXX Test these Apple CC fixes
+ cp $tmpfile $tmpfile.bin
+ @OBJCONV@ address@hidden@ \
+ -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
=== modified file 'grub-core/genmoddep.awk'
--- grub-core/genmoddep.awk 2010-06-03 06:22:33 +0000
+++ grub-core/genmoddep.awk 2010-08-29 11:13:07 +0000
@@ -11,23 +11,28 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
-# Read defined symbols from stdin.
+# Read symbols' info from stdin.
BEGIN {
+ error = 0
+ lineno = 0;
while (getline <"/dev/stdin") {
- symtab[$1] = $2
- }
-}
-
-# The rest is undefined symbols.
-{
- module = $2
-
- if ($1 in symtab) {
- modtab[module] = modtab[module] " " symtab[$1];
- }
- else if ($1 != "__gnu_local_gp") {
- printf "%s in %s is not defined\n", $1, module >"/dev/stderr";
- error++;
+ lineno++;
+ if ($1 == "defined") {
+ symtab[$3] = $2;
+ modtab[$2] = "" modtab[$2]
+ } else if ($1 == "undefined") {
+ if ($3 in symtab)
+ modtab[$2] = modtab[$2] " " symtab[$3];
+ else if ($3 != "__gnu_local_gp") {
+ printf "%s in %s is not defined\n", $3, $2 >"/dev/stderr";
+ error++;
+ }
+ }
+ else {
+ printf "error: %u: unrecognized input format\n", lineno;
+ error++;
+ break;
+ }
}
}
=== removed file 'grub-core/genmodsrc.sh'
--- grub-core/genmodsrc.sh 2010-05-06 06:04:04 +0000
+++ grub-core/genmodsrc.sh 1970-01-01 00:00:00 +0000
@@ -1,47 +0,0 @@
-#! /bin/sh
-#
-# Copyright (C) 2002,2007 Free Software Foundation, Inc.
-#
-# This genmodsrc.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.
-
-set -e
-
-mod_name="$1"
-deps="$2"
-
-cat <.
- */
-
-#include
-
-EOF
-
-echo "GRUB_MOD_NAME(${mod_name});"
-
-for mod in `grep "^${mod_name}:" ${deps} | sed 's/^[^:]*://'`; do
- echo "GRUB_MOD_DEP(${mod});"
-done
=== removed file 'grub-core/genpartmaplist.sh'
--- grub-core/genpartmaplist.sh 2010-05-06 06:04:04 +0000
+++ grub-core/genpartmaplist.sh 1970-01-01 00:00:00 +0000
@@ -1,26 +0,0 @@
-#! /bin/sh
-#
-# Copyright (C) 2005, 2008 Free Software Foundation, Inc.
-#
-# This script 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.
-
-# Read source code from stdin and detect partmap names.
-
-module=$1
-
-# Ignore kernel.mod.
-if test $module = kernel; then
- exit
-fi
-
-# For now, this emits only a module name, if the module registers a partition map.
-if grep -v "^#" | grep '^ *grub_partition_map_register' >/dev/null 2>&1; then
- echo $module
-fi
=== removed file 'grub-core/genparttoollist.sh'
--- grub-core/genparttoollist.sh 2010-05-06 06:04:04 +0000
+++ grub-core/genparttoollist.sh 1970-01-01 00:00:00 +0000
@@ -1,19 +0,0 @@
-#! /bin/sh
-#
-# Copyright (C) 2009 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.
-
-# Read source code from stdin and detect parttool names.
-
-module=$1
-
-grep -v "^#" | sed -n \
- -e "/grub_parttool_register *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $module/;p;}"
=== added file 'grub-core/gensyminfo.sh.in'
--- grub-core/gensyminfo.sh.in 1970-01-01 00:00:00 +0000
+++ grub-core/gensyminfo.sh.in 2010-08-29 05:47:30 +0000
@@ -0,0 +1,34 @@
+#! /bin/sh -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:
+#
+# gensyms.sh normal.module
+#
+
+module=$1
+modname=`echo $module | sed -e 'address@hidden@@'`
+
+# Print all symbols defined by module
+if test address@hidden@ = x1; then
+ @NM@ -g -P -p $module | \
+ grep -E '^[a-zA-Z0-9_]* [TDS]' | \
+ sed "address@hidden([^ ]*\)address@hidden $modname address@hidden"
+else
+ @NM@ -g --defined-only -P -p $module | \
+ sed "address@hidden([^ ]*\)address@hidden $modname address@hidden"
+fi
+
+# Print all undefined symbols used by module
address@hidden@ -u -P -p $module | sed "address@hidden([^ ]*\)address@hidden $modname address@hidden"
=== removed file 'grub-core/genterminallist.sh'
--- grub-core/genterminallist.sh 2010-05-06 06:04:04 +0000
+++ grub-core/genterminallist.sh 1970-01-01 00:00:00 +0000
@@ -1,20 +0,0 @@
-#! /bin/sh
-#
-# Copyright (C) 2009,2010 Free Software Foundation, Inc.
-#
-# This script 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.
-
-# Read source code from stdin and detect command names.
-
-module=$1
-
-grep -v "^#" | sed -n \
- -e "/grub_term_register_input *( *\"/{s/.*( *\"\([^\"]*\)\".*/i\1: $module/;p;}" \
- -e "/grub_term_register_output *( *\"/{s/.*( *\"\([^\"]*\)\".*/o\1: $module/;p;}" \
=== removed file 'grub-core/genvideolist.sh'
--- grub-core/genvideolist.sh 2010-05-06 06:04:04 +0000
+++ grub-core/genvideolist.sh 1970-01-01 00:00:00 +0000
@@ -1,26 +0,0 @@
-#! /bin/sh
-#
-# Copyright (C) 2005,2008,2009 Free Software Foundation, Inc.
-#
-# This script 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.
-
-# Read source code from stdin and detect partmap names.
-
-module=$1
-
-# Ignore video.mod.
-if test $module = video; then
- exit
-fi
-
-# For now, this emits only a module name, if the module registers a partition map.
-if grep -v "^#" | grep '^ *grub_video_register' >/dev/null 2>&1; then
- echo $module
-fi
# Begin bundle
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
EnIL