musl: Add .file directive in crt assembly files

Submitted by Khem Raj on Oct. 30, 2020, 5:47 a.m. | Patch ID: 177717

Details

Message ID 20201030054703.422319-1-raj.khem@gmail.com
State Accepted
Commit cc4b464e31fec68b32592cc84344a9704eae8e02
Headers show

Commit Message

Khem Raj Oct. 30, 2020, 5:47 a.m.
This helps linker to noot emit absolute paths into .debug_line sections
of liked binaries and libraries and therefore make them reproducible

Reported-by: Andrei Gherzan <andrei@gherzan.ro>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 .../musl/0001-crt-Add-.file-directive.patch   | 300 ++++++++++++++++++
 meta/recipes-core/musl/musl_git.bb            |   1 +
 2 files changed, 301 insertions(+)
 create mode 100644 meta/recipes-core/musl/musl/0001-crt-Add-.file-directive.patch

Patch hide | download patch | download mbox

diff --git a/meta/recipes-core/musl/musl/0001-crt-Add-.file-directive.patch b/meta/recipes-core/musl/musl/0001-crt-Add-.file-directive.patch
new file mode 100644
index 0000000000..d2bd587e39
--- /dev/null
+++ b/meta/recipes-core/musl/musl/0001-crt-Add-.file-directive.patch
@@ -0,0 +1,300 @@ 
+From b0124f3c4f2a353506621d387135ebea6b8c6609 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 29 Oct 2020 22:40:53 -0700
+Subject: [PATCH] crt: Add .file directive
+
+Musl linked binaries come out to be not reproducible because
+absolute build path is seen in debug info of crti.o and crtn.o
+This is due to the fact that these objects are built from assembly
+source files and they are missing .file directive
+if we add .file <filename>.s in them then debug info encodes this
+value instead of absolute path in debug_line section
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ crt/aarch64/crti.s    | 1 +
+ crt/aarch64/crtn.s    | 1 +
+ crt/arm/crti.s        | 1 +
+ crt/arm/crtn.s        | 1 +
+ crt/i386/crti.s       | 1 +
+ crt/i386/crtn.s       | 1 +
+ crt/microblaze/crti.s | 1 +
+ crt/microblaze/crtn.s | 1 +
+ crt/mips/crti.s       | 1 +
+ crt/mips/crtn.s       | 1 +
+ crt/mips64/crti.s     | 1 +
+ crt/mips64/crtn.s     | 1 +
+ crt/mipsn32/crti.s    | 1 +
+ crt/mipsn32/crtn.s    | 1 +
+ crt/or1k/crti.s       | 1 +
+ crt/or1k/crtn.s       | 1 +
+ crt/powerpc/crti.s    | 1 +
+ crt/powerpc/crtn.s    | 1 +
+ crt/powerpc64/crti.s  | 1 +
+ crt/powerpc64/crtn.s  | 1 +
+ crt/s390x/crti.s      | 1 +
+ crt/s390x/crtn.s      | 1 +
+ crt/sh/crti.s         | 1 +
+ crt/sh/crtn.s         | 1 +
+ crt/x32/crti.s        | 1 +
+ crt/x32/crtn.s        | 1 +
+ crt/x86_64/crti.s     | 1 +
+ crt/x86_64/crtn.s     | 1 +
+ 28 files changed, 28 insertions(+)
+
+diff --git a/crt/aarch64/crti.s b/crt/aarch64/crti.s
+index 775df0ac..0f7c23a9 100644
+--- a/crt/aarch64/crti.s
++++ b/crt/aarch64/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .section .init
+ .global _init
+ .type _init,%function
+diff --git a/crt/aarch64/crtn.s b/crt/aarch64/crtn.s
+index 73cab692..d62fc129 100644
+--- a/crt/aarch64/crtn.s
++++ b/crt/aarch64/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .section .init
+ 	ldp x29,x30,[sp],#16
+ 	ret
+diff --git a/crt/arm/crti.s b/crt/arm/crti.s
+index 18dc1e41..8df72979 100644
+--- a/crt/arm/crti.s
++++ b/crt/arm/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .syntax unified
+ 
+ .section .init
+diff --git a/crt/arm/crtn.s b/crt/arm/crtn.s
+index dc020f92..7451355b 100644
+--- a/crt/arm/crtn.s
++++ b/crt/arm/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .syntax unified
+ 
+ .section .init
+diff --git a/crt/i386/crti.s b/crt/i386/crti.s
+index d2682a20..2823fc3b 100644
+--- a/crt/i386/crti.s
++++ b/crt/i386/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .section .init
+ .global _init
+ _init:
+diff --git a/crt/i386/crtn.s b/crt/i386/crtn.s
+index f3b61e01..04fb1646 100644
+--- a/crt/i386/crtn.s
++++ b/crt/i386/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .section .init
+ 	add $12,%esp
+ 	ret
+diff --git a/crt/microblaze/crti.s b/crt/microblaze/crti.s
+index ed1c2fa4..29ee4733 100644
+--- a/crt/microblaze/crti.s
++++ b/crt/microblaze/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .section .init
+ .global _init
+ .align 2
+diff --git a/crt/microblaze/crtn.s b/crt/microblaze/crtn.s
+index 1e02c984..c2083749 100644
+--- a/crt/microblaze/crtn.s
++++ b/crt/microblaze/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .section .init
+ 	lwi r15, r1, 0
+ 	rtsd r15, 8
+diff --git a/crt/mips/crti.s b/crt/mips/crti.s
+index 39dee380..0211764e 100644
+--- a/crt/mips/crti.s
++++ b/crt/mips/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .set noreorder
+ 
+ .section .init
+diff --git a/crt/mips/crtn.s b/crt/mips/crtn.s
+index 506a04b7..606490cf 100644
+--- a/crt/mips/crtn.s
++++ b/crt/mips/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .set noreorder
+ 
+ .section .init
+diff --git a/crt/mips64/crti.s b/crt/mips64/crti.s
+index c962dd09..f2c19cdd 100644
+--- a/crt/mips64/crti.s
++++ b/crt/mips64/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .set noreorder
+ 
+ .section .init
+diff --git a/crt/mips64/crtn.s b/crt/mips64/crtn.s
+index f3930b24..68903ffa 100644
+--- a/crt/mips64/crtn.s
++++ b/crt/mips64/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .set noreorder
+ 
+ .section .init
+diff --git a/crt/mipsn32/crti.s b/crt/mipsn32/crti.s
+index 14fa28d9..a35387d3 100644
+--- a/crt/mipsn32/crti.s
++++ b/crt/mipsn32/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .set	noreorder
+ .section	.init
+ .global	_init
+diff --git a/crt/mipsn32/crtn.s b/crt/mipsn32/crtn.s
+index dccd7e89..bdb6e561 100644
+--- a/crt/mipsn32/crtn.s
++++ b/crt/mipsn32/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .set	noreorder
+ .section	.init
+ 	ld	$gp, 16($sp)
+diff --git a/crt/or1k/crti.s b/crt/or1k/crti.s
+index 7e741459..919369ca 100644
+--- a/crt/or1k/crti.s
++++ b/crt/or1k/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .section .init
+ .global _init
+ _init:
+diff --git a/crt/or1k/crtn.s b/crt/or1k/crtn.s
+index 4185a027..d670b327 100644
+--- a/crt/or1k/crtn.s
++++ b/crt/or1k/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .section .init
+ 	l.lwz	r9,0(r1)
+ 	l.jr	r9
+diff --git a/crt/powerpc/crti.s b/crt/powerpc/crti.s
+index 60461ca4..b748ca48 100644
+--- a/crt/powerpc/crti.s
++++ b/crt/powerpc/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .section .init
+ .align 2
+ .global _init
+diff --git a/crt/powerpc/crtn.s b/crt/powerpc/crtn.s
+index 2d14a6f0..d989e36f 100644
+--- a/crt/powerpc/crtn.s
++++ b/crt/powerpc/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .section .init
+ .align 2
+ 	lwz 0,36(1)
+diff --git a/crt/powerpc64/crti.s b/crt/powerpc64/crti.s
+index 9f712f0e..d3323a67 100644
+--- a/crt/powerpc64/crti.s
++++ b/crt/powerpc64/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .section .init
+ .align 2
+ .global _init
+diff --git a/crt/powerpc64/crtn.s b/crt/powerpc64/crtn.s
+index a7a9f4a0..5e71ae66 100644
+--- a/crt/powerpc64/crtn.s
++++ b/crt/powerpc64/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .section .init
+ .align 2
+ 	addi 1, 1, 32
+diff --git a/crt/s390x/crti.s b/crt/s390x/crti.s
+index f453205b..3da3c5e1 100644
+--- a/crt/s390x/crti.s
++++ b/crt/s390x/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .section .init
+ .align 2
+ .global _init
+diff --git a/crt/s390x/crtn.s b/crt/s390x/crtn.s
+index 06066dc9..bfd55caf 100644
+--- a/crt/s390x/crtn.s
++++ b/crt/s390x/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .section .init
+ .align 2
+ 	lmg  %r14, %r15, 272(%r15)
+diff --git a/crt/sh/crti.s b/crt/sh/crti.s
+index d99bfd5c..77d61c51 100644
+--- a/crt/sh/crti.s
++++ b/crt/sh/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .section .init
+ .global  _init
+ .type    _init, @function
+diff --git a/crt/sh/crtn.s b/crt/sh/crtn.s
+index 958ce951..29deb5be 100644
+--- a/crt/sh/crtn.s
++++ b/crt/sh/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .section .init
+ 	lds.l @r15+, pr
+ 	mov.l @r15+, r14
+diff --git a/crt/x32/crti.s b/crt/x32/crti.s
+index 4788968b..8668b7c7 100644
+--- a/crt/x32/crti.s
++++ b/crt/x32/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .section .init
+ .global _init
+ _init:
+diff --git a/crt/x32/crtn.s b/crt/x32/crtn.s
+index 29198b77..ef73d295 100644
+--- a/crt/x32/crtn.s
++++ b/crt/x32/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .section .init
+ 	pop %rax
+ 	ret
+diff --git a/crt/x86_64/crti.s b/crt/x86_64/crti.s
+index 4788968b..8668b7c7 100644
+--- a/crt/x86_64/crti.s
++++ b/crt/x86_64/crti.s
+@@ -1,3 +1,4 @@
++.file "crti.s"
+ .section .init
+ .global _init
+ _init:
+diff --git a/crt/x86_64/crtn.s b/crt/x86_64/crtn.s
+index 29198b77..ef73d295 100644
+--- a/crt/x86_64/crtn.s
++++ b/crt/x86_64/crtn.s
+@@ -1,3 +1,4 @@
++.file "crtn.s"
+ .section .init
+ 	pop %rax
+ 	ret
+-- 
+2.29.1
+
diff --git a/meta/recipes-core/musl/musl_git.bb b/meta/recipes-core/musl/musl_git.bb
index 897e56e10f..504fdfe019 100644
--- a/meta/recipes-core/musl/musl_git.bb
+++ b/meta/recipes-core/musl/musl_git.bb
@@ -15,6 +15,7 @@  PV = "${BASEVER}+git${SRCPV}"
 SRC_URI = "git://git.musl-libc.org/musl \
            file://0001-Make-dynamic-linker-a-relative-symlink-to-libc.patch \
            file://0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch \
+           file://0001-crt-Add-.file-directive.patch \
           "
 
 S = "${WORKDIR}/git"

