Commit 297f778c authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://linux-sam.bkbits.net/kbuild

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 75392adf ce57f2a0
...@@ -58,14 +58,14 @@ MAKEMAN = $(PERL) $(srctree)/scripts/makeman ...@@ -58,14 +58,14 @@ MAKEMAN = $(PERL) $(srctree)/scripts/makeman
# The following rules are used to generate the .sgml documentation # The following rules are used to generate the .sgml documentation
# required to generate the final targets. (ps, pdf, html). # required to generate the final targets. (ps, pdf, html).
quiet_cmd_docproc = DOCPROC $@ quiet_cmd_docproc = DOCPROC $@
cmd_docproc = $(DOCPROC) doc $< >$@ cmd_docproc = SRCTREE=$(srctree)/ $(DOCPROC) doc $< >$@
define rule_docproc define rule_docproc
set -e; \ set -e; \
$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';) \ $(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';) \
$(cmd_$(1)); \ $(cmd_$(1)); \
( \ ( \
echo 'cmd_$@ := $(cmd_$(1))'; \ echo 'cmd_$@ := $(cmd_$(1))'; \
echo $@: `$(DOCPROC) depend $<`; \ echo $@: `SRCTREE=$(srctree) $(DOCPROC) depend $<`; \
) > $(dir $@).$(notdir $@).cmd ) > $(dir $@).$(notdir $@).cmd
endef endef
...@@ -129,6 +129,9 @@ quiet_cmd_db2html = DB2HTML $@ ...@@ -129,6 +129,9 @@ quiet_cmd_db2html = DB2HTML $@
# Rule to generate man files - output is placed in the man subdirectory # Rule to generate man files - output is placed in the man subdirectory
%.9: %.sgml %.9: %.sgml
ifneq ($(KBUILD_SRC),)
$(Q)mkdir -p $(objtree)/Documentation/DocBook/man
endif
$(SPLITMAN) $< $(objtree)/Documentation/DocBook/man "$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)" $(SPLITMAN) $< $(objtree)/Documentation/DocBook/man "$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)"
$(MAKEMAN) convert $(objtree)/Documentation/DocBook/man $< $(MAKEMAN) convert $(objtree)/Documentation/DocBook/man $<
......
...@@ -997,6 +997,21 @@ When kbuild executes the following steps are followed (roughly): ...@@ -997,6 +997,21 @@ When kbuild executes the following steps are followed (roughly):
option. When $(biarch) equals to y the expanded variables $(aflags-y) option. When $(biarch) equals to y the expanded variables $(aflags-y)
and $(cflags-y) will be assigned the values -a32 and -m32. and $(cflags-y) will be assigned the values -a32 and -m32.
cc-option-align
gcc version >= 3.0 shifted type of options used to speify
alignment of functions, loops etc. $(cc-option-align) whrn used
as prefix to the align options will select the right prefix:
gcc < 3.00
cc-option-align = -malign
gcc >= 3.00
cc-option-align = -falign
Example:
CFLAGS += $(cc-option-align)-functions=4
In the above example the option -falign-functions=4 is used for
gcc >= 3.00. For gcc < 3.00 -malign-functions=4 is used.
cc-version cc-version
cc-version return a numerical version of the $(CC) compiler version. cc-version return a numerical version of the $(CC) compiler version.
The format is <major><minor> where both are two digits. So for example The format is <major><minor> where both are two digits. So for example
......
...@@ -157,7 +157,7 @@ endif ...@@ -157,7 +157,7 @@ endif
LOCALVERSION = $(subst $(space),, \ LOCALVERSION = $(subst $(space),, \
$(shell cat /dev/null $(localversion-files)) \ $(shell cat /dev/null $(localversion-files)) \
$(subst ",,$(CONFIG_LOCALVERSION))) $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)$(LOCALVERSION) KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)$(LOCALVERSION)
...@@ -295,6 +295,11 @@ check_gcc = $(warning check_gcc is deprecated - use cc-option) \ ...@@ -295,6 +295,11 @@ check_gcc = $(warning check_gcc is deprecated - use cc-option) \
cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
> /dev/null 2>&1; then echo "y"; else echo "n"; fi;) > /dev/null 2>&1; then echo "y"; else echo "n"; fi;)
# cc-option-align
# Prefix align with either -falign or -malign
cc-option-align = $(subst -functions=0,,\
$(call cc-option,-falign-functions=0,-malign-functions=0))
# cc-version # cc-version
# Usage gcc-ver := $(call cc-version $(CC)) # Usage gcc-ver := $(call cc-version $(CC))
cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh \ cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh \
...@@ -379,6 +384,18 @@ RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CV ...@@ -379,6 +384,18 @@ RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CV
scripts_basic: scripts_basic:
$(Q)$(MAKE) $(build)=scripts/basic $(Q)$(MAKE) $(build)=scripts/basic
.PHONY: outputmakefile
# outputmakefile generate a Makefile to be placed in output directory, if
# using a seperate output directory. This allows convinient use
# of make in output directory
outputmakefile:
$(Q)if /usr/bin/env test ! $(srctree) -ef $(objtree); then \
$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) \
> $(objtree)/Makefile; \
echo ' GEN $(objtree)/Makefile'; \
fi
# To make sure we do not include .config for any of the *config targets # To make sure we do not include .config for any of the *config targets
# catch them early, and hand them over to scripts/kconfig/Makefile # catch them early, and hand them over to scripts/kconfig/Makefile
# It is allowed to specify more targets when calling make, including # It is allowed to specify more targets when calling make, including
...@@ -423,9 +440,9 @@ ifeq ($(config-targets),1) ...@@ -423,9 +440,9 @@ ifeq ($(config-targets),1)
# *config targets only - make sure prerequisites are updated, and descend # *config targets only - make sure prerequisites are updated, and descend
# in scripts/kconfig to make the *config target # in scripts/kconfig to make the *config target
config: scripts_basic FORCE config: scripts_basic outputmakefile FORCE
$(Q)$(MAKE) $(build)=scripts/kconfig $@ $(Q)$(MAKE) $(build)=scripts/kconfig $@
%config: scripts_basic FORCE %config: scripts_basic outputmakefile FORCE
$(Q)$(MAKE) $(build)=scripts/kconfig $@ $(Q)$(MAKE) $(build)=scripts/kconfig $@
else else
...@@ -486,7 +503,16 @@ else ...@@ -486,7 +503,16 @@ else
CFLAGS += -O2 CFLAGS += -O2
endif endif
ifndef CONFIG_FRAME_POINTER #Add align options if CONFIG_CC_* is not equal to 0
add-align = $(if $(filter-out 0,$($(1))),$(cc-option-align)$(2)=$($(1)))
CFLAGS += $(call add-align,CONFIG_CC_ALIGN_FUNCTIONS,-functions)
CFLAGS += $(call add-align,CONFIG_CC_ALIGN_LABELS,-labels)
CFLAGS += $(call add-align,CONFIG_CC_ALIGN_LOOPS,-loops)
CFLAGS += $(call add-align,CONFIG_CC_ALIGN_JUMPS,-jumps)
ifdef CONFIG_FRAME_POINTER
CFLAGS += -fno-omit-frame-pointer
else
CFLAGS += -fomit-frame-pointer CFLAGS += -fomit-frame-pointer
endif endif
...@@ -711,22 +737,12 @@ $(vmlinux-dirs): prepare-all scripts ...@@ -711,22 +737,12 @@ $(vmlinux-dirs): prepare-all scripts
.PHONY: prepare-all prepare prepare0 prepare1 prepare2 .PHONY: prepare-all prepare prepare0 prepare1 prepare2
# prepare 2 generate Makefile to be placed in output directory, if # prepare2 is used to check if we are building in a separate output directory,
# using a seperate output directory. This allows convinient use
# of make in output directory
prepare2:
$(Q)if /usr/bin/env test ! $(srctree) -ef $(objtree); then \
$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) \
> $(objtree)/Makefile; \
fi
# prepare1 is used to check if we are building in a separate output directory,
# and if so do: # and if so do:
# 1) Check that make has not been executed in the kernel src $(srctree) # 1) Check that make has not been executed in the kernel src $(srctree)
# 2) Create the include2 directory, used for the second asm symlink # 2) Create the include2 directory, used for the second asm symlink
prepare1: prepare2 prepare2:
ifneq ($(KBUILD_SRC),) ifneq ($(KBUILD_SRC),)
@echo ' Using $(srctree) as source for kernel' @echo ' Using $(srctree) as source for kernel'
$(Q)if [ -h $(srctree)/include/asm -o -f $(srctree)/.config ]; then \ $(Q)if [ -h $(srctree)/include/asm -o -f $(srctree)/.config ]; then \
...@@ -738,6 +754,9 @@ ifneq ($(KBUILD_SRC),) ...@@ -738,6 +754,9 @@ ifneq ($(KBUILD_SRC),)
$(Q)ln -fsn $(srctree)/include/asm-$(ARCH) include2/asm $(Q)ln -fsn $(srctree)/include/asm-$(ARCH) include2/asm
endif endif
# prepare1 creates a makefile if using a separate output directory
prepare1: prepare2 outputmakefile
prepare0: prepare1 include/linux/version.h include/asm include/config/MARKER prepare0: prepare1 include/linux/version.h include/asm include/config/MARKER
ifneq ($(KBUILD_MODULES),) ifneq ($(KBUILD_MODULES),)
$(Q)rm -rf $(MODVERDIR) $(Q)rm -rf $(MODVERDIR)
......
...@@ -25,7 +25,7 @@ CFLAGS += -pipe -msoft-float ...@@ -25,7 +25,7 @@ CFLAGS += -pipe -msoft-float
# prevent gcc from keeping the stack 16 byte aligned # prevent gcc from keeping the stack 16 byte aligned
CFLAGS += $(call cc-option,-mpreferred-stack-boundary=2) CFLAGS += $(call cc-option,-mpreferred-stack-boundary=2)
align := $(subst -functions=0,,$(call cc-option,-falign-functions=0,-malign-functions=0)) align := $(cc-option-align)
cflags-$(CONFIG_M386) += -march=i386 cflags-$(CONFIG_M386) += -march=i386
cflags-$(CONFIG_M486) += -march=i486 cflags-$(CONFIG_M486) += -march=i486
cflags-$(CONFIG_M586) += -march=i586 cflags-$(CONFIG_M586) += -march=i586
......
...@@ -96,7 +96,7 @@ void write_bugboot_header(int32_t out_fd, uint32_t boot_size) ...@@ -96,7 +96,7 @@ void write_bugboot_header(int32_t out_fd, uint32_t boot_size)
uint8_t header_block[HEADER_SIZE]; uint8_t header_block[HEADER_SIZE];
bug_boot_header_t *bbh = (bug_boot_header_t *)&header_block[0]; bug_boot_header_t *bbh = (bug_boot_header_t *)&header_block[0];
bzero(header_block, HEADER_SIZE); memset(header_block, 0, HEADER_SIZE);
/* Fill in the PPCBUG ROM boot header */ /* Fill in the PPCBUG ROM boot header */
strncpy(bbh->magic_word, "BOOT", 4); /* PPCBUG magic word */ strncpy(bbh->magic_word, "BOOT", 4); /* PPCBUG magic word */
......
...@@ -325,6 +325,43 @@ config SHMEM ...@@ -325,6 +325,43 @@ config SHMEM
option replaces shmem and tmpfs with the much simpler ramfs code, option replaces shmem and tmpfs with the much simpler ramfs code,
which may be appropriate on small systems without swap. which may be appropriate on small systems without swap.
config CC_ALIGN_FUNCTIONS
int "Function alignment"
default 0
help
Align the start of functions to the next power-of-two greater than n,
skipping up to n bytes. For instance, 32 aligns functions
to the next 32-byte boundary, but 24 would align to the next
32-byte boundary only if this can be done by skipping 23 bytes or less.
Zero means use compiler's default.
config CC_ALIGN_LABELS
int "Label alignment"
default 0
help
Align all branch targets to a power-of-two boundary, skipping
up to n bytes like ALIGN_FUNCTIONS. This option can easily
make code slower, because it must insert dummy operations for
when the branch target is reached in the usual flow of the code.
Zero means use compiler's default.
config CC_ALIGN_LOOPS
int "Loop alignment"
default 0
help
Align loops to a power-of-two boundary, skipping up to n bytes.
Zero means use compiler's default.
config CC_ALIGN_JUMPS
int "Jump alignment"
default 0
help
Align branch targets to a power-of-two boundary, for branch
targets where the targets can only be reached by jumping,
skipping up to n bytes like ALIGN_FUNCTIONS. In this case,
no dummy operations need be executed.
Zero means use compiler's default.
endmenu # General setup endmenu # General setup
config TINY_SHMEM config TINY_SHMEM
...@@ -397,7 +434,7 @@ config MODULE_SRCVERSION_ALL ...@@ -397,7 +434,7 @@ config MODULE_SRCVERSION_ALL
depends on MODULES depends on MODULES
help help
Modules which contain a MODULE_VERSION get an extra "srcversion" Modules which contain a MODULE_VERSION get an extra "srcversion"
field inserting into their modinfo section, which contains a field inserted into their modinfo section, which contains a
sum of the source files which made it. This helps maintainers sum of the source files which made it. This helps maintainers
see exactly which source was used to build a module (since see exactly which source was used to build a module (since
others sometimes change the module source without updating others sometimes change the module source without updating
......
...@@ -1834,6 +1834,16 @@ static inline int within(unsigned long addr, void *start, unsigned long size) ...@@ -1834,6 +1834,16 @@ static inline int within(unsigned long addr, void *start, unsigned long size)
} }
#ifdef CONFIG_KALLSYMS #ifdef CONFIG_KALLSYMS
/*
* This ignores the intensely annoying "mapping symbols" found
* in ARM ELF files: $a, $t and $d.
*/
static inline int is_arm_mapping_symbol(const char *str)
{
return str[0] == '$' && strchr("atd", str[1])
&& (str[2] == '\0' || str[2] == '.');
}
static const char *get_ksymbol(struct module *mod, static const char *get_ksymbol(struct module *mod,
unsigned long addr, unsigned long addr,
unsigned long *size, unsigned long *size,
...@@ -1858,11 +1868,13 @@ static const char *get_ksymbol(struct module *mod, ...@@ -1858,11 +1868,13 @@ static const char *get_ksymbol(struct module *mod,
* and inserted at a whim. */ * and inserted at a whim. */
if (mod->symtab[i].st_value <= addr if (mod->symtab[i].st_value <= addr
&& mod->symtab[i].st_value > mod->symtab[best].st_value && mod->symtab[i].st_value > mod->symtab[best].st_value
&& *(mod->strtab + mod->symtab[i].st_name) != '\0' ) && *(mod->strtab + mod->symtab[i].st_name) != '\0'
&& !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name))
best = i; best = i;
if (mod->symtab[i].st_value > addr if (mod->symtab[i].st_value > addr
&& mod->symtab[i].st_value < nextval && mod->symtab[i].st_value < nextval
&& *(mod->strtab + mod->symtab[i].st_name) != '\0') && *(mod->strtab + mod->symtab[i].st_name) != '\0'
&& !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name))
nextval = mod->symtab[i].st_value; nextval = mod->symtab[i].st_value;
} }
......
...@@ -46,7 +46,7 @@ config DEBUG_SLAB ...@@ -46,7 +46,7 @@ config DEBUG_SLAB
help help
Say Y here to have the kernel do limited verification on memory Say Y here to have the kernel do limited verification on memory
allocation as well as poisoning memory on free to catch use of freed allocation as well as poisoning memory on free to catch use of freed
memory. memory. This can make kmalloc/kfree-intensive workloads much slower.
config DEBUG_SPINLOCK config DEBUG_SPINLOCK
bool "Spinlock debugging" bool "Spinlock debugging"
......
...@@ -232,3 +232,30 @@ descend =$(Q)$(MAKE) -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build ob ...@@ -232,3 +232,30 @@ descend =$(Q)$(MAKE) -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build ob
# Usage: # Usage:
# $(Q)$(MAKE) $(build)=dir # $(Q)$(MAKE) $(build)=dir
build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
# filechk is used to check if the content of a generated file is updated.
# Sample usage:
# define filechk_sample
# echo $KERNELRELEASE
# endef
# version.h : Makefile
# $(call filechk,sample)
# The rule defined shall write to stdout the content of the new file.
# The existing file will be compared with the new one.
# - If no file exist it is created
# - If the content differ the new file is used
# - If they are equal no change, and no timestamp update
define filechk
$(Q)set -e; \
echo ' CHK $@'; \
mkdir -p $(dir $@); \
$(filechk_$(1)) $(2) > $@.tmp; \
if [ -r $@ ] && cmp -s $@ $@.tmp; then \
rm -f $@.tmp; \
else \
echo ' UPD $@'; \
mv -f $@.tmp $@; \
fi
endef
...@@ -19,7 +19,10 @@ __modinst: $(modules) ...@@ -19,7 +19,10 @@ __modinst: $(modules)
quiet_cmd_modules_install = INSTALL $@ quiet_cmd_modules_install = INSTALL $@
cmd_modules_install = mkdir -p $(2); cp $@ $(2) cmd_modules_install = mkdir -p $(2); cp $@ $(2)
modinst_dir = $(MODLIB)/$(if $(filter ../% /%,$@),extra/,kernel/$(@D)) # Modules built outside the kernel source tree go into extra by default
INSTALL_MOD_DIR ?= extra
modinst_dir = $(MODLIB)/$(if $(filter ../% /%,$@),$(INSTALL_MOD_DIR)/,kernel/$(@D))
$(modules): $(modules):
$(call cmd,modules_install,$(modinst_dir)) $(call cmd,modules_install,$(modinst_dir))
...@@ -52,7 +52,7 @@ FILEONLY *internalfunctions; ...@@ -52,7 +52,7 @@ FILEONLY *internalfunctions;
FILEONLY *externalfunctions; FILEONLY *externalfunctions;
FILEONLY *symbolsonly; FILEONLY *symbolsonly;
typedef void FILELINE(char * file, char * line); typedef void FILELINE(char * file, signed char * line);
FILELINE * singlefunctions; FILELINE * singlefunctions;
FILELINE * entity_system; FILELINE * entity_system;
...@@ -79,6 +79,7 @@ void exec_kernel_doc(char **svec) ...@@ -79,6 +79,7 @@ void exec_kernel_doc(char **svec)
{ {
pid_t pid; pid_t pid;
int ret; int ret;
char real_filename[PATH_MAX + 1];
/* Make sure output generated so far are flushed */ /* Make sure output generated so far are flushed */
fflush(stdout); fflush(stdout);
switch(pid=fork()) { switch(pid=fork()) {
...@@ -86,8 +87,13 @@ void exec_kernel_doc(char **svec) ...@@ -86,8 +87,13 @@ void exec_kernel_doc(char **svec)
perror("fork"); perror("fork");
exit(1); exit(1);
case 0: case 0:
execvp(KERNELDOCPATH KERNELDOC, svec); memset(real_filename, 0, sizeof(real_filename));
perror("exec " KERNELDOCPATH KERNELDOC); strncat(real_filename, getenv("SRCTREE"), PATH_MAX);
strncat(real_filename, KERNELDOCPATH KERNELDOC,
PATH_MAX - strlen(real_filename));
execvp(real_filename, svec);
fprintf(stderr, "exec ");
perror(real_filename);
exit(1); exit(1);
default: default:
waitpid(pid, &ret ,0); waitpid(pid, &ret ,0);
...@@ -142,9 +148,9 @@ struct symfile * filename_exist(char * filename) ...@@ -142,9 +148,9 @@ struct symfile * filename_exist(char * filename)
* Files are separated by tabs. * Files are separated by tabs.
*/ */
void adddep(char * file) { printf("\t%s", file); } void adddep(char * file) { printf("\t%s", file); }
void adddep2(char * file, char * line) { line = line; adddep(file); } void adddep2(char * file, signed char * line) { line = line; adddep(file); }
void noaction(char * line) { line = line; } void noaction(char * line) { line = line; }
void noaction2(char * file, char * line) { file = file; line = line; } void noaction2(char * file, signed char * line) { file = file; line = line; }
/* Echo the line without further action */ /* Echo the line without further action */
void printline(char * line) { printf("%s", line); } void printline(char * line) { printf("%s", line); }
...@@ -160,16 +166,21 @@ void find_export_symbols(char * filename) ...@@ -160,16 +166,21 @@ void find_export_symbols(char * filename)
struct symfile *sym; struct symfile *sym;
char line[MAXLINESZ]; char line[MAXLINESZ];
if (filename_exist(filename) == NULL) { if (filename_exist(filename) == NULL) {
char real_filename[PATH_MAX + 1];
memset(real_filename, 0, sizeof(real_filename));
strncat(real_filename, getenv("SRCTREE"), PATH_MAX);
strncat(real_filename, filename,
PATH_MAX - strlen(real_filename));
sym = add_new_file(filename); sym = add_new_file(filename);
fp = fopen(filename, "r"); fp = fopen(real_filename, "r");
if (fp == NULL) if (fp == NULL)
{ {
fprintf(stderr, "docproc: "); fprintf(stderr, "docproc: ");
perror(filename); perror(real_filename);
} }
while(fgets(line, MAXLINESZ, fp)) { while(fgets(line, MAXLINESZ, fp)) {
char *p; signed char *p;
char *e; signed char *e;
if (((p = strstr(line, "EXPORT_SYMBOL_GPL")) != 0) || if (((p = strstr(line, "EXPORT_SYMBOL_GPL")) != 0) ||
((p = strstr(line, "EXPORT_SYMBOL")) != 0)) { ((p = strstr(line, "EXPORT_SYMBOL")) != 0)) {
/* Skip EXPORT_SYMBOL{_GPL} */ /* Skip EXPORT_SYMBOL{_GPL} */
...@@ -242,7 +253,7 @@ void extfunc(char * filename) { docfunctions(filename, FUNCTION); } ...@@ -242,7 +253,7 @@ void extfunc(char * filename) { docfunctions(filename, FUNCTION); }
* Call kernel-doc with the following parameters: * Call kernel-doc with the following parameters:
* kernel-doc -docbook -function function1 [-function function2] * kernel-doc -docbook -function function1 [-function function2]
*/ */
void singfunc(char * filename, char * line) void singfunc(char * filename, signed char * line)
{ {
char *vec[200]; /* Enough for specific functions */ char *vec[200]; /* Enough for specific functions */
int i, idx = 0; int i, idx = 0;
...@@ -279,7 +290,7 @@ void singfunc(char * filename, char * line) ...@@ -279,7 +290,7 @@ void singfunc(char * filename, char * line)
void parse_file(FILE *infile) void parse_file(FILE *infile)
{ {
char line[MAXLINESZ]; char line[MAXLINESZ];
char * s; signed char * s;
while(fgets(line, MAXLINESZ, infile)) { while(fgets(line, MAXLINESZ, infile)) {
if (line[0] == '!') { if (line[0] == '!') {
s = line + 2; s = line + 2;
......
...@@ -217,12 +217,12 @@ void use_config(char *m, int slen) ...@@ -217,12 +217,12 @@ void use_config(char *m, int slen)
printf(" $(wildcard include/config/%s.h) \\\n", s); printf(" $(wildcard include/config/%s.h) \\\n", s);
} }
void parse_config_file(char *map, size_t len) void parse_config_file(signed char *map, size_t len)
{ {
int *end = (int *) (map + len); int *end = (int *) (map + len);
/* start at +1, so that p can never be < map */ /* start at +1, so that p can never be < map */
int *m = (int *) map + 1; int *m = (int *) map + 1;
char *p, *q; signed char *p, *q;
for (; m < end; m++) { for (; m < end; m++) {
if (*m == INT_CONF) { p = (char *) m ; goto conf; } if (*m == INT_CONF) { p = (char *) m ; goto conf; }
...@@ -291,9 +291,9 @@ void do_config_file(char *filename) ...@@ -291,9 +291,9 @@ void do_config_file(char *filename)
void parse_dep_file(void *map, size_t len) void parse_dep_file(void *map, size_t len)
{ {
char *m = map; signed char *m = map;
char *end = m + len; signed char *end = m + len;
char *p; signed char *p;
char s[PATH_MAX]; char s[PATH_MAX];
p = strchr(m, ':'); p = strchr(m, ':');
......
...@@ -104,7 +104,7 @@ int main(int argc, const char * argv []) ...@@ -104,7 +104,7 @@ int main(int argc, const char * argv [])
/* Read config lines. */ /* Read config lines. */
while (fgets(line, buffer_size, fp_config)) while (fgets(line, buffer_size, fp_config))
{ {
const char * str_config; const signed char * str_config;
int is_same; int is_same;
int itarget; int itarget;
......
...@@ -33,7 +33,7 @@ void usage(char *argv0) ...@@ -33,7 +33,7 @@ void usage(char *argv0)
int getunicode(char **p0) int getunicode(char **p0)
{ {
char *p = *p0; unsigned char *p = *p0;
while (*p == ' ' || *p == '\t') while (*p == ' ' || *p == '\t')
p++; p++;
......
...@@ -2,24 +2,25 @@ ...@@ -2,24 +2,25 @@
# Copyright (C) Martin Schlemmer <azarah@nosferatu.za.org> # Copyright (C) Martin Schlemmer <azarah@nosferatu.za.org>
# Released under the terms of the GNU GPL # Released under the terms of the GNU GPL
# #
# A script to generate newline separated entries (to stdout) from a directory's # Generate a newline separated list of entries from the file/directory pointed
# contents suitable for use as a cpio_list for gen_init_cpio. # out by the environment variable: CONFIG_INITRAMFS_SOURCE
# #
# Arguements: $1 -- the source directory # If CONFIG_INITRAMFS_SOURCE is non-existing then generate a small dummy file.
#
# The output is suitable for gen_init_cpio as found in usr/Makefile.
# #
# TODO: Add support for symlinks, sockets and pipes when gen_init_cpio # TODO: Add support for symlinks, sockets and pipes when gen_init_cpio
# supports them. # supports them.
usage() { simple_initramfs() {
echo "Usage: $0 initramfs-source-dir" cat <<-EOF
exit 1 # This is a very simple initramfs
}
srcdir=$(echo "$1" | sed -e 's://*:/:g')
if [ "$#" -gt 1 -o ! -d "${srcdir}" ]; then dir /dev 0755 0 0
usage nod /dev/console 0600 0 0 c 5 1
fi dir /root 0700 0 0
EOF
}
filetype() { filetype() {
local argv1="$1" local argv1="$1"
...@@ -76,9 +77,27 @@ parse() { ...@@ -76,9 +77,27 @@ parse() {
return 0 return 0
} }
find "${srcdir}" -printf "%p %m %U %G\n" | \ if [ -z $1 ]; then
while read x; do simple_initramfs
elif [ -f $1 ]; then
cat $1
elif [ -d $1 ]; then
srcdir=$(echo "$1" | sed -e 's://*:/:g')
dirlist=$(find "${srcdir}" -printf "%p %m %U %G\n" 2>/dev/null)
# If $dirlist is only one line, then the directory is empty
if [ "$(echo "${dirlist}" | wc -l)" -gt 1 ]; then
echo "${dirlist}" | \
while read x; do
parse ${x} parse ${x}
done done
else
# Failsafe in case directory is empty
simple_initramfs
fi
else
echo " $0: Cannot open '$1' (CONFIG_INITRAMFS_SOURCE)" >&2
exit 1
fi
exit 0 exit 0
...@@ -97,6 +97,17 @@ usage(void) ...@@ -97,6 +97,17 @@ usage(void)
exit(1); exit(1);
} }
/*
* This ignores the intensely annoying "mapping symbols" found
* in ARM ELF files: $a, $t and $d.
*/
static inline int
is_arm_mapping_symbol(const char *str)
{
return str[0] == '$' && strchr("atd", str[1])
&& (str[2] == '\0' || str[2] == '.');
}
static int static int
read_symbol(FILE *in, struct sym_entry *s) read_symbol(FILE *in, struct sym_entry *s)
{ {
...@@ -121,7 +132,8 @@ read_symbol(FILE *in, struct sym_entry *s) ...@@ -121,7 +132,8 @@ read_symbol(FILE *in, struct sym_entry *s)
_sinittext = s->addr; _sinittext = s->addr;
else if (strcmp(str, "_einittext") == 0) else if (strcmp(str, "_einittext") == 0)
_einittext = s->addr; _einittext = s->addr;
else if (toupper(s->type) == 'A' || toupper(s->type) == 'U') else if (toupper(s->type) == 'A' || toupper(s->type) == 'U' ||
is_arm_mapping_symbol(str))
return -1; return -1;
/* include the type field in the symbol name, so that it gets /* include the type field in the symbol name, so that it gets
......
...@@ -31,14 +31,14 @@ char *defconfig_file; ...@@ -31,14 +31,14 @@ char *defconfig_file;
static int indent = 1; static int indent = 1;
static int valid_stdin = 1; static int valid_stdin = 1;
static int conf_cnt; static int conf_cnt;
static char line[128]; static signed char line[128];
static struct menu *rootEntry; static struct menu *rootEntry;
static char nohelp_text[] = "Sorry, no help available for this option yet.\n"; static char nohelp_text[] = "Sorry, no help available for this option yet.\n";
static void strip(char *str) static void strip(signed char *str)
{ {
char *p = str; signed char *p = str;
int l; int l;
while ((isspace(*p))) while ((isspace(*p)))
......
...@@ -27,10 +27,10 @@ const char *conf_confnames[] = { ...@@ -27,10 +27,10 @@ const char *conf_confnames[] = {
NULL, NULL,
}; };
static char *conf_expand_value(const char *in) static char *conf_expand_value(const signed char *in)
{ {
struct symbol *sym; struct symbol *sym;
const char *src; const signed char *src;
static char res_value[SYMBOL_MAXLENGTH]; static char res_value[SYMBOL_MAXLENGTH];
char *dst, name[SYMBOL_MAXLENGTH]; char *dst, name[SYMBOL_MAXLENGTH];
...@@ -270,6 +270,8 @@ int conf_write(const char *name) ...@@ -270,6 +270,8 @@ int conf_write(const char *name)
int type, l; int type, l;
const char *str; const char *str;
time_t now; time_t now;
int use_timestamp = 1;
char *env;
dirname[0] = 0; dirname[0] = 0;
if (name && name[0]) { if (name && name[0]) {
...@@ -293,7 +295,7 @@ int conf_write(const char *name) ...@@ -293,7 +295,7 @@ int conf_write(const char *name)
} else } else
basename = conf_def_filename; basename = conf_def_filename;
sprintf(newname, "%s.tmpconfig.%d", dirname, getpid()); sprintf(newname, "%s.tmpconfig.%d", dirname, (int)getpid());
out = fopen(newname, "w"); out = fopen(newname, "w");
if (!out) if (!out)
return 1; return 1;
...@@ -306,22 +308,28 @@ int conf_write(const char *name) ...@@ -306,22 +308,28 @@ int conf_write(const char *name)
sym = sym_lookup("KERNELRELEASE", 0); sym = sym_lookup("KERNELRELEASE", 0);
sym_calc_value(sym); sym_calc_value(sym);
time(&now); time(&now);
env = getenv("KCONFIG_NOTIMESTAMP");
if (env && *env)
use_timestamp = 0;
fprintf(out, "#\n" fprintf(out, "#\n"
"# Automatically generated make config: don't edit\n" "# Automatically generated make config: don't edit\n"
"# Linux kernel version: %s\n" "# Linux kernel version: %s\n"
"# %s" "%s%s"
"#\n", "#\n",
sym_get_string_value(sym), sym_get_string_value(sym),
ctime(&now)); use_timestamp ? "# " : "",
use_timestamp ? ctime(&now) : "");
if (out_h) if (out_h)
fprintf(out_h, "/*\n" fprintf(out_h, "/*\n"
" * Automatically generated C config: don't edit\n" " * Automatically generated C config: don't edit\n"
" * Linux kernel version: %s\n" " * Linux kernel version: %s\n"
" * %s" "%s%s"
" */\n" " */\n"
"#define AUTOCONF_INCLUDED\n", "#define AUTOCONF_INCLUDED\n",
sym_get_string_value(sym), sym_get_string_value(sym),
ctime(&now)); use_timestamp ? " * " : "",
use_timestamp ? ctime(&now) : "");
if (!sym_change_count) if (!sym_change_count)
sym_clear_all_valid(); sym_clear_all_valid();
......
...@@ -82,8 +82,8 @@ save_config_help[] = ...@@ -82,8 +82,8 @@ save_config_help[] =
"leave this blank.\n" "leave this blank.\n"
; ;
static char buf[4096], *bufptr = buf; static signed char buf[4096], *bufptr = buf;
static char input_buf[4096]; static signed char input_buf[4096];
static char filename[PATH_MAX+1] = ".config"; static char filename[PATH_MAX+1] = ".config";
static char *args[1024], **argptr = args; static char *args[1024], **argptr = args;
static int indent; static int indent;
......
...@@ -421,7 +421,7 @@ tristate sym_toggle_tristate_value(struct symbol *sym) ...@@ -421,7 +421,7 @@ tristate sym_toggle_tristate_value(struct symbol *sym)
bool sym_string_valid(struct symbol *sym, const char *str) bool sym_string_valid(struct symbol *sym, const char *str)
{ {
char ch; signed char ch;
switch (sym->type) { switch (sym->type) {
case S_STRING: case S_STRING:
......
...@@ -1531,7 +1531,7 @@ sub process_state3_type($$) { ...@@ -1531,7 +1531,7 @@ sub process_state3_type($$) {
} }
sub process_file($) { sub process_file($) {
my ($file) = @_; my ($file) = "$ENV{'SRCTREE'}@_";
my $identifier; my $identifier;
my $func; my $func;
my $initial_section_counter = $section_counter; my $initial_section_counter = $section_counter;
......
...@@ -40,5 +40,5 @@ ...@@ -40,5 +40,5 @@
# so we just ignore them to let readprofile continue to work. # so we just ignore them to let readprofile continue to work.
# (At least sparc64 has __crc_ in the middle). # (At least sparc64 has __crc_ in the middle).
$NM -n $1 | grep -v '\( [aUw] \)\|\(__crc_\)' > $2 $NM -n $1 | grep -v '\( [aUw] \)\|\(__crc_\)\|\( \$[adt]\)' > $2
...@@ -12,16 +12,21 @@ ...@@ -12,16 +12,21 @@
#include "modpost.h" #include "modpost.h"
/* We use the ELF typedefs, since we can't rely on stdint.h being present. */ /* We use the ELF typedefs for kernel_ulong_t but bite the bullet and
* use either stdint.h or inttypes.h for the rest. */
#if KERNEL_ELFCLASS == ELFCLASS32 #if KERNEL_ELFCLASS == ELFCLASS32
typedef Elf32_Addr kernel_ulong_t; typedef Elf32_Addr kernel_ulong_t;
#else #else
typedef Elf64_Addr kernel_ulong_t; typedef Elf64_Addr kernel_ulong_t;
#endif #endif
#ifdef __sun__
#include <inttypes.h>
#else
#include <stdint.h>
#endif
typedef Elf32_Word __u32; typedef uint32_t __u32;
typedef Elf32_Half __u16; typedef uint16_t __u16;
typedef unsigned char __u8; typedef unsigned char __u8;
/* Big exception to the "don't include kernel headers into userspace, which /* Big exception to the "don't include kernel headers into userspace, which
......
...@@ -219,7 +219,7 @@ get_next_line(unsigned long *pos, void *file, unsigned long size) ...@@ -219,7 +219,7 @@ get_next_line(unsigned long *pos, void *file, unsigned long size)
static char line[4096]; static char line[4096];
int skip = 1; int skip = 1;
size_t len = 0; size_t len = 0;
char *p = (char *)file + *pos; signed char *p = (char *)file + *pos;
char *s = line; char *s = line;
for (; *pos < size ; (*pos)++) for (; *pos < size ; (*pos)++)
......
...@@ -252,9 +252,9 @@ static int parse_comment(const char *file, unsigned long len) ...@@ -252,9 +252,9 @@ static int parse_comment(const char *file, unsigned long len)
} }
/* FIXME: Handle .s files differently (eg. # starts comments) --RR */ /* FIXME: Handle .s files differently (eg. # starts comments) --RR */
static int parse_file(const char *fname, struct md4_ctx *md) static int parse_file(const signed char *fname, struct md4_ctx *md)
{ {
char *file; signed char *file;
unsigned long i, len; unsigned long i, len;
file = grab_file(fname, &len); file = grab_file(fname, &len);
...@@ -332,7 +332,7 @@ static int parse_source_files(const char *objfile, struct md4_ctx *md) ...@@ -332,7 +332,7 @@ static int parse_source_files(const char *objfile, struct md4_ctx *md)
Sum all files in the same dir or subdirs. Sum all files in the same dir or subdirs.
*/ */
while ((line = get_next_line(&pos, file, flen)) != NULL) { while ((line = get_next_line(&pos, file, flen)) != NULL) {
char* p = line; signed char* p = line;
if (strncmp(line, "deps_", sizeof("deps_")-1) == 0) { if (strncmp(line, "deps_", sizeof("deps_")-1) == 0) {
check_files = 1; check_files = 1;
continue; continue;
...@@ -456,7 +456,7 @@ static void write_version(const char *filename, const char *sum, ...@@ -456,7 +456,7 @@ static void write_version(const char *filename, const char *sum,
close(fd); close(fd);
} }
static int strip_rcs_crap(char *version) static int strip_rcs_crap(signed char *version)
{ {
unsigned int len, full_len; unsigned int len, full_len;
......
...@@ -3,7 +3,7 @@ obj-y := initramfs_data.o ...@@ -3,7 +3,7 @@ obj-y := initramfs_data.o
hostprogs-y := gen_init_cpio hostprogs-y := gen_init_cpio
clean-files := initramfs_data.cpio.gz clean-files := initramfs_data.cpio.gz initramfs_list
# If you want a different list of files in the initramfs_data.cpio # If you want a different list of files in the initramfs_data.cpio
# then you can either overwrite the cpio_list in this directory # then you can either overwrite the cpio_list in this directory
...@@ -23,28 +23,17 @@ $(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio.gz FORCE ...@@ -23,28 +23,17 @@ $(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio.gz FORCE
# Commented out for now # Commented out for now
# initramfs-y := $(obj)/root/hello # initramfs-y := $(obj)/root/hello
quiet_cmd_gen_list = GEN_INITRAMFS_LIST $@ filechk_initramfs_list = $(CONFIG_SHELL) \
cmd_gen_list = $(shell \ $(srctree)/scripts/gen_initramfs_list.sh $(CONFIG_INITRAMFS_SOURCE)
if test -f $(CONFIG_INITRAMFS_SOURCE); then \
if [ $(CONFIG_INITRAMFS_SOURCE) != $@ ]; then \
echo 'cp -f $(CONFIG_INITRAMFS_SOURCE) $@'; \
else \
echo 'echo Using shipped $@'; \
fi; \
elif test -d $(CONFIG_INITRAMFS_SOURCE); then \
echo 'scripts/gen_initramfs_list.sh $(CONFIG_INITRAMFS_SOURCE) > $@'; \
else \
echo 'echo Using shipped $@'; \
fi)
$(obj)/initramfs_list: FORCE
$(INITRAMFS_LIST): FORCE $(call filechk,initramfs_list)
$(call cmd,gen_list)
quiet_cmd_cpio = CPIO $@ quiet_cmd_cpio = CPIO $@
cmd_cpio = ./$< $(INITRAMFS_LIST) > $@ cmd_cpio = ./$< $(obj)/initramfs_list > $@
$(obj)/initramfs_data.cpio: $(obj)/gen_init_cpio $(initramfs-y) $(INITRAMFS_LIST) FORCE $(obj)/initramfs_data.cpio: $(obj)/gen_init_cpio \
$(initramfs-y) $(obj)/initramfs_list FORCE
$(call if_changed,cpio) $(call if_changed,cpio)
targets += initramfs_data.cpio targets += initramfs_data.cpio
......
# This is a very simple initramfs - mostly preliminary for future expansion
dir /dev 0755 0 0
nod /dev/console 0600 0 0 c 5 1
dir /root 0700 0 0
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment