git: 881c145431b7 - main - elfnote: place note in a PT_NOTE program header

From: Roger Pau Monné <royger_at_FreeBSD.org>
Date: Tue, 28 Jun 2022 07:53:14 UTC
The branch main has been updated by royger:

URL: https://cgit.FreeBSD.org/src/commit/?id=881c145431b7aa956b93f6d2e7b861fe00ecc892

commit 881c145431b7aa956b93f6d2e7b861fe00ecc892
Author:     Roger Pau Monné <royger@FreeBSD.org>
AuthorDate: 2022-06-27 13:51:28 +0000
Commit:     Roger Pau Monné <royger@FreeBSD.org>
CommitDate: 2022-06-28 07:51:57 +0000

    elfnote: place note in a PT_NOTE program header
    
    Some tools (firecraker loader) only check for notes in PT_NOTE program
    headers, so make sure the notes added using the ELFNOTE macro end up
    in such header.
    
    Output from readelf -Wl for and amd64 kernel after the change:
    
    Elf file type is EXEC (Executable file)
    Entry point 0xffffffff8038a000
    There are 11 program headers, starting at offset 64
    
    Program Headers:
      Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
      PHDR           0x000040 0xffffffff80200040 0x0000000000200040 0x000268 0x000268 R   0x8
      INTERP         0x0002a8 0xffffffff802002a8 0x00000000002002a8 0x00000d 0x00000d R   0x1
          [Requesting program interpreter: /red/herring]
      LOAD           0x000000 0xffffffff80200000 0x0000000000200000 0x189e28 0x189e28 R   0x200000
      LOAD           0x18a000 0xffffffff8038a000 0x000000000038a000 0xe447e8 0xe447e8 R E 0x200000
      LOAD           0xfce7f0 0xffffffff811ce7f0 0x00000000011ce7f0 0x6b955c 0x6b955c R   0x200000
      LOAD           0x1800000 0xffffffff81a00000 0x0000000001a00000 0x000140 0x000140 RW  0x200000
      LOAD           0x1801000 0xffffffff81a01000 0x0000000001a01000 0x1c8480 0x5ff000 RW  0x200000
      DYNAMIC        0x1800000 0xffffffff81a00000 0x0000000001a00000 0x000140 0x000140 RW  0x8
      GNU_RELRO      0x1800000 0xffffffff81a00000 0x0000000001a00000 0x000140 0x000140 R   0x1
      GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW  0
      NOTE           0x1687ae0 0xffffffff81887ae0 0x0000000001887ae0 0x0001c0 0x0001c0 R   0x4
    
     Section to Segment mapping:
      Segment Sections...
    [...]
       10     .note.gnu.build-id .note.Xen
    
    Reported by: cperciva
    Fixes: 1a9cdd373a6a ('xen: add PV/PVH kernel entry point')
    Fixes: 93ee134a24fa ('Integrate support for xen in to i386 common code.')
    Sponsored by: Citrix Systems R&D
    Reviewed by: emaste
    Differential revision: https://reviews.freebsd.org/D35611
---
 sys/amd64/include/asmacros.h | 4 ++--
 sys/arm/include/asmacros.h   | 2 +-
 sys/i386/include/asmacros.h  | 4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/sys/amd64/include/asmacros.h b/sys/amd64/include/asmacros.h
index a0d2e153f09b..a54ea56de2d5 100644
--- a/sys/amd64/include/asmacros.h
+++ b/sys/amd64/include/asmacros.h
@@ -243,7 +243,7 @@ X\vec_name:
 
 #ifdef __STDC__
 #define ELFNOTE(name, type, desctype, descdata...) \
-.pushsection .note.name                 ;       \
+.pushsection .note.name, "a", @note     ;       \
   .align 4                              ;       \
   .long 2f - 1f         /* namesz */    ;       \
   .long 4f - 3f         /* descsz */    ;       \
@@ -255,7 +255,7 @@ X\vec_name:
 .popsection
 #else /* !__STDC__, i.e. -traditional */
 #define ELFNOTE(name, type, desctype, descdata) \
-.pushsection .note.name                 ;       \
+.pushsection .note.name, "a", @note     ;       \
   .align 4                              ;       \
   .long 2f - 1f         /* namesz */    ;       \
   .long 4f - 3f         /* descsz */    ;       \
diff --git a/sys/arm/include/asmacros.h b/sys/arm/include/asmacros.h
index a41af82febba..1b5d13e2b20e 100644
--- a/sys/arm/include/asmacros.h
+++ b/sys/arm/include/asmacros.h
@@ -41,7 +41,7 @@
     	mrc	p15, 0, tmp, c13, c0, 4
 
 #define	ELFNOTE(section, type, vendor, desctype, descdata...)	  \
-	.pushsection section					; \
+	.pushsection section, "a", %note			; \
 	    .balign 4						; \
 	    .long 2f - 1f		/* namesz */		; \
 	    .long 4f - 3f		/* descsz */		; \
diff --git a/sys/i386/include/asmacros.h b/sys/i386/include/asmacros.h
index 9d212246b0c1..bc663a91b30d 100644
--- a/sys/i386/include/asmacros.h
+++ b/sys/i386/include/asmacros.h
@@ -156,7 +156,7 @@
 
 #ifdef __STDC__
 #define ELFNOTE(name, type, desctype, descdata...) \
-.pushsection .note.name                 ;       \
+.pushsection .note.name, "a", @note     ;       \
   .align 4                              ;       \
   .long 2f - 1f         /* namesz */    ;       \
   .long 4f - 3f         /* descsz */    ;       \
@@ -168,7 +168,7 @@
 .popsection
 #else /* !__STDC__, i.e. -traditional */
 #define ELFNOTE(name, type, desctype, descdata) \
-.pushsection .note.name                 ;       \
+.pushsection .note.name, "a", @note     ;       \
   .align 4                              ;       \
   .long 2f - 1f         /* namesz */    ;       \
   .long 4f - 3f         /* descsz */    ;       \