cmpxchg() in recent kernels

Aras Vaichas arasv at magellan-technology.com
Mon Oct 25 18:48:40 EDT 2010


On 26 October 2010 02:13, Russell King - ARM Linux
<linux at arm.linux.org.uk> wrote:
> On Mon, Oct 25, 2010 at 12:33:49PM +1100, Aras Vaichas wrote:
>> On 25 October 2010 09:08, Russell King - ARM Linux
>> <linux at arm.linux.org.uk> wrote:
>> >
>> > On Sun, Oct 24, 2010 at 11:43:38PM +0200, Kristoffer Ericson wrote:
>> > > Im seeing something similiar, using GCC 3.4.5
>> > > ARM HP Jornada 720, 2.6.36
>> snip ...
>> > > kernel/built-in.o(.text+0x1d038): In function `alloc_pid':
>> > > include/asm-generic/cmpxchg-local.h:42: undefined reference to `wrong_size_cmpxchg'
>> > > make: *** [.tmp_vmlinux1] Error 1
>> >
>> > Probably needs to be bisected, but I think in the long run we'll have
>> > to accept that gcc 4 will become the minimum compiler version.
>>
>> I just tested a build with GCC 4.2.3 and it linked correctly. The only
>> problem is that the kernel image size is now 3x as big.
>>
>>
>> Using gcc-3.4.4-glibc-2.3.5:
>>
>> * fails to link without patch to cmpxchg-local.h, but size is similar
>> to my previous builds
>>
>> Created:      Mon Oct 25 11:59:04 2010
>> Image Type:   ARM Linux Kernel Image (gzip compressed)
>> Data Size:    1471354 Bytes = 1436.87 kB = 1.40 MB
>>
>>
>> Using gcc-4.2.3-glibc-2.7:
>>
>> * compiles and links correctly, but size is way too big
>>
>> Created:      Mon Oct 25 11:48:26 2010
>> Image Type:   ARM Linux Kernel Image (gzip compressed)
>> Data Size:    4576155 Bytes = 4468.90 kB = 4.36 MB
>
> This sounds like a regression - can you please bisect to try and find
> which change caused tihs?

OK, problem solved. I had this problem:
http://lists.busybox.net/pipermail/buildroot/2008-June/021158.html

The fix for this problem was included as a patch for the kernel as shown here:
http://lists.busybox.net/pipermail/buildroot/2008-June/021162.html

But my U-Boot uImage build script does its own objcopy and thus didn't
get patched. I've added the extra objcopy arguments to my script and
my final image size is now 1.36MB.

For reference, this is my uImage make script:

make ARCH=arm CROSS_COMPILE=${CROSS_PATH} INSTALL_MOD_PATH=${FS_PATH} Image

${CROSS_PATH}objcopy -O binary -R .note -R .note.gnu.build-id -R
.comment -S vmlinux linux.bin

gzip -v9 linux.bin

${MKIMAGE} -A arm -O linux -C gzip -a 0x20008000 -e 0x20008000 -d
linux.bin.gz uImage


Aras



More information about the linux-arm-kernel mailing list