Re: [Xen-devel] [PATCH v2 08/23] x86: add multiboot2 protocol support

2015-08-15 Thread Andrew Cooper



On 14/08/15 11:03, Jan Beulich wrote:

On 13.08.15 at 21:22, daniel.ki...@oracle.com wrote:

On Mon, Aug 10, 2015 at 03:17:48PM -0400, Konrad Rzeszutek Wilk wrote:

On Mon, Jul 20, 2015 at 04:29:03PM +0200, Daniel Kiper wrote:

@@ -34,6 +57,42 @@ multiboot1_header_start:   /*** MULTIBOOT1 HEADER /
  .long   -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
  multiboot1_header_end:

+/*** MULTIBOOT2 HEADER /
+/* Some ideas are taken from grub-2.00/grub-core/tests/boot/kernel-i386.S 
file. */
+.align  MULTIBOOT2_HEADER_ALIGN
+
+.Lmultiboot2_header:

How come you use .L? It makes this hidden while the multiboot1 headers
are visible? Makes it a bit harder to see the contents of this under
an debugger.

Good point. IIRC, Jan asked about that. I will remove .L if he does not
object.

For this particular one I think it's okay to drop the .L, but generally
I'd like to see .L used more widely for any auxiliary labels (i.e. only
main labels - function entry points and data objects - should have
their labels present in the final symbol table).


In general I would agree.

However, the multiboot 1 and 2 headers are special.  They are binary 
data included in the .text section, so having non-local lables makes the 
disassembly easier to read.


~Andrew

___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [Xen-devel] [PATCH v2 08/23] x86: add multiboot2 protocol support

2015-08-14 Thread Jan Beulich
 On 13.08.15 at 21:22, daniel.ki...@oracle.com wrote:
 On Mon, Aug 10, 2015 at 03:17:48PM -0400, Konrad Rzeszutek Wilk wrote:
 On Mon, Jul 20, 2015 at 04:29:03PM +0200, Daniel Kiper wrote:
  @@ -34,6 +57,42 @@ multiboot1_header_start:   /*** MULTIBOOT1 HEADER 
  /
   .long   -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
   multiboot1_header_end:
 
  +/*** MULTIBOOT2 HEADER /
  +/* Some ideas are taken from grub-2.00/grub-core/tests/boot/kernel-i386.S 
  file. */
  +.align  MULTIBOOT2_HEADER_ALIGN
  +
  +.Lmultiboot2_header:

 How come you use .L? It makes this hidden while the multiboot1 headers
 are visible? Makes it a bit harder to see the contents of this under
 an debugger.
 
 Good point. IIRC, Jan asked about that. I will remove .L if he does not 
 object.

For this particular one I think it's okay to drop the .L, but generally
I'd like to see .L used more widely for any auxiliary labels (i.e. only
main labels - function entry points and data objects - should have
their labels present in the final symbol table).

Jan


___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [Xen-devel] [PATCH v2 08/23] x86: add multiboot2 protocol support

2015-08-13 Thread Daniel Kiper
On Mon, Aug 10, 2015 at 03:17:48PM -0400, Konrad Rzeszutek Wilk wrote:
 On Mon, Jul 20, 2015 at 04:29:03PM +0200, Daniel Kiper wrote:
  Add multiboot2 protocol support. Alter min memory limit handling as we
  now may not find it from either multiboot (v1) or multiboot2.
 
  This way we are laying the foundation for EFI + GRUB2 + Xen development.
 
  Signed-off-by: Daniel Kiper daniel.ki...@oracle.com
  Reviewed-by: Andrew Cooper andrew.coop...@citrix.com
  ---
  v2 - suggestions/fixes:
 - generate multiboot2 header using macros
   (suggested by Jan Beulich),
 - improve comments
   (suggested by Jan Beulich),
 - simplify assembly in xen/arch/x86/boot/head.S
   (suggested by Jan Beulich),
 - do not include include/xen/compiler.h
   in xen/arch/x86/boot/reloc.c
   (suggested by Jan Beulich),
 - do not read data beyond the end of Multiboot2 information
   (suggested by Jan Beulich).
 
  v2 - not fixed yet:

 You have two 'v2'

Yep, but it says not fixed in v2.

 - dynamic dependency generation for xen/arch/x86/boot/reloc.S;
   this requires more work; I am not sure that it pays because
   potential patch requires more changes than addition of just
   multiboot2.h to Makefile
   (suggested by Jan Beulich),
 - isolated/stray __packed attribute usage for multiboot2_memory_map_t
   (suggested by Jan Beulich).
  ---
   xen/arch/x86/boot/Makefile|3 +-
   xen/arch/x86/boot/head.S  |  105 +--
   xen/arch/x86/boot/reloc.c |  146 +++-
   xen/arch/x86/x86_64/asm-offsets.c |7 ++
   xen/include/xen/multiboot2.h  |  169 
  +
   5 files changed, 420 insertions(+), 10 deletions(-)
   create mode 100644 xen/include/xen/multiboot2.h
 
  diff --git a/xen/arch/x86/boot/Makefile b/xen/arch/x86/boot/Makefile
  index 5fdb5ae..06893d8 100644
  --- a/xen/arch/x86/boot/Makefile
  +++ b/xen/arch/x86/boot/Makefile
  @@ -1,6 +1,7 @@
   obj-bin-y += head.o
 
  -RELOC_DEPS = $(BASEDIR)/include/asm-x86/config.h 
  $(BASEDIR)/include/xen/multiboot.h
  +RELOC_DEPS = $(BASEDIR)/include/asm-x86/config.h 
  $(BASEDIR)/include/xen/multiboot.h \
  +$(BASEDIR)/include/xen/multiboot2.h
 
   head.o: reloc.S
 
  diff --git a/xen/arch/x86/boot/head.S b/xen/arch/x86/boot/head.S
  index 77e7da9..57197db 100644
  --- a/xen/arch/x86/boot/head.S
  +++ b/xen/arch/x86/boot/head.S
  @@ -1,5 +1,6 @@
   #include xen/config.h
   #include xen/multiboot.h
  +#include xen/multiboot2.h
   #include public/xen.h
   #include asm/asm_defns.h
   #include asm/desc.h
  @@ -19,6 +20,28 @@
   #define BOOT_PSEUDORM_CS 0x0020
   #define BOOT_PSEUDORM_DS 0x0028
 
  +#define MB2_HT(name)  (MULTIBOOT2_HEADER_TAG_##name)
  +#define MB2_TT(name)  (MULTIBOOT2_TAG_TYPE_##name)
  +
  +.macro mb2ht_args arg, args:vararg
  +.long \arg
  +.ifnb \args
  +mb2ht_args \args
  +.endif
  +.endm
  +
  +.macro mb2ht_init type, req, args:vararg
  +.align MULTIBOOT2_TAG_ALIGN
  +0:
  +.short \type
  +.short \req
  +.long 1f - 0b
  +.ifnb \args
  +mb2ht_args \args
  +.endif
  +1:
  +.endm
  +
   ENTRY(start)
   jmp __start
 
  @@ -34,6 +57,42 @@ multiboot1_header_start:   /*** MULTIBOOT1 HEADER 
  /
   .long   -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
   multiboot1_header_end:
 
  +/*** MULTIBOOT2 HEADER /
  +/* Some ideas are taken from grub-2.00/grub-core/tests/boot/kernel-i386.S 
  file. */
  +.align  MULTIBOOT2_HEADER_ALIGN
  +
  +.Lmultiboot2_header:

 How come you use .L? It makes this hidden while the multiboot1 headers
 are visible? Makes it a bit harder to see the contents of this under
 an debugger.

Good point. IIRC, Jan asked about that. I will remove .L if he does not object.

  +/* Magic number indicating a Multiboot2 header. */
  +.long   MULTIBOOT2_HEADER_MAGIC
  +/* Architecture: i386. */
  +.long   MULTIBOOT2_ARCHITECTURE_I386
  +/* Multiboot2 header length. */
  +.long   .Lmultiboot2_header_end - .Lmultiboot2_header
  +/* Multiboot2 header checksum. */
  +.long   -(MULTIBOOT2_HEADER_MAGIC + MULTIBOOT2_ARCHITECTURE_I386 + 
  \
  +(.Lmultiboot2_header_end - .Lmultiboot2_header))
  +
  +/* Multiboot2 information request tag. */
  +mb2ht_init MB2_HT(INFORMATION_REQUEST), MB2_HT(REQUIRED), \
  +   MB2_TT(BASIC_MEMINFO), MB2_TT(MMAP)
  +
  +/* Align modules at page boundry. */
  +mb2ht_init MB2_HT(MODULE_ALIGN), MB2_HT(REQUIRED)
  +
  +/* Console flags tag. */
  +mb2ht_init MB2_HT(CONSOLE_FLAGS), MB2_HT(OPTIONAL), \
  +   MULTIBOOT2_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED
  +
  +/* Framebuffer tag. */
  +mb2ht_init 

Re: [Xen-devel] [PATCH v2 08/23] x86: add multiboot2 protocol support

2015-08-10 Thread Konrad Rzeszutek Wilk
On Mon, Jul 20, 2015 at 04:29:03PM +0200, Daniel Kiper wrote:
 Add multiboot2 protocol support. Alter min memory limit handling as we
 now may not find it from either multiboot (v1) or multiboot2.
 
 This way we are laying the foundation for EFI + GRUB2 + Xen development.
 
 Signed-off-by: Daniel Kiper daniel.ki...@oracle.com
 Reviewed-by: Andrew Cooper andrew.coop...@citrix.com
 ---
 v2 - suggestions/fixes:
- generate multiboot2 header using macros
  (suggested by Jan Beulich),
- improve comments
  (suggested by Jan Beulich),
- simplify assembly in xen/arch/x86/boot/head.S
  (suggested by Jan Beulich),
- do not include include/xen/compiler.h
  in xen/arch/x86/boot/reloc.c
  (suggested by Jan Beulich),
- do not read data beyond the end of Multiboot2 information
  (suggested by Jan Beulich).
 
 v2 - not fixed yet:

