ports head -r487783: on armv7 x11/pixman fails to build: /usr/bin/ld: error: can't create dynamic relocation R_ARM_V4BX against local symbol in readonly segment; recompile object files with -fPIC

Mark Millard marklmi at yahoo.com
Wed Nov 14 23:40:56 UTC 2018


[Evidence from inside poudriere bulk -j... -i ports-mgmt/pkg .
Use of native /nxb-bin/. . . leads to MACHINE_ARCH being amd64
instead of armv7 or the like. See later supporting material.]

On 2018-Nov-14, at 14:38, Bryan Drewery <bdrewery at FreeBSD.org> wrote:

> On 11/14/18 2:35 PM, Mark Millard wrote:
>> [Looking at package fallout logs: the official armv6 and armv7
>> builds are using -O2 because of MACHINE_ARCH being defined
>> because of qemu-user-static use. (mips too?) The logic in
>> share/mk/sys.mk is not causing -O . An implication
>> is that -O2 for armv6 and armv7 is probably far more tested
>> than people generally expect. The share/mk/sys.mk change
>> goes back to -r319861 2017-Jun-12 . Previously the logic
>> would have caused -O use for armv6 or armv7 in MACHINE_ARCH .]
> 
> r319861 doesn't look related here.

# more /etc/make.conf 
.sinclude "/etc/make.nxb.conf"
USE_PACKAGE_DEPENDS=yes
BATCH=yes
WRKDIRPREFIX=/wrkdirs
PORTSDIR=/usr/ports
PACKAGES=/packages
DISTDIR=/distfiles
FORCE_PACKAGE=yes
PACKAGE_BUILDING=yes
PACKAGE_BUILDING_FLAVORS=yes
MACHINE=arm
MACHINE_ARCH=armv7
ARCH=${MACHINE_ARCH}
#### /usr/local/etc/poudriere.d/make.conf ####
#### /usr/ports/Mk/Scripts/ports_env.sh ####
_CCVERSION_9d218390=FreeBSD clang version 6.0.1 (tags/RELEASE_601/final 335540) (based on LLVM 6.0.1) Target: armv7-unknown-freebsd13.0-gnueabihf Thread model: posix InstalledDir: /nxb-bin/usr/bin
_ALTCCVERSION_9d218390=none
_CXXINTERNAL_9c45a5b1=FreeBSD clang version 6.0.1 (tags/RELEASE_601/final 335540) (based on LLVM 6.0.1) Target: armv7-unknown-freebsd13.0-gnueabihf Thread model: posix InstalledDir: /nxb-bin/usr/bin "/nxb-bin/usr/bin/ld" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld-elf.so.1" "--hash-style=both" "--enable-new-dtags" "-o" "a.out" "/usr/lib/crt1.o" "/usr/lib/crti.o" "/usr/lib/crtbegin.o" "-L/usr/lib" "/dev/null" "-lc++" "-lm" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "/usr/lib/crtend.o" "/usr/lib/crtn.o"
CC_OUTPUT_9d218390_58173849=yes
CC_OUTPUT_9d218390_9bdba57c=yes
CC_OUTPUT_9d218390_6a4fe7f5=yes
CC_OUTPUT_9d218390_6bcac02b=yes
CC_OUTPUT_9d218390_67d20829=yes
CC_OUTPUT_9d218390_bfa62e83=yes
CC_OUTPUT_9d218390_f0b4d593=yes
CC_OUTPUT_9d218390_308abb44=yes
CC_OUTPUT_9d218390_f00456e5=yes
CC_OUTPUT_9d218390_65ad290d=yes
CC_OUTPUT_9d218390_f2776b26=yes
CC_OUTPUT_9d218390_b2657cc3=yes
CC_OUTPUT_9d218390_380987f7=yes
CC_OUTPUT_9d218390_160933ec=yes
CC_OUTPUT_9d218390_fb62803b=yes
_OBJC_CCVERSION_9d218390=FreeBSD clang version 6.0.1 (tags/RELEASE_601/final 335540) (based on LLVM 6.0.1) Target: armv7-unknown-freebsd13.0-gnueabihf Thread model: posix InstalledDir: /nxb-bin/usr/bin
_OBJC_ALTCCVERSION_9d218390=none
ARCH=armv7
OPSYS=FreeBSD
_OSRELEASE=13.0-CURRENT
OSREL=13.0
OSVERSION=1300003
PYTHONBASE=/usr/local
_SMP_CPUS=32
CONFIGURE_MAX_CMD_LEN=262144
HAVE_PORTS_ENV=1
#### Misc Poudriere ####
GID=0
UID=0
PACKAGES=/packages

