Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Dec 2012 01:11:22 +0200
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Shrikanth Kamath <shrikanth07@gmail.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: ELF symtab and ddbsymtab difference
Message-ID:  <20121206231122.GE3013@kib.kiev.ua>
In-Reply-To: <CAEOAkMU0osWoUensNaqBH%2BPWP9bcTLZffwLVh3WeppzqKMmT0g@mail.gmail.com>
References:  <CAEOAkMU0osWoUensNaqBH%2BPWP9bcTLZffwLVh3WeppzqKMmT0g@mail.gmail.com>

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

--hRQRnCc2hL38uoUj
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, Dec 05, 2012 at 12:13:24PM +0530, Shrikanth Kamath wrote:
> This is regarding the fields in the structure "elf_file_t" in link_elf.c.
> For some kernel modules the symtab field is different from the ddbsymtab
> field for some it is the same, would like to know what is the difference
> between the two and how to enable ddbsymtab?
Assuming we are talking about the link_elf.c and not about link_elf_obj.c.
The symtab and ddbsymtab are first initialized from the dynamic symbol
table in the module, and later, in the process of loading the module, if
the non-dynamic symbol table is present, ddbsymtab is rewritten to point
to the table.

>=20
> Does enabling "-g" in CFLAGS make the binary build the ddbsymtab different
> from symtab?
No. It is strip done on the module which could result in the removal of the
non-dynamic symtab.

>=20
> The problem is lookup for some symbols in the kernel module that I built
> returns with undefined, on inspecting it was getting a ENOENT from the
> function
>     link_elf_lookup_symbol()
>     {
>          ...
>          /* If we have not found it, look at the full table (if loaded) */
>          if (ef->symtab =3D=3D ef->ddbsymtab)
>              return (ENOENT);
>          ...
>     }

It is not the problem. It just means that you dynamic symbol table does
not contain the needed symbol, which is the problem. As a coincident,
you also stripped your module, making the problem to be exposed.

I guess that you should look at the EXPORT_SYMS feature of the module
Makefiles. But I also remember there were some bugs.

--hRQRnCc2hL38uoUj
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (FreeBSD)

iQIcBAEBAgAGBQJQwSYZAAoJEJDCuSvBvK1B5bQP+gOsuyPIj4GrcOUt70uVDysS
dRWogfQmrBS1CMxflHvEmeR7xvkPwdbYBlPyWcJ4sIKsjQ9GayELHJ+Hm2eD4F4J
reuiG6uvBUBRbVaPMalGkjbZ1xgyJL5LAvc8avxlnFl9Hrw39c8gzse/+AZAB+O/
N3bJQ5YxNTXWrp5PZaSOMAuNpYxPLrfjuQxEkCjmDKZ9gbtUgSLrCsadQizrjQlt
PojTy3kzTKdt9PM67ZMLI1ahLtOxpghuzZ96M5yJOwqFadpvg9XS5HHTDSu/0XoI
gq2wdPEO4HYLoXnUszvgEZ1x3xzoLPD4V1Z6XG5PYKeei2BBK3cujYml3qz6LQ5L
SVDjszyiUgi7j33+djaPZZHKiB1Jiti63Kw2t17G1miYlS2Q/LWS3H9ZXd1JuEm/
xcMr1jslMKFCfDa+W9dwYN3hGW4z3ypDmV31N/ZjHp0i982FXdA1BAQcZMBuyb5B
2xAJfvXomrzBXLXaGGsRMYjL+VMXnjkDb3rXSJOyWJP4FiFpVD++xPQehfFfKHtw
eKD7mUXtQD0k1PsIHqZ3veHKrnLmW6RyhlCA7WkJ4dTS4bJiK5lW93vbaC/ikrTO
RClUdHsjmOJcxu4buzOMYraOozuz56Z6ClbzbaqagqCrj/kP8h7F59g+en9uGnTJ
jGeuWqCR8O3Y/YT3TOOE
=bkzM
-----END PGP SIGNATURE-----

--hRQRnCc2hL38uoUj--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20121206231122.GE3013>