You have two 'v2' 

- dynamic dependency generation for xen/arch/x86/boot/reloc.S;
  this requires more work; I am not sure that it pays because
  potential patch requires more changes than addition of just
  multiboot2.h to Makefile
  (suggested by Jan Beulich),
- isolated/stray __packed attribute usage for multiboot2_memory_map_t
  (suggested by Jan Beulich).
 ---
  xen/arch/x86/boot/Makefile|3 +-
  xen/arch/x86/boot/head.S  |  105 +--
  xen/arch/x86/boot/reloc.c |  146 +++-
  xen/arch/x86/x86_64/asm-offsets.c |7 ++
  xen/include/xen/multiboot2.h  |  169 
 +
  5 files changed, 420 insertions(+), 10 deletions(-)
  create mode 100644 xen/include/xen/multiboot2.h
 
 diff --git a/xen/arch/x86/boot/Makefile b/xen/arch/x86/boot/Makefile
 index 5fdb5ae..06893d8 100644
 --- a/xen/arch/x86/boot/Makefile
 +++ b/xen/arch/x86/boot/Makefile
 @@ -1,6 +1,7 @@
  obj-bin-y += head.o
  
 -RELOC_DEPS = $(BASEDIR)/include/asm-x86/config.h 
 $(BASEDIR)/include/xen/multiboot.h
 +RELOC_DEPS = $(BASEDIR)/include/asm-x86/config.h 
 $(BASEDIR)/include/xen/multiboot.h \
 +  $(BASEDIR)/include/xen/multiboot2.h
  
  head.o: reloc.S
  
 diff --git a/xen/arch/x86/boot/head.S b/xen/arch/x86/boot/head.S
 index 77e7da9..57197db 100644
 --- a/xen/arch/x86/boot/head.S
 +++ b/xen/arch/x86/boot/head.S
 @@ -1,5 +1,6 @@
  #include xen/config.h
  #include xen/multiboot.h
 +#include xen/multiboot2.h
  #include public/xen.h
  #include asm/asm_defns.h
  #include asm/desc.h
 @@ -19,6 +20,28 @@
  #define BOOT_PSEUDORM_CS 0x0020
  #define BOOT_PSEUDORM_DS 0x0028
  
 +#define MB2_HT(name)  (MULTIBOOT2_HEADER_TAG_##name)
 +#define MB2_TT(name)  (MULTIBOOT2_TAG_TYPE_##name)
 +
 +.macro mb2ht_args arg, args:vararg
 +.long \arg
 +.ifnb \args
 +mb2ht_args \args
 +.endif
 +.endm
 +
 +.macro mb2ht_init type, req, args:vararg
 +.align MULTIBOOT2_TAG_ALIGN
 +0:
 +.short \type
 +.short \req
 +.long 1f - 0b
 +.ifnb \args
 +mb2ht_args \args
 +.endif
 +1:
 +.endm
 +
  ENTRY(start)
  jmp __start
  
 @@ -34,6 +57,42 @@ multiboot1_header_start:   /*** MULTIBOOT1 HEADER /
  .long   -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
  multiboot1_header_end:
  
 +/*** MULTIBOOT2 HEADER /
 +/* Some ideas are taken from grub-2.00/grub-core/tests/boot/kernel-i386.S 
 file. */
 +.align  MULTIBOOT2_HEADER_ALIGN
 +
 +.Lmultiboot2_header:

How come you use .L? It makes this hidden while the multiboot1 headers
are visible? Makes it a bit harder to see the contents of this under
an debugger.

 +/* Magic number indicating a Multiboot2 header. */
 +.long   MULTIBOOT2_HEADER_MAGIC
 +/* Architecture: i386. */
 +.long   MULTIBOOT2_ARCHITECTURE_I386
 +/* Multiboot2 header length. */
 +.long   .Lmultiboot2_header_end - .Lmultiboot2_header
 +/* Multiboot2 header checksum. */
 +.long   -(MULTIBOOT2_HEADER_MAGIC + MULTIBOOT2_ARCHITECTURE_I386 + \
 +(.Lmultiboot2_header_end - .Lmultiboot2_header))
 +
 +/* Multiboot2 information request tag. */
 +mb2ht_init MB2_HT(INFORMATION_REQUEST), MB2_HT(REQUIRED), \
 +   MB2_TT(BASIC_MEMINFO), MB2_TT(MMAP)
 +
 +/* Align modules at page boundry. */
 +mb2ht_init MB2_HT(MODULE_ALIGN), MB2_HT(REQUIRED)
 +
 +/* Console flags tag. */
 +mb2ht_init MB2_HT(CONSOLE_FLAGS), MB2_HT(OPTIONAL), \
 +   MULTIBOOT2_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED
 +
 +/* Framebuffer tag. */
 +mb2ht_init MB2_HT(FRAMEBUFFER), MB2_HT(OPTIONAL), \
 +   0, /* Number of the columns - no preference. */ \
 +   0, /* Number of the lines - no preference. */ \
 +   0  /* Number of bits per pixel - no preference. */
 +
 +/* Multiboot2 header end tag. */
 +