# more /etc/src.conf
/etc/src.conf: No such file or directory

# more Makefile
all:
        echo ${MACHINE_ARCH}
        echo ${MACHINE_CPUARCH}
        echo ${CFLAGS}

# make
echo armv7
armv7
echo arm
arm
echo -O2 -pipe
-O2 -pipe

# grep -r "\-O2" /usr/src/share/mk/
/usr/src/share/mk/sys.mk:CFLAGS		?=	-O2 -pipe

# grep -r "\-pipe" /usr/src/share/mk/
/usr/src/share/mk/sys.mk:CFLAGS		?=	-O -pipe
/usr/src/share/mk/sys.mk:CFLAGS		?=	-O2 -pipe

Those lines come from:

.if ${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "mips"
CFLAGS          ?=      -O -pipe
.else
CFLAGS          ?=      -O2 -pipe
.endif

So I used:

# make -dA 2>2mmjnk.txt 1>1mmjnk.txt

and looked for the first -pipe in 2mmjnk.txt. (It is also
the first -O , in this case -O2 .)

. . .
Got 'C/mips(n32|64)?(el)?(hf)?/mips/:C/arm(v[67])?(eb)?/arm/:C/powerpc(64|spe)/powerpc/:C/riscv64(sf)?/riscv/' from '${__TO_CPUARCH}'}
Applying[MACHINE_ARCH] :C to "amd64"
Modifier pattern: "mips(n32|64)?(el)?(hf)?"
Modifier pattern: "mips"
Result[MACHINE_ARCH] of :C is "amd64"
Applying[MACHINE_ARCH] :C to "amd64"
Modifier pattern: "arm(v[67])?(eb)?"
Modifier pattern: "arm"
Result[MACHINE_ARCH] of :C is "amd64"
Applying[MACHINE_ARCH] :C to "amd64"
Modifier pattern: "powerpc(64|spe)"
Modifier pattern: "powerpc"
Result[MACHINE_ARCH] of :C is "amd64"
Applying[MACHINE_ARCH] :C to "amd64"
Modifier pattern: "riscv64(sf)?"
Modifier pattern: "riscv"
Result[MACHINE_ARCH] of :C is "amd64"
lhs = "amd64", rhs = "arm", op = ==
Got 'C/mips(n32|64)?(el)?(hf)?/mips/:C/arm(v[67])?(eb)?/arm/:C/powerpc(64|spe)/powerpc/:C/riscv64(sf)?/riscv/' from '${__TO_CPUARCH}'}
Applying[MACHINE_ARCH] :C to "amd64"
Modifier pattern: "mips(n32|64)?(el)?(hf)?"
Modifier pattern: "mips"
Result[MACHINE_ARCH] of :C is "amd64"
Applying[MACHINE_ARCH] :C to "amd64"
Modifier pattern: "arm(v[67])?(eb)?"
Modifier pattern: "arm"
Result[MACHINE_ARCH] of :C is "amd64"
Applying[MACHINE_ARCH] :C to "amd64"
Modifier pattern: "powerpc(64|spe)"
Modifier pattern: "powerpc"
Result[MACHINE_ARCH] of :C is "amd64"
Applying[MACHINE_ARCH] :C to "amd64"
Modifier pattern: "riscv64(sf)?"
Modifier pattern: "riscv"
Result[MACHINE_ARCH] of :C is "amd64"
lhs = "amd64", rhs = "mips", op = ==
ParseReadLine (172): 'CFLAGS            ?=      -O2 -pipe'
Global:CFLAGS = -O2 -pipe

It looks like the poudriere builds based on /nxb-bin/. . .
See the amd64 MACHINE_ARCH in the context that shows:

# uname -apKU
FreeBSD FBSDamd64TR 13.0-CURRENT FreeBSD 13.0-CURRENT arm armv7 1300003 1300003





===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)



More information about the freebsd-ports mailing list