Comments

Andrei Gherzan Oct. 30, 2020, 12:07 p.m.
On Fri, Oct 30, 2020 at 5:47 AM Khem Raj <raj.khem@gmail.com> wrote:

> This helps linker to noot emit absolute paths into .debug_line sections
> of liked binaries and libraries and therefore make them reproducible
>
> Reported-by: Andrei Gherzan <andrei@gherzan.ro>
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---
>  .../musl/0001-crt-Add-.file-directive.patch   | 300 ++++++++++++++++++
>  meta/recipes-core/musl/musl_git.bb            |   1 +
>  2 files changed, 301 insertions(+)
>  create mode 100644
> meta/recipes-core/musl/musl/0001-crt-Add-.file-directive.patch
>

Tested - works as expected. One small NIT to maintain consistency with the
Glibc fix: ".S" vs ".s".

--
Andrei Gherzan
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#143996): https://lists.openembedded.org/g/openembedded-core/message/143996
Mute This Topic: https://lists.openembedded.org/mt/77906053/3617530
Group Owner: openembedded-core+owner@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [oe-patchwork@oe-patch.openembedded.org]
-=-=-=-=-=-=-=-=-=-=-=-
Khem Raj Oct. 30, 2020, 2:41 p.m.
On Fri, Oct 30, 2020 at 5:07 AM Andrei Gherzan <andrei@gherzan.ro> wrote:
>
>
> On Fri, Oct 30, 2020 at 5:47 AM Khem Raj <raj.khem@gmail.com> wrote:
>>
>> This helps linker to noot emit absolute paths into .debug_line sections
>> of liked binaries and libraries and therefore make them reproducible
>>
>> Reported-by: Andrei Gherzan <andrei@gherzan.ro>
>> Signed-off-by: Khem Raj <raj.khem@gmail.com>
>> ---
>>  .../musl/0001-crt-Add-.file-directive.patch   | 300 ++++++++++++++++++
>>  meta/recipes-core/musl/musl_git.bb            |   1 +
>>  2 files changed, 301 insertions(+)
>>  create mode 100644 meta/recipes-core/musl/musl/0001-crt-Add-.file-directive.patch
>
>
> Tested - works as expected. One small NIT to maintain consistency with the Glibc fix: ".S" vs ".s".
>

