diff options
-rw-r--r-- | arch/cris/Makefile | 61 | ||||
-rw-r--r-- | arch/cris/arch-v10/vmlinux.lds.S | 118 | ||||
-rw-r--r-- | arch/cris/arch-v32/boot/compressed/head.S | 16 | ||||
-rw-r--r-- | arch/cris/arch-v32/kernel/head.S | 20 | ||||
-rw-r--r-- | arch/cris/kernel/vmlinux.lds.S (renamed from arch/cris/arch-v32/vmlinux.lds.S) | 44 |
5 files changed, 81 insertions, 178 deletions
diff --git a/arch/cris/Makefile b/arch/cris/Makefile index 241e35bc3b59..3662cfb7b61d 100644 --- a/arch/cris/Makefile +++ b/arch/cris/Makefile | |||
@@ -23,7 +23,8 @@ mach-$(CONFIG_ETRAXFS) := fs | |||
23 | 23 | ||
24 | ifneq ($(arch-y),) | 24 | ifneq ($(arch-y),) |
25 | SARCH := arch-$(arch-y) | 25 | SARCH := arch-$(arch-y) |
26 | inc := -Iarch/cris/include/arch-$(arch-y) -Iarch/cris/include/arch-$(arch-y)/arch | 26 | inc := -Iarch/cris/include/$(SARCH) |
27 | inc += -Iarch/cris/include/$(SARCH)/arch | ||
27 | else | 28 | else |
28 | SARCH := | 29 | SARCH := |
29 | inc := | 30 | inc := |
@@ -52,72 +53,48 @@ KBUILD_CFLAGS := $(subst -fomit-frame-pointer,,$(KBUILD_CFLAGS)) -g | |||
52 | KBUILD_CFLAGS += -fno-omit-frame-pointer | 53 | KBUILD_CFLAGS += -fno-omit-frame-pointer |
53 | endif | 54 | endif |
54 | 55 | ||
55 | head-y := arch/$(ARCH)/$(SARCH)/kernel/head.o | 56 | head-y := arch/cris/$(SARCH)/kernel/head.o |
56 | 57 | ||
57 | LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS) -print-file-name=libgcc.a) | 58 | LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS) -print-file-name=libgcc.a) |
58 | 59 | ||
59 | core-y += arch/$(ARCH)/kernel/ arch/$(ARCH)/mm/ | 60 | core-y += arch/cris/kernel/ arch/cris/mm/ |
60 | core-y += arch/$(ARCH)/$(SARCH)/kernel/ arch/$(ARCH)/$(SARCH)/mm/ | 61 | core-y += arch/cris/$(SARCH)/kernel/ arch/cris/$(SARCH)/mm/ |
61 | ifdef CONFIG_ETRAX_ARCH_V32 | 62 | ifdef CONFIG_ETRAX_ARCH_V32 |
62 | core-y += arch/$(ARCH)/$(SARCH)/$(MACH)/ | 63 | core-y += arch/cris/$(SARCH)/$(MACH)/ |
63 | endif | 64 | endif |
64 | drivers-y += arch/$(ARCH)/$(SARCH)/drivers/ | 65 | drivers-y += arch/cris/$(SARCH)/drivers/ |
65 | libs-y += arch/$(ARCH)/$(SARCH)/lib/ $(LIBGCC) | 66 | libs-y += arch/cris/$(SARCH)/lib/ $(LIBGCC) |
66 | 67 | ||
67 | # cris source path | 68 | # cris source path |
68 | SRC_ARCH = $(srctree)/arch/$(ARCH) | 69 | SRC_ARCH = $(srctree)/arch/cris |
69 | # cris object files path | 70 | # cris object files path |
70 | OBJ_ARCH = $(objtree)/arch/$(ARCH) | 71 | OBJ_ARCH = $(objtree)/arch/cris |
71 | 72 | ||
72 | boot := arch/$(ARCH)/boot | 73 | boot := arch/cris/$(SARCH)/boot |
73 | MACHINE := arch/$(ARCH)/$(SARCH) | 74 | MACHINE := arch/cris/$(SARCH) |
74 | 75 | ||
75 | all: zImage | 76 | all: zImage |
76 | 77 | ||
77 | zImage Image: vmlinux | 78 | zImage Image: vmlinux |
78 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ | 79 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ |
79 | 80 | ||
80 | archprepare: $(SRC_ARCH)/.links FORCE | 81 | archprepare: |
81 | |||
82 | # Create some links to make all tools happy | ||
83 | $(SRC_ARCH)/.links: | ||
84 | @rm -rf $(SRC_ARCH)/drivers | ||
85 | @ln -sfn $(SARCH)/drivers $(SRC_ARCH)/drivers | ||
86 | @rm -rf $(SRC_ARCH)/boot | ||
87 | @ln -sfn $(SARCH)/boot $(SRC_ARCH)/boot | ||
88 | @rm -rf $(SRC_ARCH)/lib | ||
89 | @ln -sfn $(SARCH)/lib $(SRC_ARCH)/lib | ||
90 | @rm -f $(SRC_ARCH)/arch/mach | ||
91 | @rm -rf $(SRC_ARCH)/arch | ||
92 | @ln -sfn $(SARCH) $(SRC_ARCH)/arch | ||
93 | ifdef CONFIG_ETRAX_ARCH_V32 | ||
94 | @ln -sfn ../$(SARCH)/$(MACH) $(SRC_ARCH)/arch/mach | ||
95 | endif | ||
96 | @rm -rf $(SRC_ARCH)/kernel/vmlinux.lds.S | ||
97 | @ln -sfn ../$(SARCH)/vmlinux.lds.S $(SRC_ARCH)/kernel/vmlinux.lds.S | ||
98 | @touch $@ | ||
99 | 82 | ||
100 | archclean: | 83 | archclean: |
101 | $(Q)if [ -e arch/$(ARCH)/boot ]; then \ | 84 | $(Q)if [ -e arch/cris/$(SARCH)/boot ]; then \ |
102 | $(MAKE) $(clean)=arch/$(ARCH)/boot; \ | 85 | $(MAKE) $(clean)=arch/cris/$(SARCH)/boot; \ |
103 | fi | 86 | fi |
104 | 87 | ||
105 | CLEAN_FILES += \ | 88 | CLEAN_FILES += \ |
106 | $(MACHINE)/boot/zImage \ | 89 | $(MACHINE)/boot/zImage \ |
107 | $(MACHINE)/boot/compressed/decompress.bin \ | 90 | $(MACHINE)/boot/compressed/decompress.bin \ |
108 | $(MACHINE)/boot/compressed/piggy.gz \ | 91 | $(MACHINE)/boot/compressed/piggy.gz \ |
109 | $(MACHINE)/boot/rescue/rescue.bin \ | 92 | $(MACHINE)/boot/rescue/rescue.bin |
110 | $(SRC_ARCH)/.links | ||
111 | 93 | ||
112 | MRPROPER_FILES += \ | ||
113 | $(SRC_ARCH)/drivers \ | ||
114 | $(SRC_ARCH)/boot \ | ||
115 | $(SRC_ARCH)/lib \ | ||
116 | $(SRC_ARCH)/arch \ | ||
117 | $(SRC_ARCH)/kernel/vmlinux.lds.S | ||
118 | 94 | ||
95 | # MRPROPER_FILES += | ||
119 | 96 | ||
120 | define archhelp | 97 | define archhelp |
121 | echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)' | 98 | echo '* zImage - Compressed kernel image (arch/cris/boot/zImage)' |
122 | echo '* Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' | 99 | echo '* Image - Uncompressed kernel image (arch/cris/boot/Image)' |
123 | endef | 100 | endef |
diff --git a/arch/cris/arch-v10/vmlinux.lds.S b/arch/cris/arch-v10/vmlinux.lds.S deleted file mode 100644 index 93c9f0ea286b..000000000000 --- a/arch/cris/arch-v10/vmlinux.lds.S +++ /dev/null | |||
@@ -1,118 +0,0 @@ | |||
1 | /* ld script to make the Linux/CRIS kernel | ||
2 | * Authors: Bjorn Wesen (bjornw@axis.com) | ||
3 | * | ||
4 | * It is VERY DANGEROUS to fiddle around with the symbols in this | ||
5 | * script. It is for example quite vital that all generated sections | ||
6 | * that are used are actually named here, otherwise the linker will | ||
7 | * put them at the end, where the init stuff is which is FREED after | ||
8 | * the kernel has booted. | ||
9 | */ | ||
10 | |||
11 | #include <asm-generic/vmlinux.lds.h> | ||
12 | #include <asm/page.h> | ||
13 | |||
14 | jiffies = jiffies_64; | ||
15 | SECTIONS | ||
16 | { | ||
17 | . = DRAM_VIRTUAL_BASE; | ||
18 | dram_start = .; | ||
19 | ibr_start = .; | ||
20 | . = . + 0x4000; /* see head.S and pages reserved at the start */ | ||
21 | |||
22 | _text = .; /* Text and read-only data */ | ||
23 | text_start = .; /* lots of aliases */ | ||
24 | _stext = .; | ||
25 | __stext = .; | ||
26 | .text : { | ||
27 | TEXT_TEXT | ||
28 | SCHED_TEXT | ||
29 | LOCK_TEXT | ||
30 | *(.fixup) | ||
31 | *(.text.__*) | ||
32 | } | ||
33 | |||
34 | _etext = . ; /* End of text section */ | ||
35 | __etext = .; | ||
36 | |||
37 | . = ALIGN(4); /* Exception table */ | ||
38 | __start___ex_table = .; | ||
39 | __ex_table : { *(__ex_table) } | ||
40 | __stop___ex_table = .; | ||
41 | |||
42 | RODATA | ||
43 | |||
44 | . = ALIGN (4); | ||
45 | ___data_start = . ; | ||
46 | __Sdata = . ; | ||
47 | .data : { /* Data */ | ||
48 | DATA_DATA | ||
49 | } | ||
50 | __edata = . ; /* End of data section */ | ||
51 | _edata = . ; | ||
52 | |||
53 | . = ALIGN(PAGE_SIZE); /* init_task and stack, must be aligned */ | ||
54 | .data.init_task : { *(.data.init_task) } | ||
55 | |||
56 | . = ALIGN(PAGE_SIZE); /* Init code and data */ | ||
57 | __init_begin = .; | ||
58 | .init.text : { | ||
59 | _sinittext = .; | ||
60 | INIT_TEXT | ||
61 | _einittext = .; | ||
62 | } | ||
63 | .init.data : { INIT_DATA } | ||
64 | . = ALIGN(16); | ||
65 | __setup_start = .; | ||
66 | .init.setup : { *(.init.setup) } | ||
67 | __setup_end = .; | ||
68 | .initcall.init : { | ||
69 | __initcall_start = .; | ||
70 | INITCALLS | ||
71 | __initcall_end = .; | ||
72 | } | ||
73 | |||
74 | .con_initcall.init : { | ||
75 | __con_initcall_start = .; | ||
76 | *(.con_initcall.init) | ||
77 | __con_initcall_end = .; | ||
78 | } | ||
79 | SECURITY_INIT | ||
80 | |||
81 | #ifdef CONFIG_BLK_DEV_INITRD | ||
82 | .init.ramfs : { | ||
83 | __initramfs_start = .; | ||
84 | *(.init.ramfs) | ||
85 | __initramfs_end = .; | ||
86 | } | ||
87 | #endif | ||
88 | __vmlinux_end = .; /* last address of the physical file */ | ||
89 | |||
90 | /* | ||
91 | * We fill to the next page, so we can discard all init | ||
92 | * pages without needing to consider what payload might be | ||
93 | * appended to the kernel image. | ||
94 | */ | ||
95 | . = ALIGN(PAGE_SIZE); | ||
96 | |||
97 | __init_end = .; | ||
98 | |||
99 | __data_end = . ; /* Move to _edata ? */ | ||
100 | __bss_start = .; /* BSS */ | ||
101 | .bss : { | ||
102 | *(COMMON) | ||
103 | *(.bss) | ||
104 | } | ||
105 | |||
106 | . = ALIGN (0x20); | ||
107 | _end = .; | ||
108 | __end = .; | ||
109 | |||
110 | /* Sections to be discarded */ | ||
111 | /DISCARD/ : { | ||
112 | EXIT_TEXT | ||
113 | EXIT_DATA | ||
114 | *(.exitcall.exit) | ||
115 | } | ||
116 | |||
117 | dram_end = dram_start + CONFIG_ETRAX_DRAM_SIZE*1024*1024; | ||
118 | } | ||
diff --git a/arch/cris/arch-v32/boot/compressed/head.S b/arch/cris/arch-v32/boot/compressed/head.S index ea3012993b07..a4a65c5c669e 100644 --- a/arch/cris/arch-v32/boot/compressed/head.S +++ b/arch/cris/arch-v32/boot/compressed/head.S | |||
@@ -28,7 +28,13 @@ _start: | |||
28 | beq dram_init_finished | 28 | beq dram_init_finished |
29 | nop | 29 | nop |
30 | 30 | ||
31 | #include "../../mach/dram_init.S" | 31 | #if defined CONFIG_ETRAXFS |
32 | #include "../../mach-fs/dram_init.S" | ||
33 | #elif defined CONFIG_CRIS_MACH_ARTPEC3 | ||
34 | #include "../../mach-a3/dram_init.S" | ||
35 | #else | ||
36 | #error Only ETRAXFS and ARTPEC-3 supported! | ||
37 | #endif | ||
32 | 38 | ||
33 | dram_init_finished: | 39 | dram_init_finished: |
34 | 40 | ||
@@ -130,4 +136,10 @@ _cmd_line_addr: | |||
130 | _boot_source: | 136 | _boot_source: |
131 | .dword 0 | 137 | .dword 0 |
132 | 138 | ||
133 | #include "../../mach/hw_settings.S" | 139 | #if defined CONFIG_ETRAXFS |
140 | #include "../../mach-fs/hw_settings.S" | ||
141 | #elif defined CONFIG_CRIS_MACH_ARTPEC3 | ||
142 | #include "../../mach-a3/hw_settings.S" | ||
143 | #else | ||
144 | #error Only ETRAXFS and ARTPEC-3 supported! | ||
145 | #endif | ||
diff --git a/arch/cris/arch-v32/kernel/head.S b/arch/cris/arch-v32/kernel/head.S index f902d87fb5de..3db478eb5155 100644 --- a/arch/cris/arch-v32/kernel/head.S +++ b/arch/cris/arch-v32/kernel/head.S | |||
@@ -10,8 +10,9 @@ | |||
10 | * The macros found in mmu_defs_asm.h uses the ## concatenation operator, so | 10 | * The macros found in mmu_defs_asm.h uses the ## concatenation operator, so |
11 | * -traditional must not be used when assembling this file. | 11 | * -traditional must not be used when assembling this file. |
12 | */ | 12 | */ |
13 | #include <hwregs/reg_rdwr.h> | 13 | #include <linux/autoconf.h> |
14 | #include <arch/memmap.h> | 14 | #include <arch/memmap.h> |
15 | #include <hwregs/reg_rdwr.h> | ||
15 | #include <hwregs/intr_vect.h> | 16 | #include <hwregs/intr_vect.h> |
16 | #include <hwregs/asm/mmu_defs_asm.h> | 17 | #include <hwregs/asm/mmu_defs_asm.h> |
17 | #include <hwregs/asm/reg_map_asm.h> | 18 | #include <hwregs/asm/reg_map_asm.h> |
@@ -217,7 +218,14 @@ _inflash: | |||
217 | beq _dram_initialized | 218 | beq _dram_initialized |
218 | nop | 219 | nop |
219 | 220 | ||
220 | #include "../mach/dram_init.S" | 221 | #if defined CONFIG_ETRAXFS |
222 | #include "../mach-fs/dram_init.S" | ||
223 | #elif defined CONFIG_CRIS_MACH_ARTPEC3 | ||
224 | #include "../mach-a3/dram_init.S" | ||
225 | #else | ||
226 | #error Only ETRAXFS and ARTPEC-3 supported! | ||
227 | #endif | ||
228 | |||
221 | 229 | ||
222 | _dram_initialized: | 230 | _dram_initialized: |
223 | ;; Copy the text and data section to DRAM. This depends on that the | 231 | ;; Copy the text and data section to DRAM. This depends on that the |
@@ -472,4 +480,10 @@ swapper_pg_dir = 0xc0002000 | |||
472 | 480 | ||
473 | .section ".init.data", "aw" | 481 | .section ".init.data", "aw" |
474 | 482 | ||
475 | #include "../mach/hw_settings.S" | 483 | #if defined CONFIG_ETRAXFS |
484 | #include "../mach-fs/hw_settings.S" | ||
485 | #elif defined CONFIG_CRIS_MACH_ARTPEC3 | ||
486 | #include "../mach-a3/hw_settings.S" | ||
487 | #else | ||
488 | #error Only ETRAXFS and ARTPEC-3 supported! | ||
489 | #endif | ||
diff --git a/arch/cris/arch-v32/vmlinux.lds.S b/arch/cris/kernel/vmlinux.lds.S index d5f28e40717c..0d2adfc794d4 100644 --- a/arch/cris/arch-v32/vmlinux.lds.S +++ b/arch/cris/kernel/vmlinux.lds.S | |||
@@ -8,6 +8,7 @@ | |||
8 | * the kernel has booted. | 8 | * the kernel has booted. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/autoconf.h> | ||
11 | #include <asm-generic/vmlinux.lds.h> | 12 | #include <asm-generic/vmlinux.lds.h> |
12 | #include <asm/page.h> | 13 | #include <asm/page.h> |
13 | 14 | ||
@@ -17,22 +18,26 @@ | |||
17 | #define __CONFIG_ETRAX_VMEM_SIZE 0 | 18 | #define __CONFIG_ETRAX_VMEM_SIZE 0 |
18 | #endif | 19 | #endif |
19 | 20 | ||
21 | |||
20 | jiffies = jiffies_64; | 22 | jiffies = jiffies_64; |
21 | SECTIONS | 23 | SECTIONS |
22 | { | 24 | { |
23 | . = DRAM_VIRTUAL_BASE; | 25 | . = DRAM_VIRTUAL_BASE; |
24 | dram_start = .; | 26 | dram_start = .; |
27 | #ifdef CONFIG_ETRAX_ARCH_V10 | ||
28 | ibr_start = .; | ||
29 | #else | ||
25 | ebp_start = .; | 30 | ebp_start = .; |
26 | |||
27 | /* The boot section is only necessary until the VCS top */ | 31 | /* The boot section is only necessary until the VCS top */ |
28 | /* level testbench includes both flash and DRAM. */ | 32 | /* level testbench includes both flash and DRAM. */ |
29 | .boot : { *(.boot) } | 33 | .boot : { *(.boot) } |
34 | #endif | ||
30 | 35 | ||
31 | /* See head.S and pages reserved at the start. */ | 36 | /* see head.S and pages reserved at the start */ |
32 | . = DRAM_VIRTUAL_BASE + 0x4000; | 37 | . = DRAM_VIRTUAL_BASE + 0x4000; |
33 | 38 | ||
34 | _text = .; /* Text and read-only data. */ | 39 | _text = .; /* Text and read-only data. */ |
35 | text_start = .; /* Lots of aliases. */ | 40 | text_start = .; /* Lots of aliases. */ |
36 | _stext = .; | 41 | _stext = .; |
37 | __stext = .; | 42 | __stext = .; |
38 | .text : { | 43 | .text : { |
@@ -43,10 +48,10 @@ SECTIONS | |||
43 | *(.text.__*) | 48 | *(.text.__*) |
44 | } | 49 | } |
45 | 50 | ||
46 | _etext = . ; /* End of text section. */ | 51 | _etext = . ; /* End of text section. */ |
47 | __etext = .; | 52 | __etext = .; |
48 | 53 | ||
49 | . = ALIGN(4); /* Exception table. */ | 54 | . = ALIGN(4); /* Exception table. */ |
50 | __start___ex_table = .; | 55 | __start___ex_table = .; |
51 | __ex_table : { *(__ex_table) } | 56 | __ex_table : { *(__ex_table) } |
52 | __stop___ex_table = .; | 57 | __stop___ex_table = .; |
@@ -56,16 +61,16 @@ SECTIONS | |||
56 | . = ALIGN (4); | 61 | . = ALIGN (4); |
57 | ___data_start = . ; | 62 | ___data_start = . ; |
58 | __Sdata = . ; | 63 | __Sdata = . ; |
59 | .data : { /* Data */ | 64 | .data : { /* Data */ |
60 | DATA_DATA | 65 | DATA_DATA |
61 | } | 66 | } |
62 | __edata = . ; /* End of data section. */ | 67 | __edata = . ; /* End of data section. */ |
63 | _edata = . ; | 68 | _edata = . ; |
64 | 69 | ||
65 | . = ALIGN(PAGE_SIZE); /* init_task and stack, must be aligned. */ | 70 | . = ALIGN(PAGE_SIZE); /* init_task and stack, must be aligned. */ |
66 | .data.init_task : { *(.data.init_task) } | 71 | .data.init_task : { *(.data.init_task) } |
67 | 72 | ||
68 | . = ALIGN(PAGE_SIZE); /* Init code and data. */ | 73 | . = ALIGN(PAGE_SIZE); /* Init code and data. */ |
69 | __init_begin = .; | 74 | __init_begin = .; |
70 | .init.text : { | 75 | .init.text : { |
71 | _sinittext = .; | 76 | _sinittext = .; |
@@ -77,9 +82,11 @@ SECTIONS | |||
77 | __setup_start = .; | 82 | __setup_start = .; |
78 | .init.setup : { *(.init.setup) } | 83 | .init.setup : { *(.init.setup) } |
79 | __setup_end = .; | 84 | __setup_end = .; |
85 | #ifdef CONFIG_ETRAX_ARCH_V32 | ||
80 | __start___param = .; | 86 | __start___param = .; |
81 | __param : { *(__param) } | 87 | __param : { *(__param) } |
82 | __stop___param = .; | 88 | __stop___param = .; |
89 | #endif | ||
83 | .initcall.init : { | 90 | .initcall.init : { |
84 | __initcall_start = .; | 91 | __initcall_start = .; |
85 | INITCALLS | 92 | INITCALLS |
@@ -93,7 +100,17 @@ SECTIONS | |||
93 | } | 100 | } |
94 | SECURITY_INIT | 101 | SECURITY_INIT |
95 | 102 | ||
96 | __vmlinux_end = .; /* Last address of the physical file. */ | 103 | #ifdef CONFIG_ETRAX_ARCH_V10 |
104 | #ifdef CONFIG_BLK_DEV_INITRD | ||
105 | .init.ramfs : { | ||
106 | __initramfs_start = .; | ||
107 | *(.init.ramfs) | ||
108 | __initramfs_end = .; | ||
109 | } | ||
110 | #endif | ||
111 | #endif | ||
112 | __vmlinux_end = .; /* Last address of the physical file. */ | ||
113 | #ifdef CONFIG_ETRAX_ARCH_V32 | ||
97 | PERCPU(PAGE_SIZE) | 114 | PERCPU(PAGE_SIZE) |
98 | 115 | ||
99 | .init.ramfs : { | 116 | .init.ramfs : { |
@@ -101,18 +118,19 @@ SECTIONS | |||
101 | *(.init.ramfs) | 118 | *(.init.ramfs) |
102 | __initramfs_end = .; | 119 | __initramfs_end = .; |
103 | } | 120 | } |
121 | #endif | ||
104 | 122 | ||
105 | /* | 123 | /* |
106 | * We fill to the next page, so we can discard all init | 124 | * We fill to the next page, so we can discard all init |
107 | * pages without needing to consider what payload might be | 125 | * pages without needing to consider what payload might be |
108 | * appended to the kernel image. | 126 | * appended to the kernel image. |
109 | */ | 127 | */ |
110 | . = ALIGN (PAGE_SIZE); | 128 | . = ALIGN(PAGE_SIZE); |
111 | 129 | ||
112 | __init_end = .; | 130 | __init_end = .; |
113 | 131 | ||
114 | __data_end = . ; /* Move to _edata? */ | 132 | __data_end = . ; /* Move to _edata ? */ |
115 | __bss_start = .; /* BSS. */ | 133 | __bss_start = .; /* BSS. */ |
116 | .bss : { | 134 | .bss : { |
117 | *(COMMON) | 135 | *(COMMON) |
118 | *(.bss) | 136 | *(.bss) |