Subject: Re: CONFIG_NLS=m resulting in undefined reference to utf16s_to_utf8s causing build failure

From: Jesse Barnes <[email-masked]>
Date: Wed, 12 Jan 2011 16:02:29 -0800

On Wed, 12 Jan 2011 12:10:17 -0800
<[email-masked]> wrote:

> Hello,
> 
> As described in the post http://marc.info/?l=linux-next&m=129478755528194&w=2
> setting CONFIG_NLS=m (generated by 'make allmodconfig) is causing a build
> failure on linux-next as following while compiling the patch 
> http://marc.info/?l=linux-pci&m=129313294112736&w=1 ([PATCH V2] Export
> ACPI _DSM provided firmware instance number and string to sysfs)
> 
> drivers/built-in.o: In function `dsm_label_utf16s_to_utf8s':
> /usr/src/Linux-Next/linux-next/drivers/pci/pci-label.c:195: undefined reference to `utf16s_to_utf8s'
> make: *** [.tmp_vmlinux1] Error 1
> 
> The drivers/pci/pci-label.c is compiled as part of vmlinux as defined by
> the makefile drivers/pci/Makefile. 
> 
> #
> # ACPI Related PCI FW Functions
> # ACPI _DSM provided firmware instance and string name
> #
> obj-$(CONFIG_ACPI)    += pci-acpi.o pci-label.o
> 
> # SMBIOS provided firmware instance and labels
> obj-$(CONFIG_DMI)    += pci-label.o
> 
> This could be prevented by one of the following methods -
> 
> * forcing CONFIG_NLS=y if CONFIG_PCI=y 
> * move `utf16s_to_utf8s' out of nls_base.c to a new file to be always
> built into vmlinux
> 
> Please correct me if i missed something here and let me know what would be the right
> way to fix this build failure.

So there's no other ACPI code that depends on this function?  I'd hate
to make PCI depend on NLS, so assuming ACPI doesn't need it (in which
case the select or depend should be there), I guess it should be pulled
into a common file that will always be included.

Thanks,
-- 
Jesse Barnes, Intel Open Source Technology Center