arm/156771: FreeBSD/arm fails to build trampoline code with clang due to missing -ffreestanding

Damjan Marion damjan.marion at gmail.com
Mon May 2 16:40:11 UTC 2011


>Number:         156771
>Category:       arm
>Synopsis:       FreeBSD/arm fails to build trampoline code with clang due to missing -ffreestanding
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-arm
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon May 02 16:40:10 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Damjan Marion
>Release:        -CURRENT
>Organization:
n/a
>Environment:
>Description:

clang compiler produces optimized code which calls memset which is missing when kernel.trampoline is linked.

inflate-tramp.o: In function `inflate_dynamic':
/Volumes/data/src/freebsd/sys/kern/inflate.c:(.text+0x538): undefined reference to `memset'
inflate-tramp.o: In function `huft_build':
/Volumes/data/src/freebsd/sys/kern/inflate.c:(.text+0xb1c): undefined reference to `memset'


This can be avoided by passing -ffreestanding (diff attached). 

>How-To-Repeat:

>Fix:
diff --git a/sys/conf/Makefile.arm b/sys/conf/Makefile.arm
index 756945d..d067fb3 100644
--- a/sys/conf/Makefile.arm
+++ b/sys/conf/Makefile.arm
@@ -108,7 +108,7 @@ ${KERNEL_KO}.tramp: ${KERNEL_KO} $S/$M/$M/inckern.S $S/$M/$M/elf_trampoline.c
        gzip -9 ${KERNEL_KO}.tmp
        eval $$(stat -s ${KERNEL_KO}.tmp.gz) && \
        echo "#define KERNCOMPSIZE $$st_size" >>opt_kernname.h
-       ${CC} -O2 -DKZIP -I. -I$S -c $S/kern/inflate.c -o inflate-tramp.o
+       ${CC} -O2 -ffreestanding -DKZIP -I. -I$S -c $S/kern/inflate.c -o inflate-tramp.o
        ${CC} -O -nostdlib -I. -I$S -Xlinker -T -Xlinker ldscript.$M.tramp \
        -DKZIP tmphack.S $S/$M/$M/elf_trampoline.c inflate-tramp.o \
        $S/$M/$M/inckern.S ${FILES_CPU_FUNC} -o ${KERNEL_KO}.gz.tramp


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-arm mailing list