.file directive is to specify the name of the file so it should match
it. In glibc the files are called .S because they are preprocessed
through gcc
where as the musl files are pure asm files.

> --
> Andrei Gherzan
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#144004): https://lists.openembedded.org/g/openembedded-core/message/144004
Mute This Topic: https://lists.openembedded.org/mt/77906053/3617530
Group Owner: openembedded-core+owner@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [oe-patchwork@oe-patch.openembedded.org]
-=-=-=-=-=-=-=-=-=-=-=-
Andrei Gherzan Oct. 30, 2020, 2:44 p.m.
Hi,

On Fri, Oct 30, 2020 at 2:42 PM Khem Raj <raj.khem@gmail.com> wrote:

> On Fri, Oct 30, 2020 at 5:07 AM Andrei Gherzan <andrei@gherzan.ro> wrote:
> >
> >
> > On Fri, Oct 30, 2020 at 5:47 AM Khem Raj <raj.khem@gmail.com> wrote:
> >>
> >> This helps linker to noot emit absolute paths into .debug_line sections
> >> of liked binaries and libraries and therefore make them reproducible
> >>
> >> Reported-by: Andrei Gherzan <andrei@gherzan.ro>
> >> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> >> ---
> >>  .../musl/0001-crt-Add-.file-directive.patch   | 300 ++++++++++++++++++
> >>  meta/recipes-core/musl/musl_git.bb            |   1 +
> >>  2 files changed, 301 insertions(+)
> >>  create mode 100644
> meta/recipes-core/musl/musl/0001-crt-Add-.file-directive.patch
> >
> >
> > Tested - works as expected. One small NIT to maintain consistency with
> the Glibc fix: ".S" vs ".s".
> >
>
> .file directive is to specify the name of the file so it should match
> it. In glibc the files are called .S because they are preprocessed
> through gcc
> where as the musl files are pure asm files.
>

Makes sense. Scratch that.

--
Andrei Gherzan
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#144005): https://lists.openembedded.org/g/openembedded-core/message/144005
Mute This Topic: https://lists.openembedded.org/mt/77906053/3617530
Group Owner: openembedded-core+owner@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [oe-patchwork@oe-patch.openembedded.org]
-=-=-=-=-=-=-=-=-=-=-=-