Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Nov 2010 13:08:58 +0100
From:      Erik Cederstrand <erik@cederstrand.dk>
To:        FreeBSD Hackers <hackers@FreeBSD.org>
Subject:   Deterministic builds, part 2
Message-ID:  <93FA0AC7-704D-4EB4-A163-FDD8AC915630@cederstrand.dk>

next in thread | raw e-mail | index | archive | help

--Apple-Mail-195-994609787
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii

Hello hackers,

With a simple version of deterministic builds done (see my previous post =
here - anyone willing to comment the patch?), I have started to look at =
the more general case where OBJDIR and SRCDIR change between builds. The =
following are my findings.


Kernel modules:
----------------------
In the ELF section .gnu-debuglink, there is a link to the corresponding =
*.ko.symbols file. It seems to be an inode or such rather than a file =
path since nothing shows up in strings(1). I have commented out =
"makeoptions DEBUG=3D-g" in the GENERIC kernel conf file which I am =
testing now, but I'd like to know what is actually going on.


Symbol tables:
--------------------
For example, libstand.a shows up in a diff. Looking with objdump, I see =
the contained _setjmp.o file has the following symbol table:

SYMBOL TABLE:
00000000 l    df *ABS*  00000000 =
/usr/home/erik/freebsd/head1/src/lib/libstand/i386/_setjmp.S
00000000 l    df *ABS*  00000000 ./machine/asm.h
00000000 l    df *ABS*  00000000 =
/home/erik/freebsd/obj1/usr/home/erik/freebsd/head1/src/tmp/usr/include/sy=
s/cdefs.h
00000000 l    df *ABS*  00000000 ./machine/asm.h
00000000 l    df *ABS*  00000000 =
/usr/home/erik/freebsd/head1/src/lib/libstand/i386/_setjmp.S
00000000 l    df *ABS*  00000000 <command-line>
00000000 l    df *ABS*  00000000 <built-in>
00000000 l    df *ABS*  00000000 =
/usr/home/erik/freebsd/head1/src/lib/libstand/i386/_setjmp.S
00000000 l    d  .text  00000000=20
00000000 l    d  .data  00000000=20
00000000 l    d  .bss   00000000=20
00000000 g     F .text  0000001d _setjmp
00000020 g     F .text  00000024 _longjmp

There are absolute paths within SRCDIR and OBJDIR. I'm pretty sure =
libarchive.a will still work at runtime if I blow away those =
directories. I could really use some help changing the paths to be =
relative to SRJ/OBJDIR if that makes sense, or even removing them if =
that's better.


rodata.str1.4:
------------------
Some *.o files (all?) contain the path to the corresponding source file:

Contents of section .rodata.str1.4:
 0000 2f757372 2f686f6d 652f6572 696b2f66  /usr/home/erik/f
 0010 72656562 73642f68 6561642f 7372632f  reebsd/head1/src/
 0020 6c69622f 6c696273 74616e64 2f6f7065  lib/libstand/ope
 0030 6e2e6300                             n.c.

As with the symbol tables, is it possible to change these to relative =
paths, or just remove them?


If there are no flags to gcc or other tricks to do this, I've thought =
about calling strip(1) within the build process to remove the things I =
don't want.

Thanks,
Erik=

--Apple-Mail-195-994609787--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?93FA0AC7-704D-4EB4-A163-FDD8AC915630>